总结一下经验,其实网上有很多介绍(也贴出了很多代码,可惜这些代码都或多或少的存在一些问题),笔者当时碰到的一个问题是当操作系统异常中断(掉电等等),系统再次启动的时候卡在dll,无法启动,这是一个很大的问题,原来的代码参考了费尔防火墙那种强写注册表的方式,事实证明这种方式是不妥当,在VISTAS上无法运行,于是用系统方法WSCInstallProvider,使用了网上的一些代码,结果dll安装老是不对,也不能完全解决无法启动问题,打开一个新IE结果整个控制台死了.
这几天千辛万苦终于解决了,总结了一些经验:
1.WSCInstallProvider等方法是UNICODE编码,注意了你的项目要么是完完全全的UNICODE,要么使用WCHAR,wcscpy等UNICODE的方法和变量(局部使用UNICODE不取可,我当时抄网上的代码就是这种,使用TCHAR,_tcscpy的,后来发现混合编码编程中,宏定义在VS2005中会发生不可预料的编译,也许是太混乱了).
2.dll中过多的使用了InitializeCriticalSection等LOCK导致dll在加载的时候死锁
3.dll中使用了一些上层的东西,而dll本身是运行在下层,这些上层东西在系统重启动的时候无法初始化通过.
改天再写一个简易版代码发上来. 今天终于有空了,现提供完整项目下载.部分代码来自网上,经过我的调试和修改.
SPI 程序 下载
安装程序 下载