1998-08-25 04:27:26 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS kernel
|
|
|
|
* FILE: ntoskrnl/ke/apc.c
|
|
|
|
* PURPOSE: Possible implementation of APCs
|
|
|
|
* PROGRAMMER: David Welch (welch@mcmail.com)
|
|
|
|
* UPDATE HISTORY:
|
|
|
|
* Created 22/05/98
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* INCLUDES *****************************************************************/
|
|
|
|
|
|
|
|
#include <internal/kernel.h>
|
|
|
|
#include <internal/linkage.h>
|
|
|
|
#include <ddk/ntddk.h>
|
1998-08-28 23:24:42 +00:00
|
|
|
#include <internal/string.h>
|
1998-08-25 04:27:26 +00:00
|
|
|
|
|
|
|
#include <internal/debug.h>
|
|
|
|
|
|
|
|
/* FUNCTIONS *****************************************************************/
|
|
|
|
|
1998-08-28 23:24:42 +00:00
|
|
|
VOID KeDrainApcQueue(VOID)
|
|
|
|
{
|
|
|
|
PLIST_ENTRY current_entry;
|
|
|
|
PKAPC current;
|
|
|
|
|
|
|
|
current_entry = KeGetCurrentThread()->ApcQueueHead.Flink;
|
|
|
|
while (current_entry!=NULL)
|
|
|
|
{
|
|
|
|
current = CONTAINING_RECORD(current_entry,KAPC,ApcListEntry);
|
|
|
|
current->NormalRoutine(current->NormalContext,
|
|
|
|
current->SystemArgument1,
|
|
|
|
current->SystemArgument2);
|
|
|
|
current_entry = current_entry->Flink;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
VOID KeInitializeApc(PKAPC Apc, PKNORMAL_ROUTINE NormalRoutine,
|
|
|
|
PVOID NormalContext,
|
|
|
|
PKTHREAD TargetThread)
|
|
|
|
{
|
|
|
|
memset(Apc,0,sizeof(KAPC));
|
|
|
|
Apc->Thread = TargetThread;
|
|
|
|
Apc->NormalRoutine=NormalRoutine;
|
|
|
|
Apc->NormalContext=NormalContext;
|
|
|
|
Apc->Inserted=FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOLEAN KeInsertQueueApc(PKAPC Apc)
|
|
|
|
{
|
|
|
|
if (Apc->Inserted)
|
|
|
|
{
|
|
|
|
return(FALSE);
|
|
|
|
}
|
|
|
|
Apc->Inserted=TRUE;
|
|
|
|
InsertTailList(&Apc->Thread->ApcQueueHead,&Apc->ApcListEntry);
|
|
|
|
return(TRUE);
|
|
|
|
}
|
|
|
|
|