使用 NDIS 驱动程序的自定义事件消息
Custom event messages with NDIS driver
我正在尝试定义一些自定义事件查看器事件。我一直在按照 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
一切正常,除了事件查看器显示的字符串。它似乎无法识别它们并在事件描述中显示“存在消息资源,但在 string/message table 中找不到消息”。
与 WDK 示例的唯一显着区别是使用 NDIS API 而不是通用 WDM API。
我也非常有信心该文本包含在驱动程序二进制文件中,因为当使用编辑器打开 .sys 文件时,我清楚地看到了我的字符串。
非常感谢有关此问题的任何建议。
嗯,一年半后我发现了问题。显然,如果前面有空格,事件查看器注册表字符串解析器无法正确提取第二个消息文件名。
因此,要修复它,只需删除空格即可。即,而不是:
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"
我正在尝试定义一些自定义事件查看器事件。我一直在按照 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
一切正常,除了事件查看器显示的字符串。它似乎无法识别它们并在事件描述中显示“存在消息资源,但在 string/message table 中找不到消息”。 与 WDK 示例的唯一显着区别是使用 NDIS API 而不是通用 WDM API。 我也非常有信心该文本包含在驱动程序二进制文件中,因为当使用编辑器打开 .sys 文件时,我清楚地看到了我的字符串。 非常感谢有关此问题的任何建议。
嗯,一年半后我发现了问题。显然,如果前面有空格,事件查看器注册表字符串解析器无法正确提取第二个消息文件名。
因此,要修复它,只需删除空格即可。即,而不是:
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"