WFP 标注和 NDIS LWF 不能位于同一个驱动程序二进制文件中
WFP callout and NDIS LWF can't sit inside the same driver binary
我正在开发 WinPcap,一个 NDIS 轻型过滤器 驱动程序。为了捕获环回数据包,我还制作了一个 Windows Filtering Platform (WFP) callout 驱动程序。我已将这两个部分集成到 one driver binary 中。但是新的驱动程序不能运行当系统重新启动时d。
目前,我只是放弃了WFP callout INF文件,只使用了NDIS filter INF来安装这个集成驱动(我不知道如何使用两个INF一个驱动程序二进制文件),它可以毫无问题地安装并且工作正常(我的意思是我可以通过 WFP 捕获环回数据包)。但是当系统重新启动时,驱动程序不会被加载,当我运行 "net start npf"(npf是驱动程序服务名称)时,它说:
C:\Windows\system32>net start npf
System error 2 has occurred.
The system cannot find the file specified.
然后我在我的驱动程序中注释了所有 WFP 代码和 lib 导入(fwpkclnt.lib 和 uuid.lib),驱动程序 运行 在重新启动后很好。所以 WFP 标注 INF 丢失的东西应该是原因。但是我不知道如何为这个新驱动程序编写 INF 文件。
1) 如何安装这个混合了 NDIS 过滤器和 WFP 标注的驱动程序?我知道 NDIS 过滤器使用 INetCfg API 来安装,并且可以通过右键单击 inf 文件并选择 "install" 来安装 WFP 标注(我不知道它的编程方式)。这两种方法好像不一样。
2) 如何编写INF文件,尤其是Device Setup Class? NDIS 过滤器的 class 是 NetService,但 WFP 标注是 WFPCALLOUTS。我可以在一个 INF 文件中指定两个 class 吗?或者我应该提供两个 INF 文件?如果我没有提供正确的 INF 文件怎么办?就像我只提供带有 NetService class 的 INF 文件一样,WFP 标注部分会起作用吗?
我的 NDIS 过滤器 INF 文件如下:
[version]
Signature = "$Windows NT$"
Class = NetService
ClassGUID = {4D36E974-E325-11CE-BFC1-08002BE10318}
CatalogFile = npcap.cat
Provider = %Insecure%
DriverVer=05/15/2015,14.48.38.905
世界粮食计划署的标注如下:
[Version]
Signature = "$WINDOWS NT$"
Class = WFPCALLOUTS
ClassGuid = {57465043-616C-6C6F-7574-5F636C617373}
Provider = %LBTest%
CatalogFile = LBTest.cat
Thanks!
我已经解决了这个问题。答案是:
提供两个 INF,一个用于 LWF,一个用于 WFP 标注。
两次安装相同的二进制文件:先使用WFP callout方式安装二进制文件,然后使用LWF方式安装二进制文件。卸载应该是反的
代码已经运行,请看这里:https://github.com/nmap/npcap
我正在开发 WinPcap,一个 NDIS 轻型过滤器 驱动程序。为了捕获环回数据包,我还制作了一个 Windows Filtering Platform (WFP) callout 驱动程序。我已将这两个部分集成到 one driver binary 中。但是新的驱动程序不能运行当系统重新启动时d。
目前,我只是放弃了WFP callout INF文件,只使用了NDIS filter INF来安装这个集成驱动(我不知道如何使用两个INF一个驱动程序二进制文件),它可以毫无问题地安装并且工作正常(我的意思是我可以通过 WFP 捕获环回数据包)。但是当系统重新启动时,驱动程序不会被加载,当我运行 "net start npf"(npf是驱动程序服务名称)时,它说:
C:\Windows\system32>net start npf
System error 2 has occurred.
The system cannot find the file specified.
然后我在我的驱动程序中注释了所有 WFP 代码和 lib 导入(fwpkclnt.lib 和 uuid.lib),驱动程序 运行 在重新启动后很好。所以 WFP 标注 INF 丢失的东西应该是原因。但是我不知道如何为这个新驱动程序编写 INF 文件。
1) 如何安装这个混合了 NDIS 过滤器和 WFP 标注的驱动程序?我知道 NDIS 过滤器使用 INetCfg API 来安装,并且可以通过右键单击 inf 文件并选择 "install" 来安装 WFP 标注(我不知道它的编程方式)。这两种方法好像不一样。
2) 如何编写INF文件,尤其是Device Setup Class? NDIS 过滤器的 class 是 NetService,但 WFP 标注是 WFPCALLOUTS。我可以在一个 INF 文件中指定两个 class 吗?或者我应该提供两个 INF 文件?如果我没有提供正确的 INF 文件怎么办?就像我只提供带有 NetService class 的 INF 文件一样,WFP 标注部分会起作用吗?
我的 NDIS 过滤器 INF 文件如下:
[version]
Signature = "$Windows NT$"
Class = NetService
ClassGUID = {4D36E974-E325-11CE-BFC1-08002BE10318}
CatalogFile = npcap.cat
Provider = %Insecure%
DriverVer=05/15/2015,14.48.38.905
世界粮食计划署的标注如下:
[Version]
Signature = "$WINDOWS NT$"
Class = WFPCALLOUTS
ClassGuid = {57465043-616C-6C6F-7574-5F636C617373}
Provider = %LBTest%
CatalogFile = LBTest.cat
Thanks!
我已经解决了这个问题。答案是:
提供两个 INF,一个用于 LWF,一个用于 WFP 标注。
两次安装相同的二进制文件:先使用WFP callout方式安装二进制文件,然后使用LWF方式安装二进制文件。卸载应该是反的
代码已经运行,请看这里:https://github.com/nmap/npcap