2017-08-31 88 views
0

似乎並非所有Windows事件消息擴展字符串都在「EventMessageFile」註冊表值中指定。例如,對於Windows 2008的服務器上的 「微軟Windows的TerminalServices-RemoteConnectionManager」,在EventMessageFile DLL的%SystemRoot%\ SYSTEM32 \的termsrv.dll」不包含消息表:如何在EventLogProvider不包含消息表時讀取Windows事件消息

missing message table

這意味着,將DLL句柄設置爲termsrv.dll的FormatMessageW不起作用:(我在哪裏可以獲得正確的消息字符串?

+0

如果你測試呼叫'FormatMessageW'用正確的錯誤值和參數 - 你可以查看它的「工作」 - 負載'\ - \ termsrv.dll.mui'通過'LdrLoadAlternateResourceModuleEx'並從中獲得字符串 – RbMm

+0

什麼是正確的參數?我用這個: ''' 數據= win32api.FormatMessageW(win32con.FORMAT_MESSAGE_FROM_HMODULE, dllHandle,event.EventID,LANGID,event.StringInserts) ''' – Konrads

回答

3

具有MUI resource的Windows PE文件將特定於語言的資源存儲在擴展名爲.MUI的外部PE文件中。在這種情況下,英文資源文件將爲%SystemRoot%\system32\en-us\termsrv.dll.mui

大多數Windows API的加載資源時自動跟隨MUI重定向...