最近有个软件项目,需要使用winpcap提供的网络监测功能,生成的exe安装包里面需要静默安装winpcap所有功能文件。
以WinPcap 3.0a 为例。通过比较安装前后的文件系统和注册表快照,很容易了解整个安装过程。
除去反安装的部分,关键的文件有三个:wpcap.dll,packet.dll和npf.sys。前面两个文件位于system32目录下,第三个在system
32/drivers下。而注册表的变化是增加了一个系统服务NPF。注意,是系统服务(即驱动)不是Win32服务。
作为系统服务,不但要在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services下增加主键,在HKEY_LOCAL_MACHINE/SYSTEM/
CurrentControlSet/Enum/Root下也增加主键。而后者默认只有SYSTEM身份才可以修改。幸运的是,并不需要手动添加它,winpcap
被调用时会自动搞定。甚至完全不用手动修改注册表,所有的事winpcap都会自己完成,只需要将三个文件复制到合适的位置就行
了。 作为范例,还是演示一下如何修改注册表:利用前面说过的inf文件来实现。
[Version]
Signature=”$WINDOWS NT$”
[DefaultInstall.Services]
AddService=NPF,,winpcap_svr
[winpcap_svr]
DisplayName=Netgroup Packet Filter
ServiceType=0x1
StartType=3
ErrorControl=1
ServiceBinary=%12%/npf.sys
将上面这些内容保存为_wpcap_.inf文件。
再写一个批处理_wpcap_.bat:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 %CD%/_wpcap_.inf
del _wpcap_.inf
if /i %CD%==%SYSTEMROOT%/system32 goto COPYDRV
copy packet.dll %SYSTEMROOT%/system32/
copy wpcap.dll %SYSTEMROOT%/system32/
del packet.dll
del wpcap.dll
:COPYDRV
if /i %CD%==%SYSTEMROOT%/system32/drivers goto END
copy npf.sys %SYSTEMROOT%/system32/drivers/
del npf.sys
:END
del %0
然后用winrar将所有文件(5个)打包为自解压的exe,并将『高级自解压选项』->『解压后运行』设置为_wpcap_.bat,命令行的w
inpcap安装包就制作完成了。 注意,批处理最后一行没有回车符。否则会因为正在运行而无法删除自己。
WinPcap.exe安装实现的逻辑实际上相当于 对 wpcap.dll、packet.dll 和 npf.sys 这三个文件放到相应的系统文件夹下。
首先我们需要知道安装需要的文件:Packet.dll,WanPacket.dll,wpcap.dll,pthreadVC.dll,npf.sys。他们所在的位置也需要搞清楚,如果是手动拷贝,则需要将文件Packet.dll,WanPacket.dll,wpcap.dll,pthreadVC.dll复制到system32中,将npf.sys复制到system32\drivers中。npf是我们要安装的一个驱动服务,安装这个服务,我们需要使用sc.exe的处理:sc create npf binpath= system32\drivers\npf.sys type= kernel start= demand。同时卸载方法是:先停止驱动npf(sc stop npf),再删除驱动(sc delete npf),最后删除上文提到的5个文件。
1、x86 系统
对于32位系统而言,我们需要把 x86版本的wpcap.dll、packet.dll 和 npf.sys这三个文件进行拷贝到不同位置,分别为:
wpcap.dll (x86版本) 拷贝到 C:\Windows\system32\ 下
packet.dll (x86版本) 拷贝到 C:\Windows\system32\ 下
npf.sys (x86版本) 拷贝到 C:\Windows\system32\drivers\ 下
成功后,就相当于WinPcap的免安装版就OK了。
2、x64 系统
对于64位系统而言,比较复杂一点,拿C++程序对WinPcap 封装来讲
(1)如果C++编译出来的程序本身是64位的,在x64位的系统上运行,步骤简单些
wpcap.dll (x64版本) 拷贝到 C:\Windows\system32\ 下
packet.dll (x64版本) 拷贝到 C:\Windows\system32\ 下
npf.sys (x64版本) 拷贝到 C:\Windows\system32\drivers\ 下
(2)如果C++编译出来的程序本身是32位的,希望兼容x86和x64都能运行,步骤复杂些
wpcap.dll (x64版本) 拷贝到 C:\Windows\system32\ 下
packet.dll (x64版本) 拷贝到 C:\Windows\system32\ 下
npf.sys (x64版本) 拷贝到 C:\Windows\system32\drivers\ 下
wpcap.dll (x86版本) 拷贝到 C:\Windows\SysWOW64\ 下
packet.dll (x86版本) 拷贝到 C:\Windows\SysWOW64\ 下 至于怎么拿到wpcap.dll、packet.dll 和 npf.sys 的x86位和x64位,其实很简单,下载一个如WinPcap_4_1_3.exe安装在64位机器上就能拿到64位的wpcap.dll、packet.dll 和 npf.sys,再把WinPcap_4_1_3.exe安装到32位的电脑上就可以拿到32位的wpcap.dll、packet.dll 和 npf.sys了。
暂无评论内容