【问题标题】:WFP kernel-mode driver's DriverEntry getting called differently on some machines?WFP 内核模式驱动程序的 DriverEntry 在某些机器上的调用方式不同?
【发布时间】:2012-10-18 14:36:32
【问题描述】:

我已经为我自己的应用程序向 Windows 过滤平台 MSNMNTR 示例添加了一些代码,但它仍然具有相同的结构。我已经为 Win8 64 位编译了驱动程序和应用程序,并对驱动程序进行了生产签名。在我构建代码的(虚拟)机器上,该示例工作正常并且可以正确监控。当我将 inf、sys 和 exe 复制到另一台机器时,示例不会监控。通过 traceview 输出,我可以看到在第二台机器上,没有调用 DriverEntry(),因此从未设置过流控制。两台机器都运行的是Win8的发布版。这似乎不是我的新代码的问题,因为驱动程序在 #1 机器上运行良好,而且它似乎不是签名问题,因为当我关闭机器 #2 上的签名强制时,我仍然有问题。代码的发布版本和调试版本都有相同的问题。我用来设置和运行代码的步骤如下。有哪些事情可能会导致这种行为?

  1. 将驱动程序 .pdbs 复制到 traceview 的文件夹中。
  2. 右键单击 .inf 并选择“安装”
  3. 从提升的命令提示符运行“net start msnmntr”。
  4. 以管理员身份启动 traceview。
  5. 从提升的命令提示符运行“monitor monitor "C:\Program Files\Internet Explorer\iexplore.exe"”。

附:我还没有把windbg放在这上面,但我会在我尝试后立即用结果更新问题。

编辑添加: 好的,我在两台机器上运行了内核模式调试器,发现行为有所不同。首先,两台机器都调用了 DriverEntry。我错了。但是,在代码工作的机器上(即监控网络流量),DriverEntry 会在 monitor.exe 运行时被调用(上面的第 5 步),而在代码工作的机器上 DriverEntry 会被调用当执行“net start msnmntr”(上面的第 3 步)时。

【问题讨论】:

    标签: windows driver wfp windows-kernel


    【解决方案1】:

    问题是我没有在第二台机器上通过“monitor addcallouts”安装标注。由于这是一次性步骤,我忘记了我几周前在原始机器上做过。

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 2015-11-19
      • 2016-06-10
      • 1970-01-01
      相关资源
      最近更新 更多