问题标签 [formatmessage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
event-log - 如何在没有 EventMessageFile 的情况下读取 Windows 事件日志?
我有读取 Windows 事件日志的代码。它使用 OpenEventLog、ReadEventLog 并获取事件源和事件 ID。然后它在下面查找源
键,根据其中列出的内容加载适当的 DLL EventMessageFile
,最后用于FormatMessage
将事件字符串与消息 DLL 内容合并以获得最终的事件消息文本。这是推荐的方法,虽然有点痛苦,但效果很好。
直到...我去查找源并发现它没有一个EventMessageFile
,而是一个ProvideGuid
条目。这似乎是一种新方式(它们出现在 Vista 和 Windows 2008 上)。Uggh - 没有任何东西可以传递给 FormatMessage 来查找消息文本并合并到数据字符串中
:(
在注册表中搜索 guid 确实会导致对其他文件的引用(在 HTTP 源的情况下为 http.sys),但我永远无法获得完整的消息文本。我必须使用这些EvtOpenSession
API 吗?我希望不会,因为我已经EVENTLOGRECORD*
调用了 to ReadEventLog
,并且该软件需要在EvtOpenSession
不受支持的 Windows 2003 上运行(仅在 Vista 和 Windows 2008 上可用)。注意:Vista 上的某些源具有 ProviderGUID,而另一些具有 EventMessageFile,因此旧方法仍然可行。
因此,我所追求的是一种查看 ProviderGuid 并获取需要传递给 FormatMessage 以显示完整事件日志消息文本的 DLL 的方法。
感谢您的任何意见
c++ - Windows FormatMessage 的安全/灵活外观
我需要为一个项目使用FormatMessage(),但我不喜欢它可怕的界面。有谁知道一个外观可以整理它,同时仍然允许替换参数?
我刚刚阅读了FastFormat 介绍的第二部分,并且正在考虑为FormatMessage()编写一个扩展(或者询问FastFormat项目团队是否有一个在工作中),但我很想尽快得到一些东西,所以如果那里还有其他像样的东西,我可能会抓住它。
我想要的是能够编写代码,例如:
这将给出结果:
我构建的当前包装器具有接口:
这有两个问题:
- 它不是类型安全的,因为很容易传递任何类型 -
int
,std::string
,void*
-const char*
- 参数的数量很容易与表示错误的格式字符串所需的数量不匹配
鉴于FastFormat在类型安全方面的能力,我想知道是否有办法遵循其处理FormatMessage()的机制。
c - 为什么 FormatMessage() 找不到 WinINet 错误消息?
我正在运行它来测试FormatMessage:
但是,当它返回时lpMsgBuf
包含 NULL ......我期待像ERROR_INTERNET_DISCONNECTED这样的东西。
有什么看起来不对劲吗?谢谢。
windows - 事件 ID 与事件查看器中显示的内容不匹配
系统事件日志中包含以下详细信息的事件:
EVENTLOGRECORD 的 EventID 字段也有一个 1,因此它与我们在事件日志查看器中看到的相匹配。
到目前为止,一切都很好。
问题是,当您查看 advapi32.dll 时,这是该源从中获取消息的地方,您会看到:
事件日志查看器如何神奇地知道将这些额外的位添加到 ID 以找到正确的字符串?并非所有事件字符串都具有该高位,有些还设置了其他高位。
使用 1 调用 FormatMessage 失败。用 x01000001 调用它成功。但这不是事件日志记录包含的内容...... :(
我找不到任何文档来讨论这个问题(除了描述显示错误/严重性/设施/代码位的 ID 格式之外)。
visual-c++ - FormatMessage 在尝试读取 EventLog 时出现错误 317
我对此有几乎类似的问题。 FormatMessage 失败,错误代码 317
不同之处在于它被说成是由它引起的答案,"FORMAT_MESSAGE_FROM_SYSTEM"
但是当我将其删除时,它再次发生。
我试图从EventLog
Windows Server 2003 中读取。但是当我尝试使用FormatMessage
函数时,我得到了317
错误。
有趣的是,相同的代码适用于 Windows Server 2008。我该如何解决这个问题,或者我可以使用什么来代替FormatMessage
?
我的代码:
祝你有美好的一天。。
c++ - 纠正这个错误:GetLastError 0x13d
在此示例中,dwerror 为10045L
.但此代码返回 0x13d 值作为错误。如何获取格式消息?请查看。
c++ - Windows/C++:带有 GetExceptionCode() 的 FormatMessage() 忽略 FORMAT_MESSAGE_IGNORE_INSERTS
我想使用类似于以下的代码来报告被零除、访问冲突等。我的问题是,尽管设置了 flag FORMAT_MESSAGE_IGNORE_INSERTS
,但消息在插入位置被截断。
上面的代码"The instruction at 0x"
在调试输出中产生,这并不是很有帮助。
难道我做错了什么?
c++ - 为什么我需要在 FormatMessage 中强制转换 lpBuffer (LPTSTR) 参数?
在 Windows 的FormatMessage()函数中,参数:
正在努力。按照 Hart 的 Windows 系统编程书,我声明一个LPTSTR
指针用作lpBuffer
(例如LPTSTR errortext;
),然后调用该FormatMessage()
函数。
传入这个参数的正确方法是:(LPTSTR)&errorText
这工作正常。但我不明白为什么我需要写(LPTSTR)
。我知道这是类型转换,我读过它,但这对我来说没有意义,因为我没有更改变量类型或任何东西,我将它声明为 anLPTSTR
并且我将它的内存地址传递给函数,函数期望 anLPTSTR
并且我将它传递给了LPTSTR
,那么为什么我需要将(LPTSTR)
其作为lpBuffer
参数的一部分呢?
c++ - 为什么 FormatMessage 只为 ERROR_SYSTEM_PROCESS_TERMINATED 和 ERROR_UNHANDLED_EXCEPTION 系统错误创建部分消息?
我一直在使用 Windows API 中的 FormatMessage 函数从系统错误代码生成消息字符串。我注意到对于某些错误代码,似乎没有创建完整的消息。
以这个示例程序为例:
根据MSDN,我应该看到以下内容:
{致命系统错误}
%hs 系统进程意外终止,状态为 0x%08x (0x%08x 0x%08x)。系统已关闭。
但是,在示例程序中,我将看到:
{Fatal System Error}
%hs 系统进程意外终止,状态为 0x
我注意到这ERROR_UNHANDLED_EXCEPTION
也不会创建完整的消息(与 MSDN 上的列表相比)。两条预期消息都包含0x%08占位符,但消息在0x之后结束。
据我所见,其他错误消息似乎与 MSDN 上的列表相匹配(即问题似乎仅限于ERROR_UNHANDLED_EXCEPTION
and ERROR_SYSTEM_PROCESS_TERMINATED
)。
归功于 engf-010 - 如果您使用 Visual Studio 中的错误查找工具(工具 - 错误查找),您会得到相同的结果。错误代码为 574 和 591。
有谁知道为什么这些消息被裁剪?
反正有没有得到完整的信息?