(연관된 글이 1개 있습니다.)
BHO 개체는 레지스트리에 등록이 되면, 이후로 탐색기와 인터넷 익스플로러가 실행될 때마다 해당 프로그램의 프로세스 공간으로 로딩이 됩니다.
즉, 잠겨지게 되는 것이죠.
대부분의 경우, BHO 개발동기는 Internet Explorer 에 Plug-in 시키기 위해서인데, 쓸데없이 탐색기에 떠서 말썽이 일어나거나, 탐색기로 인해 컴파일이 안되어서 폴더확장까지 다 해놓은 탐색기를 종료시켜야 하는 상황이 발생합니다.
잠깐 머리를 써보았더니, 해답은 생각보다 간단하더군요.
다음과 같이 구현을 해놓으시면 됩니다.
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
char tempBuf[ 4096 ] = { 0 };
::GetModuleFileName( NULL, tempBuf, 4096 );
if ( CStringEx::ciFind( tempBuf, "explorer.exe" ) != -1 )
{
// 인터넷 익스플로러가 아닌 탐색기에서 활성화 되는 것이라면.
// FALSE 를 반환.
return FALSE;
}
_Module.Init(ObjectMap, hInstance, &LIBID_IEXTENDER3Lib);
DisableThreadLibraryCalls(hInstance);
}
else if (dwReason == DLL_PROCESS_DETACH)
_Module.Term();
return TRUE; // ok
}
[연관 글]