FormatMessage在尝试读取事件日志时获取错误317

问题描述:

我遇到过与此类似的问题。 FormatMessage Fails with error code 317FormatMessage在尝试读取事件日志时获取错误317

不同之处在于它被认为是由"FORMAT_MESSAGE_FROM_SYSTEM"引起的回答,但是当我将其删除时,它会再次发生。

我想在Windows Server 2003中从EventLog中读取。但是当我尝试使用FormatMessage函数时,我得到了317错误。

有趣的是,相同的代码适用于Windows Server 2008.我该如何解决这个问题,或者我可以使用什么来代替FormatMessage

我的代码:

FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | 
     FORMAT_MESSAGE_FROM_SYSTEM | 
     FORMAT_MESSAGE_ALLOCATE_BUFFER, 
     g_hResources, // handles DLL containing message table 
     MessageId, 
     0, // Default language 
     (LPWSTR) &pMessage, 
     0, 
     (va_list*)pArgs) 

你的好日子..

错误317 "The system cannot find message text for message number 0x%1 in the message file for %2."。这意味着MessageId不是系统已知的错误编号。

您正在合并FORMAT_MESSAGE_FROM_HMODULEFORMAT_MESSAGE_FROM_SYSTEM,这是没有意义的。你想从哪里得到消息?你想从g_hResources或从系统错误消息表中得到它吗?从评论,这听起来像你想从g_hResources得到它,在这种情况下,你应该删除FORMAT_MESSAGE_FROM_SYSTEM。如果仍然出现错误317,则表示您通过的消息号不存在于g_hResources中。

+1

明确使用“FORMAT_MESSAGE_FROM_HMODULE”和“FORMAT_MESSAGE_FROM_SYSTEM”[在MSDN库中记录](http://msdn.microsoft.com/en-us/library/windows/desktop/ms679351.aspx#format_message_from_system):in这种情况“如果在由_lpSource_指定的模块中未找到消息,则该函数搜索系统消息表”。 – 2011-12-18 18:08:14

+0

我站好了。但奇怪的是,你不知道消息将被发现在哪里。你应该知道。无论如何,事件日志中的消息通常不会来自系统。它们是事件特定的,来自事件的消息提供者。 – 2011-12-18 18:38:40