Winapi 如何打开windows';特定于服务的事件日志
我们需要以编程方式读取特定于服务的事件日志“Microsoft Windows TerminalsServices LocalSessionManager/Operational”。以下代码Winapi 如何打开windows';特定于服务的事件日志,winapi,event-log,Winapi,Event Log,我们需要以编程方式读取特定于服务的事件日志“Microsoft Windows TerminalsServices LocalSessionManager/Operational”。以下代码 LPWSTR pwsLogName = L"Microsoft-Windows-TerminalServices-LocalSessionManager/Operational"; HANDLE hEventLog = OpenEventLog(nullptr, pwsLogName); 结果打开“应用程
LPWSTR pwsLogName = L"Microsoft-Windows-TerminalServices-LocalSessionManager/Operational";
HANDLE hEventLog = OpenEventLog(nullptr, pwsLogName);
结果打开“应用程序”日志而不是必需的
同时,命令行实用程序wevtutil可以成功地读取所需的日志:
wevtutil query-events Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
我们做错了什么?最后我们发现OpenEventLog()已经死了,我们需要使用Evt*函数(&company)最后我们发现OpenEventLog()已经死了,我们需要使用Evt*函数(&company)行为是经过设计的;见: Todo:首先检查注册表项是否存在,如果成功,则使用
openEventLog()
_stprintf_s(szKeyName, _T("System\\CurrentControlSet\\Services\\EventLog\\%s"),szLogName);
dwRet = RegOpenKey(HKEY_LOCAL_MACHINE, szKeyName, &hKey);
if (ERROR_SUCCESS == dwRet)
{
RegCloseKey(hKey);
// continue with openEventLog()
这种行为是故意的;见:
Todo:首先检查注册表项是否存在,如果成功,则使用openEventLog()
_stprintf_s(szKeyName, _T("System\\CurrentControlSet\\Services\\EventLog\\%s"),szLogName);
dwRet = RegOpenKey(HKEY_LOCAL_MACHINE, szKeyName, &hKey);
if (ERROR_SUCCESS == dwRet)
{
RegCloseKey(hKey);
// continue with openEventLog()
OpenEventLog
是传统的一部分。Vista引入了,在这里您可以找到此终端服务事件频道。您可以通过和(如XML)从该通道查询和呈现事件。使用EvtClose
关闭所有句柄OpenEventLog
是旧版的一部分。Vista引入了,在这里您可以找到此终端服务事件频道。您可以通过和(如XML)从该通道查询和呈现事件。使用EvtClose
关闭所有句柄。