diff --git a/sdk/xtdk/kefuncs.h b/sdk/xtdk/kefuncs.h index ef9f0838..a2a75f28 100644 --- a/sdk/xtdk/kefuncs.h +++ b/sdk/xtdk/kefuncs.h @@ -27,6 +27,12 @@ KeInitializeApc(IN PKAPC Apc, IN KPROCESSOR_MODE ApcMode, IN PVOID Context); +XTAPI +VOID +KeInitializeDpc(IN PKDPC Dpc, + IN PKDEFERRED_ROUTINE DpcRoutine, + IN PVOID DpcContext); + XTAPI VOID KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, @@ -37,6 +43,12 @@ XTAPI VOID KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock); +XTAPI +VOID +KeInitializeThreadedDpc(IN PKDPC Dpc, + IN PKDEFERRED_ROUTINE DpcRoutine, + IN PVOID DpcContext); + XTAPI VOID KeInitializeTimer(OUT PKTIMER Timer); diff --git a/xtoskrnl/ke/dpc.c b/xtoskrnl/ke/dpc.c index 4a7ff489..cd521a74 100644 --- a/xtoskrnl/ke/dpc.c +++ b/xtoskrnl/ke/dpc.c @@ -42,6 +42,39 @@ KeInitializeDpc(IN PKDPC Dpc, Dpc->DpcData = NULL; } +/** + * Initializes Deferred Procedure Call (DPC) object. + * + * @param Dpc + * Supplies a pointer to the DPC being initialized. + * + * @param DpcRoutine + * Supplies a pointer to the DPC routine being called on object removal. + * + * @param DpcContext + * Supplies a pointer to memory area containing context data for DPC routine. + * + * @return This routine does not return any value. + * + * @since NT 5.2 + */ +XTAPI +VOID +KeInitializeThreadedDpc(IN PKDPC Dpc, + IN PKDEFERRED_ROUTINE DpcRoutine, + IN PVOID DpcContext) +{ + /* Initialize threaded DPC */ + Dpc->Type = ThreadedDpcObject; + Dpc->Number = 0; + Dpc->Importance = MediumImportance; + + /* Initialize DPC routine and context data */ + Dpc->DeferredContext = DpcContext; + Dpc->DeferredRoutine = DpcRoutine; + Dpc->DpcData = NULL; +} + /** * Retires the expired DPC objects found in the DPC list. * diff --git a/xtoskrnl/xtoskrnl.spec b/xtoskrnl/xtoskrnl.spec index 7b1d60bd..a0d83a6d 100644 --- a/xtoskrnl/xtoskrnl.spec +++ b/xtoskrnl/xtoskrnl.spec @@ -8,8 +8,10 @@ @ cdecl HlIoPortOutLong(ptr long) @ cdecl HlIoPortOutShort(ptr long) @ stdcall KeInitializeApc(ptr ptr long ptr ptr ptr long ptr) +@ stdcall KeInitializeDpc(ptr ptr ptr) @ stdcall KeInitializeSemaphore(ptr long long) @ stdcall KeInitializeSpinLock(ptr) +@ stdcall KeInitializeThreadedDpc(ptr ptr ptr) @ stdcall KeInitializeTimer(ptr) @ stdcall KeInitializeTimerEx(ptr long) @ stdcall KeReadSemaphoreState(ptr)