初始化
KTIMER my_timer;
KDPC KiTimerExpireDpc;
KTIMER:
typedef struct _KTIMER {
DISPATCHER_HEADER Header;
ULARGE_INTEGER DueTime;
LIST_ENTRY TimerListEntry;
struct _KDPC *Dpc;
#if !defined(KENCODED_TIMER_PROCESSOR)
ULONG Processor;
#endif
ULONG Period;
} KTIMER, *PKTIMER, *PRKTIMER;
KDPC:
typedef struct _KDPC {
union {
ULONG TargetInfoAsUlong;
struct {
UCHAR Type;
UCHAR Importance;
volatile USHORT Number;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
SINGLE_LIST_ENTRY DpcListEntry;
KAFFINITY ProcessorHistory;
PKDEFERRED_ROUTINE DeferredRoutine;
PVOID DeferredContext;
PVOID SystemArgument1;
PVOID SystemArgument2;
__volatile PVOID DpcData;
} KDPC, *PKDPC, *PRKDPC;
创建 dpc 定时器
LARGE_INTEGER duetime = { 0 };
KeInitializeTimerEx(
&my_timer, // 指向 KTIMER 的指针
NotificationTimer // 定时器类型(NotificationTimer:通知类,SynchronizationTimer:同步类)
);
KeInitializeDpc(
&KiTimerExpireDpc, // 指向 KDPC 结构的指针
(PKDEFERRED_ROUTINE)display_KdEnteredDebugger, // 指向 dpc 定时器关联函数
NULL // 函数参数
);
KeSetTimerEx(
&my_timer, // 指向 KTIMER 结构的指针
duetime, // 定时器的过期时间
10000, // 触发周期
&KiTimerExpireDpc // 指向 KDPC 结构的指针
);
删除 dpc 定时器
KeCancelTimer(&my_timer);