由于某种人力不可抗拒的无法告知的一些事件,最近偶过的不是很爽,发文小纪念一下. 大家都知道,使用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;
}

一分钟学会手工注册BHO相关推荐

  1. 5分钟学会cleos注册EOS主网账户、投票和发币

    第一步: 安装docker https://www.docker.com/community-edition # install docker for CentOS. (其他操作系统看上面链接) su ...

  2. UWP开发入门(十九)——10分钟学会在VS2015中使用Git

    原文:UWP开发入门(十九)--10分钟学会在VS2015中使用Git 写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支 ...

  3. python写好的代码怎么给别人使用-10分钟学会用python写游戏!Python其实很简单!...

    原标题:10分钟学会用python写游戏!Python其实很简单! Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以在这里给各位看官们准备了高价值Python学习视频教程 ...

  4. 手机版python3h如何自制游戏_Python 飞机大战|10 分钟学会用 python 写游戏

    Python 飞机大战|10 分钟学会用 python 写游戏 2018 年 python 语言大火, 这把火看趋势已然延续到了 2019 年! 除了在科学计算领域 python 有用武之地之外, 在 ...

  5. 最完整的WordPress建站教程,新手10分钟学会建站

    假如你是一个菜鸟,也能从0开始,10分钟学会搭建(wordpress,Dede,Discuz!..)网站. 网站=域名+空间和数据库+网站程序+模板 1准备材料 [域名] 网址就相当于家的住址,记住和 ...

  6. 1分钟学会SpringBoot2知识点,让你35岁不再失业(二)

    1分钟学会SpringBoot2知识点,让你35岁不再失业(二) 目录 1分钟学会SpringBoot2知识点,让你35岁不再失业(二) 第十三节.springboot2集成mybatis和swagg ...

  7. 30分钟学会EventBus3 0详解(二)(EventBus3 0的详细使用)(by星空武哥)

    转载声明原创地址:http://blog.csdn.net/lsyz0021/article/details/52094855 30分钟学会EventBus3.0详解(一)(引入和初始化EventBu ...

  8. 十分钟学会win10系统封装之系列教程(一):在VMware Workstation虚拟机上安装win10母盘系统

    关于系统封装这个话题,历来就一直受到很多小伙伴的青睐,很多同学都认为会封装系统是一件很高大上的事情,所以一直都有很多小伙伴向亦是美网络小编询问到底什么时候能出一些关于win10系统封装的教程,其实小编 ...

  9. 三分钟学会css3中的flexbox布局

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章里我们将学习CSS里flexbox布局的几个最重要的概念,通过学习flexbox布局,你会发现以往遇到的所有的关于布局 ...

最新文章

  1. php imagemagick 漏洞,ImageMagick漏洞EXP简易生成脚本
  2. 用Arduino检测环境中的温湿度
  3. 分享转帖 -- 考勤的背后 (加注个人点评哦)
  4. “智物 智造”亮相云栖大会 远程操控工厂震撼骨灰级程序员
  5. android 服务器返回302,Android WebView 内处理302重定向不跳转的解决
  6. 用户体验是非常难琢磨的东西
  7. 利用端口映射解决:拥有公网IP有限,内网需要访问因特网
  8. OpenResty之 lua_shared_dict 指令
  9. 【Python】判断多边形的形状为凸多边形还是凹多边形
  10. ccy 朴素版(顺序搜索)19ms
  11. windows的mysql无密码登录,windows mysql 跳过登录密码重置
  12. 苹果审核4.3如何解决?混淆?还是重新上架?用这招居然成功上架AppStore了!
  13. 关于毕业:三方协议、派遣证、干部身份等常识
  14. Android 实现扫描二维码功能
  15. word 空格变删除 问题及解决
  16. android https握手失败,Android SSL错误握手失败
  17. 电脑电池,笔记本电池校正,教您怎样校正笔记本电脑电池
  18. 微信小程序——VW、VH
  19. R语言 回归诊断几种方法
  20. Agile 正式升级为 Project ,打造团队卓越交付能力

热门文章

  1. 微软PPM 软件 android,微软Surface Duo带来改进后的手写笔支持 Android系统也可顺滑无迟滞...
  2. 【IOS每日限免】1月17号最新IOS每日限免信息来啦!
  3. 图文讲解安装Adobe Photoshop 2021 for Mac(附下载dmg安装包)
  4. 开关稳压器详解(七)-Buck降压型开关稳压器RC Snubber设计
  5. 安装部署docker
  6. Verilog学习之四选一多路器设计
  7. socket是一个编程接口
  8. 【C++】常用math函数
  9. bilibili直播地址获取
  10. 主板aspm关闭_主板ASpm功能是什么模式