/* GLOBALS *******************************************************************/ POBJECT_TYPE ExEventObjectType = NULL; GENERIC_MAPPING ExpEventMapping = { STANDARD_RIGHTS_READ | EVENT_QUERY_STATE, STANDARD_RIGHTS_WRITE | EVENT_MODIFY_STATE, STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE, EVENT_ALL_ACCESS }; static const INFORMATION_CLASS_INFO ExEventInfoClass[] = { /* EventBasicInformation */ ICI_SQ_SAME( sizeof(EVENT_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY), }; /* FUNCTIONS *****************************************************************/ BOOLEAN INIT_FUNCTION NTAPI ExpInitializeEventImplementation(VOID) { OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; UNICODE_STRING Name; NTSTATUS Status; DPRINT("Creating Event Object Type\n"); /* Create the Event Object Type */
LIST_ENTRY ExpWakeList; /* Timer Mapping */ static GENERIC_MAPPING ExpTimerMapping = { STANDARD_RIGHTS_READ | TIMER_QUERY_STATE, STANDARD_RIGHTS_WRITE | TIMER_MODIFY_STATE, STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE, TIMER_ALL_ACCESS }; /* Timer Information Classes */ static const INFORMATION_CLASS_INFO ExTimerInfoClass[] = { /* TimerBasicInformation */ ICI_SQ_SAME(sizeof(TIMER_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY), }; /* PRIVATE FUNCTIONS *********************************************************/ VOID NTAPI ExTimerRundown(VOID) { PETHREAD Thread = PsGetCurrentThread(); KIRQL OldIrql; PLIST_ENTRY CurrentEntry; PETIMER Timer; ULONG DerefsToDo; /* Lock the Thread's Active Timer List and loop it */
POBJECT_TYPE IoCompletionType; GENERAL_LOOKASIDE IoCompletionPacketLookaside; GENERIC_MAPPING IopCompletionMapping = { STANDARD_RIGHTS_READ | IO_COMPLETION_QUERY_STATE, STANDARD_RIGHTS_WRITE | IO_COMPLETION_MODIFY_STATE, STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE | IO_COMPLETION_QUERY_STATE, IO_COMPLETION_ALL_ACCESS }; static const INFORMATION_CLASS_INFO IoCompletionInfoClass[] = { /* IoCompletionBasicInformation */ ICI_SQ_SAME(sizeof(IO_COMPLETION_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY), }; /* PRIVATE FUNCTIONS *********************************************************/ NTSTATUS NTAPI IopUnloadSafeCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context) { NTSTATUS Status; PIO_UNLOAD_SAFE_COMPLETION_CONTEXT UnsafeContext = Context; /* Reference the device object */ ObReferenceObject(UnsafeContext->DeviceObject);
/* GLOBALS ******************************************************************/ POBJECT_TYPE ExSemaphoreObjectType; GENERIC_MAPPING ExSemaphoreMapping = { STANDARD_RIGHTS_READ | SEMAPHORE_QUERY_STATE, STANDARD_RIGHTS_WRITE | SEMAPHORE_MODIFY_STATE, STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE, SEMAPHORE_ALL_ACCESS }; static const INFORMATION_CLASS_INFO ExSemaphoreInfoClass[] = { /* SemaphoreBasicInformation */ ICI_SQ_SAME( sizeof(SEMAPHORE_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY), }; /* FUNCTIONS *****************************************************************/ BOOLEAN INIT_FUNCTION NTAPI ExpInitializeSemaphoreImplementation(VOID) { OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; UNICODE_STRING Name; NTSTATUS Status; DPRINT("Creating Semaphore Object Type\n"); /* Create the Event Pair Object Type */