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

CComCritSecLock<CComAutoCriticalSection> lock(m_csHooks);

HookMap::iterator it = m_hooks.lower_bound(tmp);

if (it == m_hooks.end() || (*it).first != tmp) //а нет ли уже такого хука?

{

// ставим новый хук

// по хорошему, тут бы стоило еще проверять, не вернул ли new 0

HookPtr pNewHook(new HookEntry()); //

if (pNewHook->Hook(pItf))

{

m_hooks.insert(it, HookMap::value_type(tmp, pNewHook));

//предотвращаем преждевременную выгрузку dll

if (++m_totalRefCount == 1)

_Module.Lock();

}

else

return NULL;

}

else

(*it).second->AddRef(); //хук уже есть. просто добавляем ссылку

} //lock.Unlock();

//добавляем или достаем credentials

CComCritSecLock<CComAutoCriticalSection> lock2(m_csCredentials);

CredentialsMap::iterator itc = m_credentials.lower_bound(pItf);

//такого элемента еще нет – придется добавить

if (itc == m_credentials.end() || (*itc).first != pItf)

{

m_credentials.insert(itc, CredentialsMap::value_type(pItf, pCredentials));

return pCredentials->GetCredentials();

}

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