天天看點

驅動程式中使用event view記錄日志

    Eventdrv是MS ddk中的一個demo,示範如何在驅動中使用event view日志。本文譯自src/general/tracing/evntdrv/evntdrv.htm

概述

Event是核心态驅動運作日志樣例.該驅動并不控制任何實體硬體,僅生成日志事件.它用于示範如何在驅動中使用ETW日志.Eventdrv通過調用EtwRegister API來注冊事件産生者.如果驅動加載成功,它将記錄一個包含裝置名,裝置名長度,狀态碼的StartEvent事件.每當驅動接收到上層調用的DeviceIoControl,它都将記錄一個SampleEventA事件.如果驅動被解除安裝,它會記錄包含裝置對象的UnloadEvent事件.注意:WPP跟蹤工具,如TraceView.exe并不能啟停和觀察日志.

使用樣例

按照以下步驟測試Eventdrv:

1.用-cgZ參數編譯Eventdrv

2.通過以下指令安裝位于evntdrv\Eventdrv目錄下的manifest檔案

wevtutil im evntdrv.xml

安裝manifest檔案後将會在系統資料庫中建立一個鍵(建立的鍵通常位于HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\System\下譯者注),這個鍵包含了事件産生者的相關資訊,這使得一些工具能夠找到相關的資源和消息檔案(消息檔案是指:manifest定義的事件通過wenvutil生成供C語言使用的事件頭檔案,譯者注)

3.用-cZg參數編譯evntctrl程式(位于evntdrv\evntctrl).Evntctrl向Eventdrv發送IOCTL,當Eventdrv收到IOCTL後将産生日志

4.在系統根目錄下建立ETWDriverSample目錄,并将Eventdrv.sys/evntctrl.exe拷貝到此.同時從(wdk目錄)tools\tracing目錄拷貝tracelog.exe到此.因為manifest檔案evntdrv.xml指定了資源檔案的路徑為%systemroot%\ETWDriverSample.如果沒有建立這個目錄或者沒有将Evntdrv.sys等檔案拷貝于此,解碼工具由于找不到事件資訊而不能解碼日志檔案

5.用Tracelog開啟名為"TestEventdrv"的日志跟蹤會話.以下指令會開始日志跟蹤會話并在ETWDriverSample目錄中建立日志檔案:Eventdrv.etl

Tracelog -start TestEventdrv -guid #b5a0bda9-50fe-4d0e-a83d-bae3f58c94d6 -f Eventdrv.etl      

6.運作Eventctrl.exe産生跟蹤消息.這是在步驟3中生成的可執行程式.每次你按下除Q或q以外的鍵,Eventctrl都會向驅動發送IOCTL,這會促使驅動産生跟蹤消息.按Q或q鍵來停止Eventctrl

7.以下指令會停止日志跟蹤會話:

tracelog -stop TestEventdrv      

8.用tracerpt顯示tracedrv.etl中的日志:

tracerpt Eventdrv.etl      

這個指令會生成2個檔案:summary.txt和dumpfile.xml.dumpfile.xml會以xml格式顯示事件資訊

9.解除安裝manifest:

wevtutil um evntdrv.xml