2012-07-16 35 views
0

我想弄清楚如何使用Windows的事件追蹤......但我失敗了。
爲什麼此代碼會給我錯誤代碼ERROR_WMI_INSTANCE_NOT_FOUND爲什麼我的Windows事件跟蹤工作不正常?

#include <stdio.h> 
#include <tchar.h> 
#include <Windows.h> 
#include <Wmistr.h> 
#include <Evntrace.h> 
#include <evntcons.h> 

ULONG NTAPI EtpEtwBufferCallback(IN PEVENT_TRACE_LOGFILE Buffer) { return TRUE; } 
VOID NTAPI EtpEtwEventCallback(IN PEVENT_TRACE EventTrace) { } 

int _tmain() 
{ 
    LPCTSTR loggerName = KERNEL_LOGGER_NAME; 
    EVENT_TRACE_LOGFILE logFile = {0}; 
    logFile.LoggerName = const_cast<LPTSTR>(loggerName); 
    logFile.ProcessTraceMode = PROCESS_TRACE_MODE_REAL_TIME; 
    logFile.BufferCallback = EtpEtwBufferCallback; 
    logFile.EventCallback = EtpEtwEventCallback; 
    TRACEHANDLE hTrace = OpenTrace(&logFile); 
    ULONG result = ProcessTrace(&hTrace, 1, NULL, NULL); 
    // result is ERROR_WMI_INSTANCE_NOT_FOUND 
    _tprintf(_T("%u\n"), result); 
} 

回答

1

ProcessTrace docsERROR_WMI_INSTANCE_NOT_FOUND手段「從您要消耗實時的事件不運行或不啓用了實時跟蹤模式下的會議」。

您可以使用Windows Driver Kit中的tracelog來啓動NT Kernel Logger,但我沒有WDK,所以我沒有嘗試過。

This article解釋瞭如何自己啓動NT內核記錄器。

+0

tracelog究竟做了什麼?不管它做什麼,我的程序都應該能夠做到 - 程序監視器等程序不需要tracelog。 – Mehrdad 2012-07-17 01:08:05

+0

@Mehrdad我已經更新了我的答案。 – arx 2012-07-17 07:56:01

+0

在閱讀這篇文章之前,我其實已經想清楚了,但是是的,那會很有幫助;謝謝! – Mehrdad 2012-07-18 08:23:33

相關問題