我们知道,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/