/* FUNCTIONS ****************************************************************/
+/*
+ * @implemented
+ */
VOID STDCALL
KeInitializeDpc (PKDPC Dpc,
PKDEFERRED_ROUTINE DeferredRoutine,
#ifndef LIBCAPTIVE
+/*
+ * @implemented
+ */
VOID STDCALL
KiDispatchInterrupt(VOID)
/*
KeRaiseIrql(HIGH_LEVEL, &oldlvl);
KeAcquireSpinLockAtDpcLevel(&DpcQueueLock);
- current_entry = RemoveHeadList(&DpcQueueHead);
- if (current_entry != &DpcQueueHead)
- {
- DpcQueueSize--;
- }
- KeReleaseSpinLockFromDpcLevel(&DpcQueueLock);
- current = CONTAINING_RECORD(current_entry,KDPC,DpcListEntry);
- current->Lock=FALSE;
- KeLowerIrql(oldlvl);
- while (current_entry!=(&DpcQueueHead))
- {
- current->DeferredRoutine(current,current->DeferredContext,
- current->SystemArgument1,
- current->SystemArgument2);
-
- KeRaiseIrql(HIGH_LEVEL, &oldlvl);
- KeAcquireSpinLockAtDpcLevel(&DpcQueueLock);
- current_entry = RemoveHeadList(&DpcQueueHead);
- if (current_entry != &DpcQueueHead)
- {
- DpcQueueSize--;
- }
- KeReleaseSpinLockFromDpcLevel(&DpcQueueLock);
- current = CONTAINING_RECORD(current_entry,KDPC,DpcListEntry);
- current->Lock=FALSE;
- KeLowerIrql(oldlvl);
- }
+
+ while (!IsListEmpty(&DpcQueueHead))
+ {
+ current_entry = RemoveHeadList(&DpcQueueHead);
+ DpcQueueSize--;
+ current = CONTAINING_RECORD(current_entry,KDPC,DpcListEntry);
+ current->Lock=FALSE;
+ KeReleaseSpinLock(&DpcQueueLock, oldlvl);
+ current->DeferredRoutine(current,current->DeferredContext,
+ current->SystemArgument1,
+ current->SystemArgument2);
+
+ KeRaiseIrql(HIGH_LEVEL, &oldlvl);
+ KeAcquireSpinLockAtDpcLevel(&DpcQueueLock);
+ }
+ KeReleaseSpinLock(&DpcQueueLock, oldlvl);
}
#endif /* LIBCAPTIVE */
+/*
+ * @implemented
+ */
BOOLEAN STDCALL
KeRemoveQueueDpc (PKDPC Dpc)
/*
{
KIRQL oldIrql;
- KeAcquireSpinLockAtDpcLevel(&DpcQueueLock);
KeRaiseIrql(HIGH_LEVEL, &oldIrql);
+ KeAcquireSpinLockAtDpcLevel(&DpcQueueLock);
if (!Dpc->Lock)
{
KeReleaseSpinLock(&DpcQueueLock, oldIrql);
#ifndef LIBCAPTIVE
+/*
+ * @implemented
+ */
BOOLEAN STDCALL
KeInsertQueueDpc (PKDPC Dpc,
PVOID SystemArgument1,
* Dpc = Initalizes DPC
* Importance = DPC importance
* RETURNS: None
+ *
+ * @implemented
*/
VOID STDCALL
KeSetImportanceDpc (IN PKDPC Dpc,
* Dpc = Initalizes DPC
* Number = Processor number
* RETURNS: None
+ *
+ * @unimplemented
*/
VOID STDCALL
KeSetTargetProcessorDpc (IN PKDPC Dpc,