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_HMODULE
和FORMAT_MESSAGE_FROM_SYSTEM
,这是没有意义的。你想从哪里得到消息?你想从g_hResources
或从系统错误消息表中得到它吗?从评论,这听起来像你想从g_hResources
得到它,在这种情况下,你应该删除FORMAT_MESSAGE_FROM_SYSTEM
。如果仍然出现错误317,则表示您通过的消息号不存在于g_hResources
中。
明确使用“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
我站好了。但奇怪的是,你不知道消息将被发现在哪里。你应该知道。无论如何,事件日志中的消息通常不会来自系统。它们是事件特定的,来自事件的消息提供者。 – 2011-12-18 18:38:40