Test commit. Not official branch release -- it will follow shortly in 15 minutes. If this ends up in HEAD i will revert immediately (i have svn switched so it shouldn't)
Modified: trunk/reactos/config
Modified: trunk/reactos/drivers/storage/floppy/floppy.c
Modified: trunk/reactos/include/ddk/extypes.h
Modified: trunk/reactos/include/ddk/iotypes.h
Modified: trunk/reactos/include/ddk/ketypes.h
Modified: trunk/reactos/include/ntos/zwtypes.h
Modified: trunk/reactos/lib/ntdll/def/ntdll.def
Modified: trunk/reactos/ntoskrnl/Makefile
Modified: trunk/reactos/ntoskrnl/cm/registry.c
Added: trunk/reactos/ntoskrnl/ex/error.c
Modified: trunk/reactos/ntoskrnl/ex/event.c
Modified: trunk/reactos/ntoskrnl/ex/evtpair.c
Modified: trunk/reactos/ntoskrnl/ex/init.c
Modified: trunk/reactos/ntoskrnl/ex/mutant.c
Modified: trunk/reactos/ntoskrnl/ex/rundown.c
Modified: trunk/reactos/ntoskrnl/ex/sem.c
Modified: trunk/reactos/ntoskrnl/ex/sysinfo.c
Modified: trunk/reactos/ntoskrnl/ex/timer.c
Modified: trunk/reactos/ntoskrnl/ex/work.c
Modified: trunk/reactos/ntoskrnl/include/internal/ex.h
Modified: trunk/reactos/ntoskrnl/include/internal/id.h
Modified: trunk/reactos/ntoskrnl/include/internal/io.h
Modified: trunk/reactos/ntoskrnl/include/internal/ke.h
Modified: trunk/reactos/ntoskrnl/include/internal/nls.h
Modified: trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h
Modified: trunk/reactos/ntoskrnl/include/internal/ps.h
Modified: trunk/reactos/ntoskrnl/io/bootlog.c
Modified: trunk/reactos/ntoskrnl/io/create.c
Modified: trunk/reactos/ntoskrnl/io/driver.c
Modified: trunk/reactos/ntoskrnl/io/iocomp.c
Modified: trunk/reactos/ntoskrnl/io/iomgr.c
Modified: trunk/reactos/ntoskrnl/io/wmi.c
Deleted: trunk/reactos/ntoskrnl/ke/alert.c
Modified: trunk/reactos/ntoskrnl/ke/apc.c
Modified: trunk/reactos/ntoskrnl/ke/bug.c
Modified: trunk/reactos/ntoskrnl/ke/catch.c
Deleted: trunk/reactos/ntoskrnl/ke/critical.c
Modified: trunk/reactos/ntoskrnl/ke/dpc.c
Deleted: trunk/reactos/ntoskrnl/ke/error.c
Modified: trunk/reactos/ntoskrnl/ke/event.c
Modified: trunk/reactos/ntoskrnl/ke/i386/tskswitch.S
Modified: trunk/reactos/ntoskrnl/ke/kthread.c
Modified: trunk/reactos/ntoskrnl/ke/main.c
Modified: trunk/reactos/ntoskrnl/ke/mutex.c
Modified: trunk/reactos/ntoskrnl/ke/queue.c
Modified: trunk/reactos/ntoskrnl/ke/sem.c
Modified: trunk/reactos/ntoskrnl/ke/timer.c
Modified: trunk/reactos/ntoskrnl/ke/wait.c
Modified: trunk/reactos/ntoskrnl/ntoskrnl.def
Modified: trunk/reactos/ntoskrnl/ntoskrnl.mc
Added: trunk/reactos/ntoskrnl/ob/wait.c
Modified: trunk/reactos/ntoskrnl/ps/kill.c
Modified: trunk/reactos/ntoskrnl/ps/process.c
Modified: trunk/reactos/ntoskrnl/ps/thread.c
Modified: trunk/reactos/ntoskrnl/rtl/nls.c
Modified: trunk/reactos/tools/nci/sysfuncs.lst

Modified: trunk/reactos/config
--- trunk/reactos/config	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/config	2005-02-28 16:44:38 UTC (rev 13776)
@@ -15,7 +15,7 @@
 # be optimze for. 
 #
 
-OARCH := i486
+OARCH := pentium2
 
 #
 # Whether to compile in the kernel debugger
@@ -30,7 +30,7 @@
 #
 # Whether to compile with optimizations
 #
-OPTIMIZED := 0
+OPTIMIZED := 1
 
 #
 # Whether to compile a multiprocessor or single processor version

Modified: trunk/reactos/drivers/storage/floppy/floppy.c
--- trunk/reactos/drivers/storage/floppy/floppy.c	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/drivers/storage/floppy/floppy.c	2005-02-28 16:44:38 UTC (rev 13776)
@@ -58,7 +58,7 @@
 
 /* Queue thread management */
 static KEVENT QueueThreadTerminate;
-static PVOID ThreadObject;
+static PVOID QueueThreadObject;
 
 
 static VOID NTAPI MotorStopDpcFunc(PKDPC UnusedDpc,
@@ -378,8 +378,8 @@
   KdPrint(("floppy: unloading\n"));
 
   KeSetEvent(&QueueThreadTerminate, 0, FALSE);
-  KeWaitForSingleObject(ThreadObject, Executive, KernelMode, FALSE, 0);
-  ObDereferenceObject(ThreadObject);
+  KeWaitForSingleObject(QueueThreadObject, Executive, KernelMode, FALSE, 0);
+  ObDereferenceObject(QueueThreadObject);
 
   for(i = 0; i < gNumberOfControllers; i++)
     {
@@ -1152,7 +1152,7 @@
       return STATUS_INSUFFICIENT_RESOURCES;
     }
 
-  if(ObReferenceObjectByHandle(ThreadHandle, STANDARD_RIGHTS_ALL, NULL, KernelMode, &ThreadObject, NULL) != STATUS_SUCCESS)
+  if(ObReferenceObjectByHandle(ThreadHandle, STANDARD_RIGHTS_ALL, NULL, KernelMode, &QueueThreadObject, NULL) != STATUS_SUCCESS)
     {
       KdPrint(("floppy: Unable to reference returned thread handle; failing init\n"));
       return STATUS_UNSUCCESSFUL;

Modified: trunk/reactos/include/ddk/extypes.h
--- trunk/reactos/include/ddk/extypes.h	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/include/ddk/extypes.h	2005-02-28 16:44:38 UTC (rev 13776)
@@ -30,6 +30,23 @@
     MaximumWorkQueue
 } WORK_QUEUE_TYPE;
 
+typedef struct _EX_QUEUE_WORKER_INFO {
+    UCHAR QueueDisabled:1;
+    UCHAR MakeThreadsAsNecessary:1;
+    UCHAR WaitMode:1;
+    ULONG WorkerCount:29;
+} EX_QUEUE_WORKER_INFO, *PEX_QUEUE_WORKER_INFO;
+
+typedef struct _EX_WORK_QUEUE {
+    KQUEUE WorkerQueue;
+    ULONG DynamicThreadCount;
+    ULONG WorkItemsProcessed;
+    ULONG WorkItemsProcessedLastPass;
+    ULONG QueueDepthLastPass;
+    EX_QUEUE_WORKER_INFO Info;    
+} EX_WORK_QUEUE, *PEX_WORK_QUEUE;
+
+
 typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
 
 typedef struct _OWNER_ENTRY
@@ -240,6 +257,10 @@
 		      PVOID Argument1,
 		      PVOID Argument2);
 
+extern struct _OBJECT_TYPE EXPORTED *ExMutantObjectType;
+extern struct _OBJECT_TYPE EXPORTED *ExSemaphoreObjectType;
+extern struct _OBJECT_TYPE EXPORTED *ExTimerType;
+
 #endif /* __INCLUDE_DDK_EXTYPES_H */
 
 /* EOF */

Modified: trunk/reactos/include/ddk/iotypes.h
--- trunk/reactos/include/ddk/iotypes.h	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/include/ddk/iotypes.h	2005-02-28 16:44:38 UTC (rev 13776)
@@ -886,6 +886,8 @@
 #endif
 
 #define IO_TYPE_DRIVER 4L
+#define IO_TYPE_FILE 0x0F5L
+
 #define DRVO_UNLOAD_INVOKED 0x1L
 #define DRVO_LEGACY_DRIVER  0x2L
 #define DRVO_BUILTIN_DRIVER 0x4L

Modified: trunk/reactos/include/ddk/ketypes.h
--- trunk/reactos/include/ddk/ketypes.h	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/include/ddk/ketypes.h	2005-02-28 16:44:38 UTC (rev 13776)
@@ -36,23 +36,34 @@
 
 struct _DISPATCHER_HEADER;
 
-typedef enum _KERNEL_OBJECTS {
-	KNotificationEvent = 0,
-	KSynchronizationEvent = 1,
-	KMutant = 2,
-	KProcess = 3,
-	KQueue = 4,
-	KSemaphore = 5,
-	KThread = 6,
-	KNotificationTimer = 8,
-	KSynchronizationTimer = 9,
-	KApc = 18,
-	KDpc = 19,
-	KDeviceQueue = 20,
-	KEventPair = 21,
-	KInterrupt = 22,
-	KProfile = 23
-} KERNEL_OBJECTS;
+typedef enum _KOBJECTS {
+   EventNotificationObject = 0,
+   EventSynchronizationObject = 1,
+   MutantObject = 2,
+   ProcessObject = 3,
+   QueueObject = 4,
+   SemaphoreObject = 5,
+   ThreadObject = 6,
+   GateObject = 7,
+   TimerNotificationObject = 8,
+   TimerSynchronizationObject = 9,
+   Spare2Object = 10,
+   Spare3Object = 11,
+   Spare4Object = 12,
+   Spare5Object = 13,
+   Spare6Object = 14,
+   Spare7Object = 15,
+   Spare8Object = 16,
+   Spare9Object = 17,
+   ApcObject = 18,
+   DpcObject = 19,
+   DeviceQueueObject = 20,
+   EventPairObject = 21,
+   InterruptObject = 22,
+   ProfileObject = 23,
+   ThreadedDpcObject = 24,
+   MaximumKernelObject = 25
+} KOBJECTS;
 
 #include <pshpack1.h>
 

Modified: trunk/reactos/include/ntos/zwtypes.h
--- trunk/reactos/include/ntos/zwtypes.h	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/include/ntos/zwtypes.h	2005-02-28 16:44:38 UTC (rev 13776)
@@ -1262,9 +1262,9 @@
 
 typedef struct _MUTANT_BASIC_INFORMATION
 {
-  LONG Count;
-  BOOLEAN Owned;
-  BOOLEAN Abandoned;
+  LONG CurrentCount;
+  BOOLEAN OwnedByCaller;
+  BOOLEAN AbandonedState;
 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
 
 

Modified: trunk/reactos/lib/ntdll/def/ntdll.def
--- trunk/reactos/lib/ntdll/def/ntdll.def	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/lib/ntdll/def/ntdll.def	2005-02-28 16:44:38 UTC (rev 13776)
@@ -225,7 +225,6 @@
 NtSetEvent@8
 NtSetHighEventPair@4
 NtSetHighWaitLowEventPair@4
-NtSetHighWaitLowThread@0
 NtSetInformationFile@20
 NtSetInformationJobObject@16
 NtSetInformationKey@16
@@ -238,7 +237,6 @@
 NtSetLdtEntries@24
 NtSetLowEventPair@4
 NtSetLowWaitHighEventPair@4
-NtSetLowWaitHighThread@0
 NtSetSecurityObject@12
 NtSetSystemEnvironmentValue@8
 NtSetSystemInformation@12
@@ -849,7 +847,6 @@
 ZwSetEvent@8
 ZwSetHighEventPair@4
 ZwSetHighWaitLowEventPair@4
-ZwSetHighWaitLowThread@0
 ZwSetInformationFile@20
 ZwSetInformationKey@16
 ZwSetInformationObject@16
@@ -861,7 +858,6 @@
 ZwSetLdtEntries@24
 ZwSetLowEventPair@4
 ZwSetLowWaitHighEventPair@4
-ZwSetLowWaitHighThread@0
 ZwSetSecurityObject@12
 ZwSetSystemEnvironmentValue@8
 ZwSetSystemInformation@12

Modified: trunk/reactos/ntoskrnl/Makefile
--- trunk/reactos/ntoskrnl/Makefile	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/ntoskrnl/Makefile	2005-02-28 16:44:38 UTC (rev 13776)
@@ -101,10 +101,8 @@
 	ke/bug.o \
 	ke/catch.o \
 	ke/clock.o \
-	ke/critical.o \
 	ke/dpc.o \
 	ke/device.o \
-	ke/error.o \
 	ke/event.o \
 	ke/kqueue.o \
 	ke/kthread.o \
@@ -118,7 +116,6 @@
 	ke/spinlock.o \
 	ke/timer.o \
 	ke/wait.o \
-	ke/alert.o
 
 # Memory Manager (Mm)
 OBJECTS_MM = \
@@ -219,7 +216,8 @@
 	ob/object.o \
 	ob/sdcache.o \
 	ob/security.o \
-	ob/symlink.o
+	ob/symlink.o \
+	ob/wait.o
 
 # Process Manager (Ps)
 OBJECTS_PS = \
@@ -242,6 +240,7 @@
 OBJECTS_EX = \
 	ex/btree.o \
 	ex/callback.o \
+	ex/error.o \
 	ex/event.o \
 	ex/evtpair.o \
 	ex/fmutex.o \

Modified: trunk/reactos/ntoskrnl/cm/registry.c
--- trunk/reactos/ntoskrnl/cm/registry.c	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/ntoskrnl/cm/registry.c	2005-02-28 16:44:38 UTC (rev 13776)
@@ -241,7 +241,30 @@
   CmiCheckByName(Verbose, L"User");
 }
 
+VOID
+INIT_FUNCTION
+STDCALL
+CmInitHives(BOOLEAN SetupBoot)
+{
+    PCHAR BaseAddress;
+    
+    /* Load Registry Hives */
+    BaseAddress = (PCHAR)CachedModules[SystemRegistry]->ModStart;
+    CmImportSystemHive(BaseAddress,
+                       CachedModules[SystemRegistry]->ModEnd - (ULONG_PTR)BaseAddress);
+    
+    BaseAddress = (PCHAR)CachedModules[HardwareRegistry]->ModStart;
+    CmImportHardwareHive(BaseAddress,
+                         CachedModules[HardwareRegistry]->ModEnd - (ULONG_PTR)BaseAddress);
+    
 
+    /* Create dummy keys if no hardware hive was found */
+    CmImportHardwareHive (NULL, 0);
+
+    /* Initialize volatile registry settings */
+    if (SetupBoot == FALSE) CmInit2((PCHAR)KeLoaderBlock.CommandLine);
+}   
+
 VOID INIT_FUNCTION
 CmInitializeRegistry(VOID)
 {

Added: trunk/reactos/ntoskrnl/ex/error.c
--- trunk/reactos/ntoskrnl/ex/error.c	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/ntoskrnl/ex/error.c	2005-02-28 16:44:38 UTC (rev 13776)
@@ -0,0 +1,163 @@
+/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            ntoskrnl/ex/error.c
+ * PURPOSE:         Error Functions and Status/Exception Dispatching/Raising
+ *
+ * PROGRAMMERS:     Alex Ionescu (alex@relsoft.net) - Created File
+ */
+
+/* INCLUDES *****************************************************************/
+
+#include <ntoskrnl.h>
+#define NDEBUG
+#include <internal/debug.h>
+
+/* GLOBALS ****************************************************************/
+
+BOOLEAN ExReadyForErrors = FALSE;
+PEPORT ExpDefaultErrorPort = NULL;
+PEPROCESS ExpDefaultErrorPortProcess = NULL;
+
+/* FUNCTIONS ****************************************************************/
+
+/*
+ * @implemented
+ */
+VOID 
+STDCALL
+ExRaiseAccessViolation(VOID)
+{
+    /* Raise the Right Status */
+    ExRaiseStatus (STATUS_ACCESS_VIOLATION);
+}
+
+/*
+ * @implemented
+ */
+VOID
+STDCALL
+ExRaiseDatatypeMisalignment (VOID)
+{
+    /* Raise the Right Status */
+    ExRaiseStatus (STATUS_DATATYPE_MISALIGNMENT);
+}
+
+/*
+ * @implemented
+ */
+VOID 
+STDCALL
+ExRaiseStatus(IN NTSTATUS Status)
+{
+    EXCEPTION_RECORD ExceptionRecord;
+
+    DPRINT("ExRaiseStatus(%x)\n", Status);
+
+    /* Set up an Exception Record */
+    ExceptionRecord.ExceptionRecord = NULL;
+    ExceptionRecord.NumberParameters = 0;
+    ExceptionRecord.ExceptionCode = Status;
+    ExceptionRecord.ExceptionFlags = 0;
+    
+    /* Call the Rtl Function */
+    RtlRaiseException(&ExceptionRecord);
+}
+
+/*
+ * @implemented
+ */
+VOID
+STDCALL
+ExRaiseException (PEXCEPTION_RECORD ExceptionRecord)
+{
+    /* Call the Rtl function */
+    RtlRaiseException(ExceptionRecord);
+}
+
+/*
+ * @implemented
+ */
+BOOLEAN
+STDCALL
+ExSystemExceptionFilter(VOID)
+{
+    return KeGetPreviousMode() != KernelMode ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+ExRaiseHardError(IN NTSTATUS ErrorStatus,
+                 IN ULONG NumberOfParameters, 
+                 IN PUNICODE_STRING UnicodeStringParameterMask OPTIONAL,
+                 IN PVOID *Parameters, 
+                 IN HARDERROR_RESPONSE_OPTION ResponseOption, 
+                 OUT PHARDERROR_RESPONSE Response)
+{
+    UNIMPLEMENTED;
+}
+
+NTSTATUS 
+STDCALL 
+NtRaiseHardError(IN NTSTATUS ErrorStatus,
+                 IN ULONG NumberOfParameters,
+                 IN PUNICODE_STRING UnicodeStringParameterMask  OPTIONAL,
+                 IN PVOID *Parameters,
+                 IN HARDERROR_RESPONSE_OPTION ResponseOption,
+                 OUT PHARDERROR_RESPONSE Response)
+{
+    DPRINT1("Hard error %x\n", ErrorStatus);
+  
+    /* Call the Executive Function (WE SHOULD PUT SEH HERE/CAPTURE!) */
+    ExRaiseHardError(ErrorStatus,
+                     NumberOfParameters,
+                     UnicodeStringParameterMask,
+                     Parameters,
+                     ResponseOption,
+                     Response);
+  
+    /* Return Success */
+    return STATUS_SUCCESS;
+}
+
+NTSTATUS 
+STDCALL 
+NtSetDefaultHardErrorPort(IN HANDLE PortHandle)
+{
+    
+    KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+    NTSTATUS Status = STATUS_UNSUCCESSFUL;
+  
+    /* Check if we have the Privilege */
+    if(!SeSinglePrivilegeCheck(SeTcbPrivilege, PreviousMode)) {
+        
+        DPRINT1("NtSetDefaultHardErrorPort: Caller requires the SeTcbPrivilege privilege!\n");
+        return STATUS_PRIVILEGE_NOT_HELD;
+    }
+  
+    /* Only called once during bootup, make sure we weren't called yet */
+    if(!ExReadyForErrors) {
+        
+        Status = ObReferenceObjectByHandle(PortHandle,
+                                           0,
+                                           LpcPortObjectType,
+                                           PreviousMode,
+                                           (PVOID*)&ExpDefaultErrorPort,
+                                           NULL);
+        
+        /* Check for Success */
+        if(NT_SUCCESS(Status)) {
+            
+            /* Save the data */
+            ExpDefaultErrorPortProcess = PsGetCurrentProcess();
+            ExReadyForErrors = TRUE;
+        }
+    }
+  
+    return Status;
+}
+
+/* EOF */

Modified: trunk/reactos/ntoskrnl/ex/event.c
--- trunk/reactos/ntoskrnl/ex/event.c	2005-02-28 14:38:02 UTC (rev 13775)
+++ trunk/reactos/ntoskrnl/ex/event.c	2005-02-28 16:44:38 UTC (rev 13776)
@@ -19,300 +19,286 @@
 POBJECT_TYPE EXPORTED ExEventObjectType = NULL;
 
 static GENERIC_MAPPING ExpEventMapping = {
-	STANDARD_RIGHTS_READ | SYNCHRONIZE | EVENT_QUERY_STATE,
-	STANDARD_RIGHTS_WRITE | SYNCHRONIZE | EVENT_MODIFY_STATE,
-	STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE | EVENT_QUERY_STATE,
-	EVENT_ALL_ACCESS};
+    STANDARD_RIGHTS_READ | SYNCHRONIZE | EVENT_QUERY_STATE,
+    STANDARD_RIGHTS_WRITE | SYNCHRONIZE | EVENT_MODIFY_STATE,
+    STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE | EVENT_QUERY_STATE,
+    EVENT_ALL_ACCESS};
 
-static const INFORMATION_CLASS_INFO ExEventInfoClass[] =
-{
-  ICI_SQ_SAME( sizeof(EVENT_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY ), /* EventBasicInformation */
+static const INFORMATION_CLASS_INFO ExEventInfoClass[] = {
+    
+    /* EventBasicInformation */
+    ICI_SQ_SAME( sizeof(EVENT_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY),
 };
 
 /* FUNCTIONS *****************************************************************/
 
-NTSTATUS STDCALL
-NtpCreateEvent(PVOID ObjectBody,
-	       PVOID Parent,
-	       PWSTR RemainingPath,
-	       POBJECT_ATTRIBUTES ObjectAttributes)
-{
-  DPRINT("NtpCreateEvent(ObjectBody %x, Parent %x, RemainingPath %S)\n",
-	 ObjectBody, Parent, RemainingPath);
-
-  if (RemainingPath != NULL && wcschr(RemainingPath+1, '\\') != NULL)
-    {
-      return(STATUS_UNSUCCESSFUL);
-    }
-
-  return(STATUS_SUCCESS);
-}
-
-
-VOID INIT_FUNCTION
+VOID 
+INIT_FUNCTION
 ExpInitializeEventImplementation(VOID)
 {
-   ExEventObjectType = ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE));
-   
-   RtlpCreateUnicodeString(&ExEventObjectType->TypeName, L"Event", NonPagedPool);
-   
-   ExEventObjectType->Tag = TAG('E', 'V', 'T', 'T');
-   ExEventObjectType->PeakObjects = 0;
-   ExEventObjectType->PeakHandles = 0;
-   ExEventObjectType->TotalObjects = 0;
-   ExEventObjectType->TotalHandles = 0;
-   ExEventObjectType->PagedPoolCharge = 0;
-   ExEventObjectType->NonpagedPoolCharge = sizeof(KEVENT);
-   ExEventObjectType->Mapping = &ExpEventMapping;
-   ExEventObjectType->Dump = NULL;
-   ExEventObjectType->Open = NULL;
-   ExEventObjectType->Close = NULL;
-   ExEventObjectType->Delete = NULL;
-   ExEventObjectType->Parse = NULL;
-   ExEventObjectType->Security = NULL;
-   ExEventObjectType->QueryName = NULL;
-   ExEventObjectType->OkayToClose = NULL;
-   ExEventObjectType->Create = NtpCreateEvent;
-   ExEventObjectType->DuplicationNotify = NULL;
-
-   ObpCreateTypeObject(ExEventObjectType);
+    /* Create the Event Object Type */
+    ExEventObjectType = ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE));
+    RtlpCreateUnicodeString(&ExEventObjectType->TypeName, L"Event", NonPagedPool);
+    ExEventObjectType->Tag = TAG('E', 'V', 'T', 'T');
+    ExEventObjectType->PeakObjects = 0;
+    ExEventObjectType->PeakHandles = 0;
+    ExEventObjectType->TotalObjects = 0;
+    ExEventObjectType->TotalHandles = 0;
+    ExEventObjectType->PagedPoolCharge = 0;
+    ExEventObjectType->NonpagedPoolCharge = sizeof(KEVENT);
+    ExEventObjectType->Mapping = &ExpEventMapping;
+    ExEventObjectType->Dump = NULL;
+    ExEventObjectType->Open = NULL;
+    ExEventObjectType->Close = NULL;
+    ExEventObjectType->Delete = NULL;
+    ExEventObjectType->Parse = NULL;
+    ExEventObjectType->Security = NULL;
+    ExEventObjectType->QueryName = NULL;
+    ExEventObjectType->OkayToClose = NULL;
+    ExEventObjectType->Create = NULL;
+    ExEventObjectType->DuplicationNotify = NULL;
+    ObpCreateTypeObject(ExEventObjectType);
 }
 
-
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS 
+STDCALL
 NtClearEvent(IN HANDLE EventHandle)
 {
-   PKEVENT Event;
-   NTSTATUS Status;
+    PKEVENT Event;
+    NTSTATUS Status;
+    
+    PAGED_CODE();
    
-   PAGED_CODE();
-   
+    /* Reference the Object */
    Status = ObReferenceObjectByHandle(EventHandle,
-				      EVENT_MODIFY_STATE,
-				      ExEventObjectType,
-				      ExGetPreviousMode(),
-				      (PVOID*)&Event,
-				      NULL);
-   if(NT_SUCCESS(Status))
-   {
-     KeClearEvent(Event);
-     ObDereferenceObject(Event);
-   }
+                                      EVENT_MODIFY_STATE,
+                                      ExEventObjectType,
+                                      ExGetPreviousMode(),
+                                      (PVOID*)&Event,
+                                      NULL);
    
-   return Status;
+   /* Check for Success */
+    if(NT_SUCCESS(Status)) {
+        
+        /* Clear the Event and Dereference */
+        KeClearEvent(Event);
+        ObDereferenceObject(Event);
+    }
+   
+    /* Return Status */
+    return Status;
 }
 
 
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS 
+STDCALL
 NtCreateEvent(OUT PHANDLE EventHandle,
-	      IN ACCESS_MASK DesiredAccess,
-	      IN POBJECT_ATTRIBUTES ObjectAttributes  OPTIONAL,
-	      IN EVENT_TYPE EventType,
-	      IN BOOLEAN InitialState)
+              IN ACCESS_MASK DesiredAccess,
+              IN POBJECT_ATTRIBUTES ObjectAttributes  OPTIONAL,
+              IN EVENT_TYPE EventType,
+              IN BOOLEAN InitialState)
 {
-   KPROCESSOR_MODE PreviousMode;
-   PKEVENT Event;
-   HANDLE hEvent;
-   NTSTATUS Status = STATUS_SUCCESS;
+    KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+    PKEVENT Event;
+    HANDLE hEvent;
+    NTSTATUS Status = STATUS_SUCCESS;
    
-   PAGED_CODE();
+    PAGED_CODE();
  
-   PreviousMode = ExGetPreviousMode();
- 
-   if(PreviousMode == UserMode)
-   {
-     _SEH_TRY
-     {
-       ProbeForWrite(EventHandle,
-                     sizeof(HANDLE),
-                     sizeof(ULONG));
-     }
-     _SEH_HANDLE
-     {
-       Status = _SEH_GetExceptionCode();
-     }
-     _SEH_END;
+    /* Check Output Safety */
+    if(PreviousMode == UserMode) {
+        
+        _SEH_TRY {
+            
+            ProbeForWrite(EventHandle,
+                          sizeof(HANDLE),
+                          sizeof(ULONG));
+        } _SEH_HANDLE {
+            
+            Status = _SEH_GetExceptionCode();
+        
+        } _SEH_END;
      
-     if(!NT_SUCCESS(Status))
-     {
-       return Status;
-     }
-   }
+        if(!NT_SUCCESS(Status)) return Status;
+    }
+    
+    /* Create the Object */
+    Status = ObCreateObject(PreviousMode,
+                            ExEventObjectType,
+                            ObjectAttributes,
+                            PreviousMode,
+                            NULL,
+                            sizeof(KEVENT),
+                            0,
+                            0,
+                            (PVOID*)&Event);
+    
+    /* Check for Success */
+    if(NT_SUCCESS(Status)) {
+        
+        /* Initalize the Event */
+        KeInitializeEvent(Event,
+                          EventType,
+                          InitialState);
+        
+        /* Insert it */
+        Status = ObInsertObject((PVOID)Event,
+                                 NULL,
+                                 DesiredAccess,
+                                 0,
+                                 NULL,
+                                 &hEvent);
+        ObDereferenceObject(Event);
  
-   Status = ObCreateObject(PreviousMode,
-                           ExEventObjectType,
-                           ObjectAttributes,
-                           PreviousMode,
-                           NULL,
-                           sizeof(KEVENT),
-                           0,
-                           0,
-                           (PVOID*)&Event);
-   if(NT_SUCCESS(Status))
-   {
-     KeInitializeEvent(Event,
-                       EventType,
-                       InitialState);
- 
- 
-     Status = ObInsertObject((PVOID)Event,
-                             NULL,
-                             DesiredAccess,
-                             0,
-                             NULL,
-                             &hEvent);
-     ObDereferenceObject(Event);
- 
-     if(NT_SUCCESS(Status))
-     {
-       _SEH_TRY
-       {
-         *EventHandle = hEvent;
-       }
-       _SEH_HANDLE
-       {
-         Status = _SEH_GetExceptionCode();
-       }
-       _SEH_END;
-     }
-   }
- 
-   return Status;
+        /* Check for success and return handle */
+        if(NT_SUCCESS(Status)) {
+            
+            _SEH_TRY {
+                
+                *EventHandle = hEvent;
+            
+            } _SEH_HANDLE {
+                
+                Status = _SEH_GetExceptionCode();
+                
+            } _SEH_END;
+        }
+    }
+
+    /* Return Status */
+    return Status;
 }
 
-
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS 
+STDCALL
 NtOpenEvent(OUT PHANDLE EventHandle,
-	    IN ACCESS_MASK DesiredAccess,
-	    IN POBJECT_ATTRIBUTES ObjectAttributes)
+            IN ACCESS_MASK DesiredAccess,
+            IN POBJECT_ATTRIBUTES ObjectAttributes)
 {
-   HANDLE hEvent;
-   KPROCESSOR_MODE PreviousMode;
-   NTSTATUS Status = STATUS_SUCCESS;
+    HANDLE hEvent;
+    KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+    NTSTATUS Status = STATUS_SUCCESS;
    
-   PAGED_CODE();
-   
-   DPRINT("NtOpenEvent(0x%x, 0x%x, 0x%x)\n", EventHandle, DesiredAccess, ObjectAttributes);
+    PAGED_CODE();
+    DPRINT("NtOpenEvent(0x%x, 0x%x, 0x%x)\n", EventHandle, DesiredAccess, ObjectAttributes);
 
-   PreviousMode = ExGetPreviousMode();
-   
-   if(PreviousMode == UserMode)
-   {
-     _SEH_TRY
-     {
-       ProbeForWrite(EventHandle,
-                     sizeof(HANDLE),
-                     sizeof(ULONG));
-     }
-     _SEH_HANDLE
-     {
-       Status = _SEH_GetExceptionCode();
-     }
-     _SEH_END;
+    /* Check Output Safety */
+    if(PreviousMode == UserMode) {
+        
+        _SEH_TRY {
+            
+            ProbeForWrite(EventHandle,
+                          sizeof(HANDLE),
+                          sizeof(ULONG));
+        } _SEH_HANDLE {
+            
+            Status = _SEH_GetExceptionCode();
+        
+        } _SEH_END;
      
-     if(!NT_SUCCESS(Status))
-     {
-       return Status;
-     }
-   }
-
-   Status = ObOpenObjectByName(ObjectAttributes,
-			       ExEventObjectType,
-			       NULL,
-			       PreviousMode,
-			       DesiredAccess,
-			       NULL,
-			       &hEvent);
+        if(!NT_SUCCESS(Status)) return Status;
+    }
+    
+    /* Open the Object */
+    Status = ObOpenObjectByName(ObjectAttributes,
+                                ExEventObjectType,
+                                NULL,
+                                PreviousMode,
+                                DesiredAccess,
+                                NULL,
+                                &hEvent);
              
-   if(NT_SUCCESS(Status))
-   {
-     _SEH_TRY
-     {
-       *EventHandle = hEvent;
-     }
-     _SEH_HANDLE
-     {
-       Status = _SEH_GetExceptionCode();
-     }
-     _SEH_END;
-   }
+    /* Check for success and return handle */
+    if(NT_SUCCESS(Status)) {
+            
+        _SEH_TRY {
+            
+            *EventHandle = hEvent;
+                
+        } _SEH_HANDLE {
+            
+            Status = _SEH_GetExceptionCode();
+            
+        } _SEH_END;
+    }
    
-   return Status;
+    /* Return status */
+    return Status;
 }
 
-
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS 
+STDCALL
 NtPulseEvent(IN HANDLE EventHandle,
-	     OUT PLONG PreviousState  OPTIONAL)
+             OUT PLONG PreviousState OPTIONAL)
 {
-   PKEVENT Event;
-   KPROCESSOR_MODE PreviousMode;
-   NTSTATUS Status = STATUS_SUCCESS;
+    PKEVENT Event;
+    KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+    NTSTATUS Status = STATUS_SUCCESS;
    
-   PAGED_CODE();
+    PAGED_CODE();
+    DPRINT("NtPulseEvent(EventHandle 0%x PreviousState 0%x)\n",
+            EventHandle, PreviousState);
 
-   DPRINT("NtPulseEvent(EventHandle 0%x PreviousState 0%x)\n",
-	  EventHandle, PreviousState);
+    /* Check buffer validity */
+    if(PreviousState && PreviousMode == UserMode) {
+        
+        _SEH_TRY {
+            
+            ProbeForWrite(PreviousState,
+                          sizeof(LONG),
+                          sizeof(ULONG));
+         } _SEH_HANDLE {
+             
+            Status = _SEH_GetExceptionCode();
+            
+        } _SEH_END;
 
-   PreviousMode = ExGetPreviousMode();
-   
-   if(PreviousState != NULL && PreviousMode == UserMode)
-   {
-     _SEH_TRY
-     {
-       ProbeForWrite(PreviousState,
-                     sizeof(LONG),
-                     sizeof(ULONG));
-     }
-     _SEH_HANDLE
-     {
-       Status = _SEH_GetExceptionCode();
-     }
-     _SEH_END;
+        if(!NT_SUCCESS(Status)) return Status;
+    }
+    
+    /* Open the Object */
+    Status = ObReferenceObjectByHandle(EventHandle,
+                                       EVENT_MODIFY_STATE,
+                                       ExEventObjectType,
+                                       PreviousMode,
+                                       (PVOID*)&Event,
+                                       NULL);
+    
+    /* Check for success */
+    if(NT_SUCCESS(Status)) {
+        
+        /* Pulse the Event */
+        LONG Prev = KePulseEvent(Event, EVENT_INCREMENT, FALSE);
+        ObDereferenceObject(Event);
      
-     if(!NT_SUCCESS(Status))
-     {
-       return Status;
-     }
+        /* Return it */        
+        if(PreviousState) {
+            
+            _SEH_TRY {
+                
+                *PreviousState = Prev;
+            
+            } _SEH_HANDLE {
+                
+                Status = _SEH_GetExceptionCode();
+            
+            } _SEH_END;
+        }
    }
 
-   Status = ObReferenceObjectByHandle(EventHandle,
-				      EVENT_MODIFY_STATE,
-				      ExEventObjectType,
-				      PreviousMode,
-				      (PVOID*)&Event,
-				      NULL);
-   if(NT_SUCCESS(Status))
-   {
-     LONG Prev = KePulseEvent(Event, EVENT_INCREMENT, FALSE);
-     ObDereferenceObject(Event);
-     
-     if(PreviousState != NULL)
-     {
-       _SEH_TRY
-       {
-         *PreviousState = Prev;
-       }
-       _SEH_HANDLE
-       {
-         Status = _SEH_GetExceptionCode();
-       }
-       _SEH_END;
-     }
-   }
-
+   /* Return Status */
    return Status;
 }
 
@@ -320,230 +306,202 @@
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS 
+STDCALL
 NtQueryEvent(IN HANDLE EventHandle,
-	     IN EVENT_INFORMATION_CLASS EventInformationClass,
[truncated at 1000 lines; 13871 more skipped]