C++ 如何在Windows XP上检索所有事件日志?

C++ 如何在Windows XP上检索所有事件日志?,c++,c,winapi,event-log,C++,C,Winapi,Event Log,正如我们所知,windows事件日志在低于Vista(XP及以下)和Vista及更高版本时有所不同,请参见此处。在Vista上,我能够理解有关如何检索所有事件日志的API 在WindowsXP上,我可以运行这个。我们需要填写两件事: #define PROVIDER_NAME L"MyEventProvider" #define RESOURCE_DLL L"<path>\\Provider.dll" #定义提供者名称L“MyEventPr

正如我们所知,windows事件日志在低于Vista(XP及以下)和Vista及更高版本时有所不同,请参见此处。在Vista上,我能够理解有关如何检索所有事件日志的API

在WindowsXP上,我可以运行这个。我们需要填写两件事:

#define PROVIDER_NAME           L"MyEventProvider"
#define RESOURCE_DLL            L"<path>\\Provider.dll"
#定义提供者名称L“MyEventProvider”
#定义资源\u DLL L“\\Provider.DLL”
但是,问题是从哪里获取提供程序名称及其资源dll

我可以想到的一种方法是遍历注册表项下的所有子项:HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\SYSTEM HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security

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


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

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


但是,如果你能使用.Net,那就有一个好的,它为你提供了一系列非常好的方法。

你能发布你找到的答案来获取提供商DLL吗?对不起@kowsikbabu,我从那时起就没有做过这方面的工作,我现在也不确定:-)