我有一个小代码,它解析系统的事件查看器以查找所需的数据。现在这个代码在.exe创建时工作正常但在.dll中没有。 我如何收听我在dll中订阅的事件。
有没有更好的方法在.dll中实现EvtSubscribe()和SubscriptionCallback()?
这是因为我跳过了DllMain()函数吗?
主要()
DWORD status = ERROR_SUCCESS;
EVT_HANDLE hSubscription = NULL;
hSubscription = EvtSubscribe(NULL, NULL, pwsPath, pwsQuery, NULL, NULL,
(EVT_SUBSCRIBE_CALLBACK)SubscriptionCallback, EvtSubscribeStartAtOldestRecord);
if (NULL == hSubscription)
{
//some code
return;
}
回调 在.exe构建但不在.dll
时调用// The callback that receives the events that match the query criteria.
DWORD WINAPI SubscriptionCallback(EVT_SUBSCRIBE_NOTIFY_ACTION action, PVOID pContext, EVT_HANDLE hEvent)
{
DWORD status = ERROR_SUCCESS;
switch (action)
{
//some code
case EvtSubscribeActionDeliver:
if (ERROR_SUCCESS != (status = PrintEvent(hEvent)))
{
goto cleanup;
}
break;
}
cleanup:
return status; // The service ignores the returned status.
}
DWORD PrintEvent(EVT_HANDLE hEvent)
{
// print
}
答案 0 :(得分:0)
我认为您需要仔细检查调用EvtClose。如果您调用此方法,则不会调用订阅回调。
与DllMain无关。