首页 网络安全 安全学院 查看内容

手工注册BHO

2009-5-10 22:24 661 0

摘要: 家都知道,使用ATL的向导即可迅速生成一个最简单的IE辅助插件(BHO)。而IE启动的时候是 通过注册表项寻找BHO并实例化BHO对象的。那么ATL工程的DllRegisterServer(void...
关键词: cKey nbsp szClSID char sprintf szPath SetValue szCurVersion return szProgName

家都知道,使用ATL的向导即可迅速生成一个最简单的IE辅助插件(BHO)。而IE启动的时候是 通过注册表项寻找BHO并实例化BHO对象的。那么ATL工程的DllRegisterServer(void)究竟做了 些什么写注册表的工作呢。其实不复杂,我们可以手工注册一个BHO模拟出来。嗯,闲话少说, 翠花,上代码 bool ManualRegBHO(char * szClSID, char * szLIBID, char * szDesc, char * szProgName, char * szCurVersion, char * szProgpath){char szPath[MAX_PATH];sprintf(szPath, "CLSID\\%s", szClSID); CRegKey cKey;if(ERROR_SUCCESS != cKey.Create(HKEY_CLASSES_ROOT, szPath))   return false;cKey.SetValue(szDesc);cKey.Close(); sprintf(szPath, "CLSID\\%s\\InprocServer32", szClSID);if(ERROR_SUCCESS != cKey.Create(HKEY_CLASSES_ROOT, szPath))   return false;cKey.SetValue(szProgpath);cKey.SetValue("Apartment", "ThreadingModel");cKey.Close(); sprintf(szPath, "CLSID\\%s\\ProgID", szClSID);if(ERROR_SUCCESS != cKey.Create(HKEY_CLASSES_ROOT, szPath))   return false;cKey.SetValue(szCurVersion);cKey.Close(); sprintf(szPath, "CLSID\\%s\\Programmable", szClSID);if(ERROR_SUCCESS != cKey.Create(HKEY_CLASSES_ROOT, szPath))   return false;cKey.Close(); sprintf(szPath, "CLSID\\%s\\TypeLib", szClSID);if(ERROR_SUCCESS != cKey.Create(HKEY_CLASSES_ROOT, szPath))   return false;cKey.SetValue(szLIBID);cKey.Close(); sprintf(szPath, "CLSID\\%s\\VersionIndependentProgID", szClSID);if(ERROR_SUCCESS != cKey.Create(HKEY_CLASSES_ROOT, szPath))   return false;cKey.SetValue(szProgName);cKey.Close(); if(ERROR_SUCCESS != cKey.Create(HKEY_CLASSES_ROOT, szCurVersion))   return false;cKey.SetValue(szDesc);cKey.SetValue(szClSID, "CLSID");cKey.Close(); if(ERROR_SUCCESS != cKey.Create(HKEY_CLASSES_ROOT, szProgName))   return false;cKey.SetValue(szDesc);cKey.SetValue(szClSID, "CLSID");cKey.SetValue(szCurVersion, "CurVer");cKey.Close(); char szBHOPath[1024];sprintf(szBHOPath, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects\\%s", szClSID);if(ERROR_SUCCESS != cKey.Create(HKEY_LOCAL_MACHINE, szBHOPath))   return false;cKey.Close(); return true;} 怎么测试上面这个函数呢,很简单,假设现在有了一个BHO的dll,叫做RegBHOTest。 #include <windows.h>#include <stdio.h>#include <atlbase.h> #ifndef WIN32_LEAN_AND_MEAN#define WIN32_LEAN_AND_MEAN#endif bool ManualRegBHO(char * szClSID, char * szLIBID, char * szDesc, char * szProgName, char * szCurVersion, char * szProgpath); int main(int argc, char argv[]){char szClSID[MAX_PATH];sprintf(szClSID, "{1F91A9A1-01BA-4c81-863D-3BA0751E1419}");char szLIBID[MAX_PATH];sprintf(szLIBID, "{7AF35383-BF85-4c9a-85A0-89F052D76787}");char szDesc[MAX_PATH];sprintf(szDesc, "RegBHOTest Class");char szProgName[MAX_PATH];sprintf(szProgName, "RegBHO.RegBHOTest");char szCurVersion[MAX_PATH];sprintf(szCurVersion, "RegBHO.RegBHOTest.1");char szProgpath[MAX_PATH];sprintf(szProgpath, "C:\\Windows\\System32\\RegBHOTest.dll"); printf("BHO Info:\nCLSID: %s\nLIBID: %s\nDesc: %s\nProgName: %s\nCurVersion: % s\nProgPath: %s\n",   szClSID, szLIBID, szDesc, szProgName, szCurVersion, szProgpath); if(ManualRegBHO(szClSID, szLIBID, szDesc, szProgName, szCurVersion, szProgpath)){   printf("BHO注册成功!\n");}else{   printf("BHO注册失败!\n");}return 0;}
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部