c++ - 如何检索 Windows XP 中的所有事件日志?

标签 c++ c winapi event-log

我们知道,Windows 事件日志在 Vista 以下(XP 及以下)和 Vista 及以上版本是不同的,请参见此处 Windows Event Logs .在 Vista 上,我能够理解有关如何检索所有事件日志的 API。

在 Windows XP 上,我可以运行这个 sample code .我们需要填写两件事:

#define PROVIDER_NAME           L"MyEventProvider"
#define RESOURCE_DLL            L"<path>\\Provider.dll"

但是问题在于从哪里获取提供程序名称及其资源 dll。

我能想到的一种方法是遍历注册表项下的所有子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\System HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security

从这些子项中,我们可以获得提供者名称及其 EventMessageFile(尽管我发现某些子项没有 EventMessageFile,而是有 ParameterMessageFile)。

这是唯一的方法吗?或者还有其他更好的方法吗?

最佳答案

如果您使用的是 WinAPI,那么据我所知,遍历注册表是唯一的方法。是的,有些提供商没有 EventMessageFile,这很正常。也许他们只是将没有任何消息的插入字符串放入事件日志中(我不能准确地说)。

但是,如果可以使用.Net,那还是不错的EventLog Class ,它为您提供了很多非常好的方法。

关于c++ - 如何检索 Windows XP 中的所有事件日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11638590/

相关文章:

c++ - 如何在 C++ 中比较两个数组并返回不匹配的值

php - 什么是编写此函数的更好方法。它获取一个远程文件并将其复制到本地,在 php 中

c++ - GradientFill API 未按应有的方式执行

c - 如何在二维字符数组中搜索相同的字段?(在线游戏中的五个)在 C 中

c++ - 是否有不搜索短文件名的 Windows FindFirstFile/FindNextFile API 的替代方法?

winapi - 使用 Win32 查看文件夹

c++ - 什么时候不能通过引用传递

c++ - boost::ublas 如何获得 int 矩阵的行列式?

c++ - 引用传递

c - 请解释一下输出