前言
测试NDIS驱动时,可以用 手动处理
的方法,但是在打包发布的时候,还得用 程序处理
的方法。
代码框架使用WDK源码中 src -> network -> config -> bindview
工程作为基础。
准备工作
这里我们主要使用 NetCfgAPI.h
和 NetCfgAPI.cpp
两个文件,另外还需要我们从WDK源码中
复制 netcfgn.h
netcfgn.idl
netcfgx.h
netcfgx.idl
这4个文件到工程目录中,并修改NetCfgAPI.h
文件中包含的头文件为当前工程目录,即:
1 |
另外我们还需要在工程中配置包含库文件,或者在代码中声明包含库文件
1 |
关闭XP签名验证
在XP中的 硬件签名检测
的配置信息,在注册表中的位置为
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Driver Signing Policy BIN 0 |
使用代码关闭 硬件签名检测
需要用到的头文件和结构体为
1 |
|
从注册表中读取到 硬件签名检测
配置信息
1 | BOOL DriverSigningGet(OUT DRIVER_SIGNING &Info) |
修改配置信息之前,需要先计算对应配置信息的HASH值
1 | BOOL DriverSigningHash(IN OUT DRIVER_SIGNING &Info) |
计算完HASH值之后,就可以写入新的配置信息
1 | BOOL DriverSigningSet(IN DRIVER_SIGNING &Info) |
安装网络组件
读取 inf
配置信息的函数如下:
1 | CStringW InfGetKeyValue(IN HINF hInf, IN PCWSTR pSection, IN PCWSTR pKey, IN DWORD dwIndex) |
读取 设备实例ID
的函数如下:
1 | CStringW InfGetPnpID(IN CStringW csInfPath) |
由于XP下安装 NDIS5
驱动需要2个inf文件,所以我们需要主动复制第2个文件的信息
1 | BOOL InstallNetService(IN CStringW csInfPath, IN CStringW csInf2Path) |
卸载时只需要第1个文件的信息
1 | BOOL UninstallNetService(IN CStringW csInfPath) |