0環下面的相關定時器
阿新 • • 發佈:2018-06-22
parameter 觸發 ont contex int unicode void 就會 ini 0環通常來說有倆種:
IO定時器
IoInitializeTimer 初始化一個IO計時器
IoStartTimer 啟動IO計時器
IoStopTimer 停止IO計時器
IO定時器
IoInitializeTimer 初始化一個IO計時器
IoStartTimer 啟動IO計時器
IoStopTimer 停止IO計時器
#include <ntifs.h> KEVENT g_kEvent; VOID DriverUnload(PDRIVER_OBJECT pDriver); VOID TimerProc( DEVICE_OBJECT *DeviceObject, PVOID Context ) { UNREFERENCED_PARAMETER(DeviceObject); static ULONG i = 0; i++; KdPrint(("外部傳入的是%d ,內部變化:%d\n", Context, i)); } NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pPath) { UNREFERENCED_PARAMETER(pPath); DbgBreakPoint(); //初始化一些變量 PDEVICE_OBJECT pDevice = NULL; UNICODE_STRING strDeviceName; RtlInitUnicodeString(&strDeviceName, L"\\Device\\Hello"); //1 創建一個設備 IoCreateDevice( pDriver, //驅動對象指針 0, //設備擴展大小,傳0 &strDeviceName, //設備名稱 FILE_DEVICE_UNKNOWN,//設備類型 0, //設備特征 FALSE, //設備是否獨占 &pDevice //傳出創建好的設備指針 ); // 初始化一個IO計時器 IoInitializeTimer( pDevice, TimerProc, (PVOID)100 ); //啟動IO計時器 IoStartTimer(pDevice); pDriver->DriverUnload = DriverUnload; return STATUS_SUCCESS; } VOID DriverUnload(PDRIVER_OBJECT pDriver) { UNREFERENCED_PARAMETER(pDriver); //停止IO計時器 IoStopTimer(pDriver->DeviceObject); IoDeleteDevice(pDriver->DeviceObject); }
DPC定時器
KelnitializeTimer 初始化一個定時器對象
KelnitializeDpc 初始化一個DPC對象
KeSetTimer 啟動定時器
需要初始化一個定時器對象和一個DPC對象,之後在啟動定時器處設置一個時間間隔(註意正負數)時間到了就會調用與DPC關聯的回調函數。
註意:
KeSetTimer 只會觸發一次調用。想要再次觸發,需要在DPC觸發後。再調用KeSetTimer
0環下面的相關定時器