使用NDIS驱动程序的自定义事件消息

时间:2016-08-05 13:51:18

标签: windows visual-c++ visual-studio-2015 driver ndis

我试图定义一些自定义事件查看器事件。我一直在按照MSDN和其他一些在线资源中的说明进行操作,但事件查看器无法找到相关的文本数据。

这就是我所做的:

  • 使用事件代码和相关字符串为消息编译器创建输入文件(遵循WDK串行驱动程序示例)。
  • 包含消息编译器在主驱动程序资源文件(MyDriver.rc)中生成的.rc文件。
  • 包含消息编译器在相关驱动程序模块中生成的头文件。
  • 使用NdisWriteErrorLogEntry API从包含的头文件中使用新ID编写事件。
  • 将驱动程序二进制文件添加到标识事件源的Inf注册表字符串:
HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll; %%SystemRoot%%\System32\drivers\MyDriver.sys"
HKR, , TypesSupported,   0x00010001, 7

除了事件查看器显示的字符串外,一切正常。它似乎无法识别它们并显示" 消息资源存在但消息未在字符串/消息表中找到"在事件描述中。 与WDK示例的唯一显着区别是使用NDIS API而不是通用WDM API。 我也非常确信文本包含在驱动程序二进制文件中,因为当用编辑器打开.sys文件时,我清楚地看到了我的字符串。 非常感谢有关这个问题的任何建议。

1 个答案:

答案 0 :(得分:0)

好吧,经过一年半的时间我发现了问题。显然,如果前面有空格,则事件查看器注册表字符串解析器无法正确提取第二个消息文件名。

因此,为了解决它,所有需要的是移除空格。即,而不是:

HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll; %%SystemRoot%%\System32\drivers\MyDriver.sys"

将其写入inf文件:

HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll;%%SystemRoot%%\System32\drivers\MyDriver.sys"