【问题标题】:How to read Windows Event Message when EventLogProvider does not contain a message table当 EventLogProvider 不包含消息表时如何读取 Windows 事件消息
【发布时间】:2018-02-09 23:43:54
【问题描述】:

似乎并非所有 Windows 事件消息扩展字符串都在“EventMessageFile”注册表值中指定。例如,对于 Windows 2008 服务器上的“Microsoft-Windows-TerminalServices-RemoteConnectionManager”,EventMessageFile DLL %SystemRoot%\system32\termsrv.dll”不包含消息表:

这意味着 DLL 句柄设置为 termsrv.dll 的 FormatMessageW 不起作用 :( 我在哪里可以获得正确的消息字符串?

【问题讨论】:

  • 如果您使用正确的错误值和参数测试调用 FormatMessageW - 您可以查看它“工作” - 通过 LdrLoadAlternateResourceModuleEx 加载 \<lang>-<sublung>\termsrv.dll.mui 并从中获取字符串
  • 正确的论点是什么?我用过这个:``` data = win32api.FormatMessageW(win32con.FORMAT_MESSAGE_FROM_HMODULE, dllHandle, event.EventID, LANGID, event.StringInserts) ```

标签: c windows winapi dll


【解决方案1】:

MUI resource 的 Windows PE 文件将语言特定资源存储在扩展名为 .MUI 的外部 PE 文件中。在这种情况下,对于英语资源,该文件将是 %SystemRoot%\system32\en-us\termsrv.dll.mui

大多数 Windows API 在加载资源时会自动遵循 MUI 重定向...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多