1

众所周知,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)。

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

4

1 回答 1

2

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

但是,如果您可以使用 .Net,那么就有一个很好的EventLog 类,它为您提供了一堆非常好的方法。

于 2012-07-25T11:04:29.633 回答