TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Documento DOM com um objeto de Site (listagem de código C++)

Por:   •  29/5/2016  •  Trabalho acadêmico  •  1.578 Palavras (7 Páginas)  •  306 Visualizações

Página 1 de 7

Documento DOM com um objeto de Site (listagem de código C++)

 

Este tópico contém o código-fonte listagem para o projeto DOMWithSiteObj, que implementa um documento DOM XML que contém um objeto de site (um componente do Gerenciador de segurança personalizado) que controla o acesso aos recursos, aqui um arquivo XML local.

Descrição: Documento DOM com um objeto de Site

O código-fonte C/C++ em arquivos listados abaixo executa as seguintes ações:

  1. Cria um IXMLDomDocument objeto.
  2. Cria um objeto de site e define a URL de Base de segurança, o mapa de zona e o mapa de ação no objeto.
  3. Define as opções de segurança sobre o IXMLDomDocument objeto.
  4. Define o objeto de site a IXMLDomDocument objeto.
  5. Chamadas de load método de IXMLDomDocument objeto, especificando o caminho para o arquivo XML local, sample.xml.

Quando executado, a ação de carga falhar com um erro "Acesso negado" porque a URL de base segura é definida como www.microsoft.com e o mapa de zona está definido como URLZONE_INTERNET. Falha porque as opções de segurança são definidas para o documento DOM, e esses não permitir movimentação da zona da Internet à zona da máquina Local. Se o objeto de site não foi definido, em seguida, carregar o arquivo XML local teria êxito.

[pic 1]Observação

o seguinte código C/C++ usa ponteiros inteligentes, que são representados pelo com_smartptr_typedef macro e o com_ptr_t tipo.

Listagem de código: DOMWithSiteObj.cpp

C++

#include "stdafx.h" #include #include #include using namespace std; #include #include "msxml2.h" #include "SiteImpl.h" #pragma comment( lib, "msxml6.lib") _COM_SMARTPTR_TYPEDEF(IObjectSafety, __uuidof(IObjectSafety)); _COM_SMARTPTR_TYPEDEF(IXMLDOMDocument2, __uuidof(IXMLDOMDocument2)); _COM_SMARTPTR_TYPEDEF(IXMLDOMParseError, __uuidof(IXMLDOMParseError)); // CLSIDs for MSXML objects (varies with MSXML version). #define DOMCLSID CLSID_DOMDocument60 // Helper function that puts output in stdout. void dprintf( char* format, ...) { va_list args; int len; char* buffer; va_start(args, format); len = _vscprintf(format, args) // _vscprintf does not count + 1; // terminating '\0' buffer = (char*)malloc(len * sizeof(char)); vsprintf_s(buffer, len, format, args); puts(buffer); free(buffer); } // Prepares the security manager object. IUnknownPtr CreateSecureSite(ZONEMAP* pZoneMap, int nZoneMapCount, ACTIONMAP* pActionMap, int nActionMapCount, LPCWSTR secureBaseURL) { if (secureBaseURL == NULL) { dprintf("\nNo secureBaseURL, returning NULL for CreateSecureSite\r\n"); return NULL; } // Create the Site object. CSiteImpl * pSite = new CSiteImpl(secureBaseURL); // Set the Zone and Action maps. pSite->SetZoneMap(pZoneMap, nZoneMapCount); pSite->SetActionMap(pActionMap, nActionMapCount); IUnknownPtr pSitePtr(pSite); return pSitePtr; } // Sets the safety options on the DOM object and // sets the Site object on the DOM object. HRESULT SetSecurityAndSite(IUnknownPtr pObj, IUnknownPtr pSite) { HRESULT hr; // Set the safety options on the DOM object. IObjectSafetyPtr pObjectSafety(pObj); if (pObjectSafety != NULL) { DWORD dwSafetyOpt = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; hr = pObjectSafety->SetInterfaceSafetyOptions(IID_IUnknown, dwSafetyOpt, dwSafetyOpt); if(FAILED(hr)) { return hr; } } // Set the site object on the DOM object. if (pSite != NULL) { IObjectWithSitePtr pObjectWithSite(pObj); if (pObjectWithSite != NULL) { hr = pObjectWithSite->SetSite(pSite); if (FAILED(hr)) { return hr; } } } return S_OK; } wstring GetErrorMessage(IUnknownPtr pUnk, REFIID refiid) { HRESULT hr; wstring result; IErrorInfoPtr pErrorInfo = NULL; hr = GetErrorInfo(0, &pErrorInfo); if (hr != S_OK) { return result; } BSTR bstrMessage; hr = pErrorInfo->GetDescription(&bstrMessage); _bstr_t bsMessage(bstrMessage, true); result = (LPCWSTR)bsMessage; return result; } int _tmain(int argc, _TCHAR* argv[]) { IXMLDOMDocument *pXMLDom=NULL; IXMLDOMParseError *pXMLErr=NULL; BSTR bstr = NULL; HRESULT hr; CoInitialize(NULL); // Create an action map. ACTIONMAP actionMap[] = { ACTIONMAP(URLZONE_INTERNET, URLACTION_CROSS_DOMAIN_DATA, URLPOLICY_ALLOW), }; int nActionMapCount = sizeof(actionMap) / sizeof(ACTIONMAP); // Create a site object. IUnknownPtr pSite = CreateSecureSite(NULL, 0, actionMap, nActionMapCount, L"www.microsoft.com"); // Create a DOM object. IXMLDOMDocument2 *pDOMDocument = NULL; hr = CoCreateInstance(DOMCLSID, NULL, CLSCTX_INPROC, IID_IXMLDOMDocument2, (LPVOID *)&pDOMDocument); if (FAILED(hr)) { wstring msg = GetErrorMessage(pDOMDocument, IID_IUnknown); dprintf("%s (%s, %d)\n", (LPCSTR)msg.c_str(), __FILE__, __LINE__); goto clean; } // Tell the DOM object to be secure and set the site object on the DOM object. hr = SetSecurityAndSite(pDOMDocument, pSite); if (FAILED(hr)) { wstring msg = GetErrorMessage(pSite, IID_IUnknown); dprintf("%s (%s, %d)\n", (LPCSTR)msg.c_str(), __FILE__, __LINE__); goto clean; } VARIANT_BOOL bSuccess; // The most common properties that are set on the DOM object. pDOMDocument->put_async(VARIANT_FALSE); pDOMDocument->put_resolveExternals( VARIANT_TRUE ); pDOMDocument->put_validateOnParse(VARIANT_FALSE ); dprintf("Calling load on sample.xml.\r\n"); // Load the file. pDOMDocument->load(variant_t("sample.xml"), &bSuccess); if (bSuccess!=VARIANT_TRUE) { hr = pDOMDocument->get_parseError(&pXMLErr); if (FAILED(hr)) { wstring msg = GetErrorMessage(pDOMDocument, IID_IUnknown); dprintf("%s (%s, %d)\n", (LPCSTR)msg.c_str(), __FILE__, __LINE__); goto clean; } hr = pXMLErr->get_reason(&bstr); if (FAILED(hr)) { wstring msg = GetErrorMessage(pXMLErr, IID_IUnknown); dprintf("%s (%s, %d)\n", (LPCSTR)msg.c_str(), __FILE__, __LINE__); goto clean; } dprintf("Failed to load DOM from sample.xml. %S\n",bstr); goto clean; } hr = pDOMDocument->get_xml(&bstr); if (FAILED(hr)) { wstring msg = GetErrorMessage(pDOMDocument, IID_IUnknown); dprintf("%s (%s, %d)\n", (LPCSTR)msg.c_str(), __FILE__, __LINE__); goto clean; } dprintf("XML DOM loaded from sample.xml:\n%S\n",bstr); clean: if (bstr) SysFreeString(bstr); CoUninitialize(); return 0; }

...

Baixar como (para membros premium)  txt (13 Kb)   pdf (161 Kb)   docx (176.6 Kb)  
Continuar por mais 6 páginas »
Disponível apenas no TrabalhosGratuitos.com