1

我已经为我自己的应用程序向 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"”。

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

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

4

1 回答 1

0

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

于 2012-11-01T19:21:13.040 回答