c - WFP 标注和 NDIS LWF 不能位于同一驱动程序二进制文件中

标签 c windows driver ndis

我正在开发 WinPcap,一个 NDIS 轻量级过滤器 驱动程序。为了捕获环回数据包,我还制作了一个Windows Filtering Platform (WFP) callout驱动程序。我已将这两个部分集成到一个驱动程序二进制文件中。但新驱动系统重启后无法运行

目前,我刚刚放弃了 WFP callout INF 文件,仅使用 NDIS 过滤器 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 代码和库导入(fwpkclnt.lib 和 uuid.lib),驱动程序在重新启动后运行良好。因此,WFP 标注 INF 缺失的内容应该是原因。但我不知道如何为这个新驱动程序编写INF文件

1) 如何安装与 NDIS 过滤器和 WFP 标注混合的驱动程序?我知道 NDIS 过滤器使用 INetCfg API 进行安装,并且可以通过右键单击 inf 文件并选择“安装”来安装 WFP 标注(我不知道其编程方式)。这两种方法好像是不一样的。

2)如何编写INF文件,特别是Device Setup Class? NDIS 过滤器的类是 NetService,但 WFP 标注的类是 WFPCALLOUTS。我可以在一个 INF 文件中指定两个类吗?或者我应该提供两个INF文件?如果我没有提供正确的 INF 文件怎么办?就像我只提供带有 NetService 类的 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!

最佳答案

这个问题我已经解决了。答案是:

  1. 提供两个 INF,一个用于 LWF,一个用于 WFP 标注。

  2. 安装相同的二进制文件两次:首先使用 WFP callout 方式安装二进制文件,然后使用 LWF 方式安装二进制文件。应逆向卸载。

代码已经可以运行,请参见此处:https://github.com/nmap/npcap

关于c - WFP 标注和 NDIS LWF 不能位于同一驱动程序二进制文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31363985/

相关文章:

c - 动态添加条目到 sysctl

c++ - 如果我输入错误的 dos 命令,shellexecute 会给出正确的结果

java - 从 bat 脚本运行的 Java 应用程序上的 Windows 关闭 Hook

windows - 如何解读 Windows 任务管理器?

c++ - 窗口 : load a filter driver while windows is running

c - 错误 1 ​​错误 C2148 : total size of array must not exceed 0x7fffffff bytes I get this Error in C

在 C 中比较字符串并打印存储的字符串

c - 是否可以让 bash 检测 C 中的编译错误?

Java-Paradox 驱动程序 - 可以选择但不能修改

c - 我是否需要互斥锁来保护可以通过 sysfs 获取/设置的 int 值?