BHO对象不会加载,可能是注册麻烦?

时间:2014-02-20 04:32:56

标签: bho

我无法让Internet Explorer或Windows资源管理器加载此BHO。当然没有可以创建的COM对象,但是在加载DLL并检查之前,Explorer无法知道,但LoadLibrary没有被调用。

当我运行regsvr32时,会显示消息框。

Windows版本= 8.1

Internet Epxlorer Version = 11

开启或关闭增强保护模式似乎没有什么区别。

#include <windows.h>
#include <olectl.h>
#include <stddef.h>
#include <string.h>

#define wstrlen wcslen

HINSTANCE me;

DWORD WINAPI M4(void *junk)
{    
    MessageBox(NULL, "Loaded", "bho", 0);
}

BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpReserved)
{
    wchar_t mainexe[1024];
    if (fdwReason == DLL_PROCESS_ATTACH) {
        me = hInstDll;
        DisableThreadLibraryCalls(me);
        /* GetModuleFileNameW(NULL, mainexe, 1024); */
        /* len = wstrlen(mainexe); */

        HANDLE th = CreateThread(NULL, 32768, M4, NULL, 0, NULL);
    }
return TRUE;
}

STDAPI DllGetClassObject(REFIID rclsid,REFIID riid,LPVOID *ppv)
{
return CLASS_E_CLASSNOTAVAILABLE;
}

STDAPI DllCanUnloadNow()
{
return FALSE;
}

const char *CLSID_NAME = "CLSID\\{2D3E480A-0000-0000-0000-64756D796C6472}";
const char *CLSID_IPS32 = "CLSID\\{2D3E480A-0000-0000-0000-64756D796C6472}\\InProcServer32";
const char *BHO = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects\\{2D3E480A-0000-0000-0000-64756D796C6472}";
const wchar_t *name = L"Redacted BHO";
const char *apt = "Apartment";

STDAPI DllRegisterServer()
{
HKEY hk;
wchar_t dllpath[1024];

GetModuleFileNameW(me,dllpath,1024);

if (RegCreateKeyEx(HKEY_CLASSES_ROOT, CLSID_NAME, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hk, NULL) != ERROR_SUCCESS)
    return SELFREG_E_CLASS;
RegSetValueExW(hk, NULL, 0, REG_SZ, (const BYTE *)(name), (wstrlen(name) + 1) << 1);
RegCloseKey(hk);
if (RegCreateKeyEx(HKEY_CLASSES_ROOT, CLSID_IPS32, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hk, NULL) != ERROR_SUCCESS)
    return SELFREG_E_CLASS;
RegSetValueExW(hk, NULL, 0, REG_SZ, (const BYTE *)(dllpath), (wstrlen(dllpath) + 1) << 1);
RegSetValueEx(hk, "ThreadingModel", 0, REG_SZ, (const BYTE *)(apt), 10);
RegCloseKey(hk);
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, BHO, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hk, NULL) != ERROR_SUCCESS)
    return SELFREG_E_CLASS;
RegCloseKey(hk);
return S_OK;
}

STDAPI DllUnregisterServer()
{
RegDeleteKey(HKEY_LOCAL_MACHINE, BHO);
RegDeleteKey(HKEY_CLASSES_ROOT, CLSID_IPS32);
RegDeleteKey(HKEY_CLASSES_ROOT, CLSID_NAME);
}

1 个答案:

答案 0 :(得分:0)

对于增强保护模式(EPM)中的IE11,必须使用以下命令更新注册表:

  

HKEY_CLASSES_ROOT \ CLSID \ {您的BHO CLSID} \已实施   分类\ {59FB2056-D625-48D0-A944-1A85B5AB2640}