众所周知,Windows 事件日志在 Vista 以下(XP 及以下)和 Vista 及以上版本中有所不同,请参见此处Windows 事件日志。在 Vista 上,我能够理解有关如何检索所有事件日志的 API。
在 Windows XP 上,我可以运行这个示例代码。我们需要填写的有两点:
#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\安全
从这些子项中,我们可以获得提供者名称及其 EventMessageFile(尽管我发现某些子项没有 EventMessageFile,而是有ParameterMessageFile)。
这是唯一的方法吗?或者还有其他更好的方法吗?