Реферат: Перехват методов интерфейса Iunknown

return (*itc).second->GetCredentials();

}

В дальнейшем этот же метод вызывается из перехватчика QueryInterface:

Метод QueryInterfaceHook

//хук QueryInterface

STDMETHODIMP HookEntry::QueryInterfaceHook(void* pItf, REFIID iid, void** ppvObject)

{

//добываемхелпер-объект

HookEntry* pHook = HookFromItf(reinterpret_cast<IUnknown*>(pItf));

if (pHook == NULL)

//хук уже кто-то снял :(

return ((IUnknown*)pItf)->QueryInterface(iid, ppvObject);

//IClientSecurity долженпроходитьмимо

if (::InlineIsEqualGUID(iid, IID_IClientSecurity))

return pHook->m_oldQI(pItf, iid, ppvObject);

//собственно QueryInterface

CComPtr<IUnknown> spUnknown;

HRESULT hr = pHook->m_oldQI(pItf, iid, (void**)&spUnknown.p);

if (FAILED(hr))

return hr;

//добываемпары «логин-пароль»

CredentialsHolder::CredentialsPtr* pCredentials = CredentialsFromItf(reinterpret_cast<IUnknown*>(pItf));

if (pCredentials != NULL)

{

// устанавливаем хук на интерфейс

RPC_AUTH_IDENTITY_HANDLE ident = HookInterface(spUnknown.p, *pCredentials);

if (ident)

{

//и устанавливаем на интерфейс proxy blanket

К-во Просмотров: 186
Бесплатно скачать Реферат: Перехват методов интерфейса Iunknown