started moving tags to a private internal header
[reactos.git] / reactos / ntoskrnl / io / driver.c
index a2fee3a..a95a142 100644 (file)
@@ -4,7 +4,7 @@
  * PROJECT:         ReactOS kernel
  * FILE:            ntoskrnl/io/driver.c
  * PURPOSE:         Loading and unloading of drivers
- * 
+ *
  * PROGRAMMERS:     David Welch (welch@cwcom.net)
  *                  Filip Navara (xnavara@volny.cz)
  */
@@ -18,6 +18,7 @@
 /* ke/main.c */
 extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
 extern ULONG KeTickCount;
+extern BOOLEAN SetupMode;
 
 NTSTATUS
 LdrProcessModule(PVOID ModuleLoadBase,
@@ -75,53 +76,37 @@ static UNICODE_STRING IopHardwareDatabaseKey =
 
 POBJECT_TYPE EXPORTED IoDriverObjectType = NULL;
 
-#define TAG_DRIVER             TAG('D', 'R', 'V', 'R')
-#define TAG_DRIVER_EXTENSION   TAG('D', 'R', 'V', 'E')
-
 /* DECLARATIONS ***************************************************************/
 
-NTSTATUS STDCALL
-IopCreateDriver(
-   PVOID ObjectBody,
-   PVOID Parent,
-   PWSTR RemainingPath,
-   POBJECT_ATTRIBUTES ObjectAttributes);
-
 VOID STDCALL
 IopDeleteDriver(PVOID ObjectBody);
 
 /* PRIVATE FUNCTIONS **********************************************************/
 
-VOID INIT_FUNCTION
+VOID 
+INIT_FUNCTION
 IopInitDriverImplementation(VOID)
 {
-   /* Register the process object type */
-   IoDriverObjectType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
-   IoDriverObjectType->Tag = TAG('D', 'R', 'V', 'R');
-   IoDriverObjectType->TotalObjects = 0;
-   IoDriverObjectType->TotalHandles = 0;
-   IoDriverObjectType->PeakObjects = 0;
-   IoDriverObjectType->PeakHandles = 0;
-   IoDriverObjectType->PagedPoolCharge = 0;
-   IoDriverObjectType->NonpagedPoolCharge = sizeof(DRIVER_OBJECT);
-   IoDriverObjectType->Dump = NULL;
-   IoDriverObjectType->Open = NULL;
-   IoDriverObjectType->Close = NULL;
-   IoDriverObjectType->Delete = IopDeleteDriver;
-   IoDriverObjectType->Parse = NULL;
-   IoDriverObjectType->Security = NULL;
-   IoDriverObjectType->QueryName = NULL;
-   IoDriverObjectType->OkayToClose = NULL;
-   IoDriverObjectType->Create = IopCreateDriver;
-   IoDriverObjectType->DuplicationNotify = NULL;
-   RtlInitUnicodeString(&IoDriverObjectType->TypeName, L"Driver");
-
-   ObpCreateTypeObject(IoDriverObjectType);
+   OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
+   UNICODE_STRING Name;
+
+   DPRINT1("Creating Registry Object Type\n");
+  
+   /* Initialize the Driver object type  */
+   RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
+   RtlInitUnicodeString(&Name, L"Driver");
+   ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
+   ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(DRIVER_OBJECT);
+   ObjectTypeInitializer.PoolType = NonPagedPool;
+   ObjectTypeInitializer.UseDefaultObject = TRUE;
+   ObjectTypeInitializer.DeleteProcedure = IopDeleteDriver;
+
+   ObpCreateTypeObject(&ObjectTypeInitializer, &Name, &IoDriverObjectType);
 
    InitializeListHead(&DriverReinitListHead);
    KeInitializeSpinLock(&DriverReinitListLock);
    DriverReinitTailEntry = NULL;
-   
+
    InitializeListHead(&DriverBootReinitListHead);
    KeInitializeSpinLock(&DriverBootReinitListLock);
    DriverBootReinitTailEntry = NULL;
@@ -138,46 +123,6 @@ IopInvalidDeviceRequest(
    return STATUS_INVALID_DEVICE_REQUEST;
 }
 
-NTSTATUS STDCALL
-IopCreateDriver(
-   PVOID ObjectBody,
-   PVOID Parent,
-   PWSTR RemainingPath,
-   POBJECT_ATTRIBUTES ObjectAttributes)
-{
-   PDRIVER_OBJECT Object = ObjectBody;
-   ULONG i;
-
-   DPRINT("IopCreateDriver(ObjectBody %x, Parent %x, RemainingPath %S)\n",
-      ObjectBody, Parent, RemainingPath);
-
-   if (RemainingPath != NULL && wcschr(RemainingPath + 1, '\\') != NULL)
-      return STATUS_UNSUCCESSFUL;
-
-   /* Create driver extension */
-   Object->DriverExtension = (PDRIVER_EXTENSION)
-      ExAllocatePoolWithTag(
-         NonPagedPool,
-         sizeof(DRIVER_EXTENSION),
-         TAG_DRIVER_EXTENSION);
-
-   if (Object->DriverExtension == NULL)
-   {
-      return STATUS_NO_MEMORY;
-   }
-
-   RtlZeroMemory(Object->DriverExtension, sizeof(DRIVER_EXTENSION));
-
-   Object->Type = IO_TYPE_DRIVER;
-
-   for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
-      Object->MajorFunction[i] = IopInvalidDeviceRequest;
-
-   Object->HardwareDatabase = &IopHardwareDatabaseKey;
-
-   return STATUS_SUCCESS;
-}
-
 VOID STDCALL
 IopDeleteDriver(PVOID ObjectBody)
 {
@@ -203,6 +148,64 @@ IopDeleteDriver(PVOID ObjectBody)
    KfLowerIrql(OldIrql);
 }
 
+NTSTATUS FASTCALL
+IopGetDriverObject(
+   PDRIVER_OBJECT *DriverObject,
+   PUNICODE_STRING ServiceName,
+   BOOLEAN FileSystem)
+{
+   PDRIVER_OBJECT Object;
+   WCHAR NameBuffer[MAX_PATH];
+   UNICODE_STRING DriverName;
+   OBJECT_ATTRIBUTES ObjectAttributes;
+   NTSTATUS Status;
+
+   DPRINT("IopOpenDriverObject(%p '%wZ' %x)\n",
+      DriverObject, ServiceName, FileSystem);
+
+   *DriverObject = NULL;
+
+   /* Create ModuleName string */
+   if (ServiceName == NULL || ServiceName->Buffer == NULL)
+      /* We don't know which DriverObject we have to open */
+      return STATUS_INVALID_PARAMETER_2;
+
+   if (FileSystem == TRUE)
+      wcscpy(NameBuffer, FILESYSTEM_ROOT_NAME);
+   else
+      wcscpy(NameBuffer, DRIVER_ROOT_NAME);
+   wcscat(NameBuffer, ServiceName->Buffer);
+
+   RtlInitUnicodeString(&DriverName, NameBuffer);
+   DPRINT("Driver name: '%wZ'\n", &DriverName);
+
+   /* Initialize ObjectAttributes for driver object */
+   InitializeObjectAttributes(
+      &ObjectAttributes,
+      &DriverName,
+      OBJ_OPENIF | OBJ_KERNEL_HANDLE,
+      NULL,
+      NULL);
+
+   /* Open driver object */
+   Status = ObReferenceObjectByName(
+      &DriverName,
+      0, /* Attributes */
+      NULL, /* PassedAccessState */
+      0, /* DesiredAccess */
+      IoDriverObjectType,
+      KernelMode,
+      NULL, /* ParseContext */
+      (PVOID*)&Object);
+
+   if (!NT_SUCCESS(Status))
+      return Status;
+
+   *DriverObject = Object;
+
+   return STATUS_SUCCESS;
+}
+
 NTSTATUS FASTCALL
 IopCreateDriverObject(
    PDRIVER_OBJECT *DriverObject,
@@ -217,6 +220,7 @@ IopCreateDriverObject(
    UNICODE_STRING DriverName;
    OBJECT_ATTRIBUTES ObjectAttributes;
    NTSTATUS Status;
+   ULONG i;
    PWSTR Buffer = NULL;
 
    DPRINT("IopCreateDriverObject(%p '%wZ' %x %p %x)\n",
@@ -235,7 +239,7 @@ IopCreateDriverObject(
 
       RtlInitUnicodeString(&DriverName, NameBuffer);
       DPRINT("Driver name: '%wZ'\n", &DriverName);
-      
+
       Buffer = (PWSTR)ExAllocatePool(NonPagedPool, DriverName.Length);
       /* If we don't success, it is not a problem. Our driver
        * object will not have associated driver name... */
@@ -270,6 +274,38 @@ IopCreateDriverObject(
       return Status;
    }
 
+   Status = ObInsertObject(Object,
+                           NULL,
+                           FILE_ALL_ACCESS,
+                           0,
+                           NULL,
+                           NULL);
+   if (!NT_SUCCESS(Status))
+   {
+      return Status;
+   }  
+
+   /* Create driver extension */
+   Object->DriverExtension = (PDRIVER_EXTENSION)
+      ExAllocatePoolWithTag(
+         NonPagedPool,
+         sizeof(DRIVER_EXTENSION),
+         TAG_DRIVER_EXTENSION);
+
+   if (Object->DriverExtension == NULL)
+   {
+      return STATUS_NO_MEMORY;
+   }
+
+   RtlZeroMemory(Object->DriverExtension, sizeof(DRIVER_EXTENSION));
+
+   Object->Type = IO_TYPE_DRIVER;
+
+   for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
+      Object->MajorFunction[i] = IopInvalidDeviceRequest;
+
+   Object->HardwareDatabase = &IopHardwareDatabaseKey;
+
    Object->DriverStart = DriverImageStart;
    Object->DriverSize = DriverImageSize;
    if (Buffer)
@@ -295,12 +331,23 @@ IopCreateDriverObject(
  * Display 'Loading XXX...' message.
  */
 
-VOID FASTCALL
-IopDisplayLoadingMessage(PWCHAR ServiceName)
+VOID 
+FASTCALL
+INIT_FUNCTION
+IopDisplayLoadingMessage(PVOID ServiceName, 
+                         BOOLEAN Unicode)
 {
-   CHAR TextBuffer[256];
-   sprintf(TextBuffer, "Loading %S...\n", ServiceName);
-   HalDisplayString(TextBuffer);
+    if (SetupMode) return;
+    CHAR TextBuffer[256];
+    if (Unicode) 
+    {
+        sprintf(TextBuffer, "Loading %S...\n", (PWCHAR)ServiceName);
+    }
+    else
+    {
+        sprintf(TextBuffer, "Loading %s...\n", (PCHAR)ServiceName);
+    }
+    HalDisplayString(TextBuffer);
 }
 
 /*
@@ -413,8 +460,8 @@ IopLoadServiceModule(
       DPRINT("RtlQueryRegistryValues() failed (Status %x)\n", Status);
       return Status;
    }
-
-   IopDisplayLoadingMessage(ServiceName->Buffer);
+   
+   IopDisplayLoadingMessage(ServiceName->Buffer, TRUE);
 
    /*
     * Normalize the image path for all later processing.
@@ -548,9 +595,9 @@ IopInitializeDriverModule(
    UNICODE_STRING RegistryKey;
    PDRIVER_INITIALIZE DriverEntry;
    NTSTATUS Status;
-   
+
    DriverEntry = ModuleObject->EntryPoint;
-   
+
    if (ServiceName != NULL && ServiceName->Length != 0)
    {
       RegistryKey.Length = 0;
@@ -588,9 +635,9 @@ IopInitializeDriverModule(
    IopMarkLastReinitializeDriver();
 
    Status = DriverEntry(*DriverObject, &RegistryKey);
-   
+
    RtlFreeUnicodeString(&RegistryKey);
-   
+
    if (!NT_SUCCESS(Status))
    {
       ObMakeTemporaryObject(*DriverObject);
@@ -624,7 +671,7 @@ IopAttachFilterDriversCallback(
    PMODULE_OBJECT ModuleObject;
    PDRIVER_OBJECT DriverObject;
    NTSTATUS Status;
-   
+
    for (Filters = ValueData;
         ((ULONG_PTR)Filters - (ULONG_PTR)ValueData) < ValueLength &&
         *Filters != 0;
@@ -632,7 +679,7 @@ IopAttachFilterDriversCallback(
    {
       DPRINT("Filter Driver: %S (%wZ)\n", Filters, &DeviceNode->InstancePath);
       ServiceName.Buffer = Filters;
-      ServiceName.MaximumLength = 
+      ServiceName.MaximumLength =
       ServiceName.Length = wcslen(Filters) * sizeof(WCHAR);
 
       /* Load and initialize the filter driver */
@@ -650,13 +697,10 @@ IopAttachFilterDriversCallback(
       else
       {
          /* get existing DriverObject pointer */
-         Status = IopCreateDriverObject(
+         Status = IopGetDriverObject(
             &DriverObject,
             &ServiceName,
-            OBJ_OPENIF,
-            FALSE,
-            ModuleObject->Base,
-            ModuleObject->Length);
+            FALSE);
          if (!NT_SUCCESS(Status))
             continue;
       }
@@ -694,7 +738,7 @@ IopAttachFilterDrivers(
    /*
     * First load the device filters
     */
-   
+
    QueryTable[0].QueryRoutine = IopAttachFilterDriversCallback;
    if (Lower)
      QueryTable[0].Name = L"LowerFilters";
@@ -706,10 +750,10 @@ IopAttachFilterDrivers(
    QueryTable[1].Name = NULL;
 
    KeyBuffer = ExAllocatePool(
-      PagedPool, 
+      PagedPool,
       (49 * sizeof(WCHAR)) + DeviceNode->InstancePath.Length);
    wcscpy(KeyBuffer, L"\\Registry\\Machine\\System\\CurrentControlSet\\Enum\\");
-   wcscat(KeyBuffer, DeviceNode->InstancePath.Buffer);  
+   wcscat(KeyBuffer, DeviceNode->InstancePath.Buffer);
 
    RtlQueryRegistryValues(
       RTL_REGISTRY_ABSOLUTE,
@@ -766,11 +810,11 @@ IopAttachFilterDrivers(
 
       ExFreePool(KeyBuffer);
    }
-   
+
    return STATUS_SUCCESS;
 }
 
-static NTSTATUS STDCALL 
+static NTSTATUS STDCALL
 IopGetGroupOrderList(PWSTR ValueName,
                     ULONG ValueType,
                     PVOID ValueData,
@@ -916,8 +960,20 @@ IopCreateServiceListEntry(PUNICODE_STRING ServiceName)
                                  NULL);
   if (!NT_SUCCESS(Status) || Service->Start > 1)
     {
-      ExFreePool(Service->ServiceGroup.Buffer);
-      ExFreePool(Service->ImagePath.Buffer);
+      /*
+       * If something goes wrong during RtlQueryRegistryValues
+       * it'll just drop everything on the floor and return,
+       * so you have to check if the buffers were filled.
+       * Luckily we zerofilled the Service.
+       */
+      if (Service->ServiceGroup.Buffer)
+        {
+          ExFreePool(Service->ServiceGroup.Buffer);
+        }
+      if (Service->ImagePath.Buffer)
+        {
+          ExFreePool(Service->ImagePath.Buffer);
+        }
       ExFreePool(Service);
       return(Status);
     }
@@ -1133,7 +1189,6 @@ IopInitializeBuiltinDriver(
    PDEVICE_NODE DeviceNode;
    PDRIVER_OBJECT DriverObject;
    NTSTATUS Status;
-   CHAR TextBuffer[256];
    PCHAR FileNameWithoutPath;
    LPWSTR FileExtension;
 
@@ -1141,11 +1196,9 @@ IopInitializeBuiltinDriver(
       FileName, ModuleLoadBase, ModuleLength);
 
    /*
-    * Display 'Initializing XXX...' message
+    * Display 'Loading XXX...' message
     */
-
-   sprintf(TextBuffer, "Initializing %s...\n", FileName);
-   HalDisplayString(TextBuffer);
+   IopDisplayLoadingMessage(FileName, FALSE);
 
    /*
     * Determine the right device object
@@ -1211,7 +1264,7 @@ IopInitializeBuiltinDriver(
 
    Status = IopInitializeDriverModule(DeviceNode, ModuleObject,
       &DeviceNode->ServiceName, FALSE, &DriverObject);
-   
+
    if (!NT_SUCCESS(Status))
    {
       if (ModuleDeviceNode == NULL)
@@ -1221,6 +1274,10 @@ IopInitializeBuiltinDriver(
    }
 
    Status = IopInitializeDevice(DeviceNode, DriverObject);
+   if (NT_SUCCESS(Status))
+   {
+      Status = IopStartDevice(DeviceNode);
+   }
 
    return Status;
 }
@@ -1232,7 +1289,7 @@ IopInitializeBuiltinDriver(
  *
  * Parameters
  *    None
- *             
+ *
  * Return Value
  *    None
  */
@@ -1314,7 +1371,7 @@ IopLoadDriver(PSERVICE Service)
 {
    NTSTATUS Status = STATUS_UNSUCCESSFUL;
 
-   IopDisplayLoadingMessage(Service->ServiceName.Buffer);
+   IopDisplayLoadingMessage(Service->ServiceName.Buffer, TRUE);
    Status = ZwLoadDriver(&Service->RegistryPath);
    IopBootLog(&Service->ImagePath, NT_SUCCESS(Status) ? TRUE : FALSE);
    if (!NT_SUCCESS(Status))
@@ -1324,20 +1381,20 @@ IopLoadDriver(PSERVICE Service)
       if (Service->ErrorControl == 1)
       {
          /* Log error */
-      } 
+      }
       else if (Service->ErrorControl == 2)
       {
          if (IsLastKnownGood == FALSE)
          {
             /* Boot last known good configuration */
          }
-      } 
+      }
       else if (Service->ErrorControl == 3)
       {
          if (IsLastKnownGood == FALSE)
          {
             /* Boot last known good configuration */
-         } 
+         }
          else
          {
             /* BSOD! */
@@ -1356,7 +1413,7 @@ IopLoadDriver(PSERVICE Service)
  *
  * Parameters
  *    None
- *             
+ *
  * Return Value
  *    None
  */
@@ -1380,7 +1437,7 @@ IopInitializeSystemDrivers(VOID)
 
       DPRINT("Group: %wZ\n", &CurrentGroup->GroupName);
 
-      /* Load all drivers with a valid tag */ 
+      /* Load all drivers with a valid tag */
       for (i = 0; i < CurrentGroup->TagCount; i++)
       {
          ServiceEntry = ServiceListHead.Flink;
@@ -1444,7 +1501,7 @@ IopInitializeSystemDrivers(VOID)
  *       Whether to unload Plug & Plug or only legacy drivers. If this
  *       parameter is set to FALSE, the routine will unload only legacy
  *       drivers.
- *             
+ *
  * Return Value
  *    Status
  *
@@ -1658,22 +1715,22 @@ IoCreateDriver (
     UNICODE_STRING ServiceKeyName;
     HANDLE hDriver;
     ULONG i;
-    
+
     /* First, create a unique name for the driver if we don't have one */
     if (!DriverName) {
-       
+
         /* Create a random name and set up the string*/
         NameLength = swprintf(NameBuffer, L"\\Driver\\%08u", KeTickCount);
         LocalDriverName.Length = NameLength * sizeof(WCHAR);
         LocalDriverName.MaximumLength = LocalDriverName.Length + sizeof(UNICODE_NULL);
         LocalDriverName.Buffer = NameBuffer;
-    
+
     } else {
-        
+
         /* So we can avoid another code path, use a local var */
         LocalDriverName = *DriverName;
     }
-    
+
     /* Initialize the Attributes */
     ObjectSize = sizeof(DRIVER_OBJECT) + sizeof(DRIVER_EXTENSION);
     InitializeObjectAttributes(&ObjectAttributes,
@@ -1681,7 +1738,7 @@ IoCreateDriver (
                                OBJ_PERMANENT | OBJ_CASE_INSENSITIVE,
                                NULL,
                                NULL);
-    
+
     /* Create the Object */
     Status = ObCreateObject(KernelMode,
                             IoDriverObjectType,
@@ -1692,10 +1749,10 @@ IoCreateDriver (
                             0,
                             0,
                             (PVOID*)&DriverObject);
-    
+
     /* Return on failure */
     if (!NT_SUCCESS(Status)) return Status;
-    
+
     /* Set up the Object */
     RtlZeroMemory(DriverObject, ObjectSize);
     DriverObject->Type = IO_TYPE_DRIVER;
@@ -1704,13 +1761,13 @@ IoCreateDriver (
     DriverObject->DriverExtension = (PDRIVER_EXTENSION)(DriverObject + 1);
     DriverObject->DriverExtension->DriverObject = DriverObject;
     DriverObject->DriverInit = InitializationFunction;
-    
+
     /* Invalidate all Major Functions */
     for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
     {
         DriverObject->MajorFunction[i] = IopInvalidDeviceRequest;
     }
-               
+
     /* Set up the Service Key Name */
     ServiceKeyName.Buffer = ExAllocatePool(PagedPool, LocalDriverName.Length + sizeof(WCHAR));
     ServiceKeyName.Length = LocalDriverName.Length;
@@ -1718,10 +1775,10 @@ IoCreateDriver (
     RtlMoveMemory(ServiceKeyName.Buffer, LocalDriverName.Buffer, LocalDriverName.Length);
     ServiceKeyName.Buffer[ServiceKeyName.Length / sizeof(WCHAR)] = L'\0';
     DriverObject->DriverExtension->ServiceKeyName =  ServiceKeyName;
-    
+
     /* Also store it in the Driver Object. This is a bit of a hack. */
     RtlMoveMemory(&DriverObject->DriverName, &ServiceKeyName, sizeof(UNICODE_STRING));
-    
+
     /* Add the Object and get its handle */
     Status = ObInsertObject(DriverObject,
                             NULL,
@@ -1729,10 +1786,10 @@ IoCreateDriver (
                             0,
                             NULL,
                             &hDriver);
-    
+
     /* Return on Failure */
     if (!NT_SUCCESS(Status)) return Status;
-    
+
     /* Now reference it */
     Status = ObReferenceObjectByHandle(hDriver,
                                        0,
@@ -1741,16 +1798,16 @@ IoCreateDriver (
                                        (PVOID*)&DriverObject,
                                        NULL);
     ZwClose(hDriver);
-    
+
     /* Finally, call its init function */
     Status = (*InitializationFunction)(DriverObject, NULL);
-    
+
     if (!NT_SUCCESS(Status)) {
         /* If it didn't work, then kill the object */
         ObMakeTemporaryObject(DriverObject);
         ObDereferenceObject(DriverObject);
     }
-    
+
     /* Return the Status */
     return Status;
 }
@@ -1777,7 +1834,7 @@ IoDeleteDriver (
  * Parameters
  *    DriverServiceName
  *       Name of the service to load (registry key).
- *             
+ *
  * Return Value
  *    Status
  *
@@ -1799,9 +1856,9 @@ NtLoadDriver(IN PUNICODE_STRING DriverServiceName)
    PMODULE_OBJECT ModuleObject;
    PDRIVER_OBJECT DriverObject;
    WCHAR *cur;
-   
+
    PAGED_CODE();
-   
+
    PreviousMode = KeGetPreviousMode();
 
    /*
@@ -1957,7 +2014,8 @@ NtLoadDriver(IN PUNICODE_STRING DriverServiceName)
    }
 
    IopInitializeDevice(DeviceNode, DriverObject);
-   
+   Status = IopStartDevice(DeviceNode);
+
 ReleaseCapturedString:
    RtlReleaseCapturedUnicodeString(&CapturedDriverServiceName,
                                    PreviousMode,
@@ -1974,7 +2032,7 @@ ReleaseCapturedString:
  * Parameters
  *    DriverServiceName
  *       Name of the service to unload (registry key).
- *             
+ *
  * Return Value
  *    Status
  *
@@ -2010,7 +2068,7 @@ IoRegisterDriverReinitialization(
    ReinitItem->DriverObject = DriverObject;
    ReinitItem->ReinitRoutine = ReinitRoutine;
    ReinitItem->Context = Context;
-   
+
    DriverObject->Flags |= DRVO_REINIT_REGISTERED;
 
    ExInterlockedInsertTailList(
@@ -2039,7 +2097,7 @@ IoRegisterBootDriverReinitialization(
    ReinitItem->DriverObject = DriverObject;
    ReinitItem->ReinitRoutine = DriverReinitializationRoutine;
    ReinitItem->Context = Context;
-   
+
    DriverObject->Flags |= DRVO_BOOTREINIT_REGISTERED;
 
    ExInterlockedInsertTailList(
@@ -2074,9 +2132,9 @@ IoAllocateDriverObjectExtension(
 
    if (NewDriverExtension == NULL)
    {
-      return STATUS_INSUFFICIENT_RESOURCES;             
+      return STATUS_INSUFFICIENT_RESOURCES;
    }
-   
+
    OldIrql = KeRaiseIrqlToDpcLevel();
 
    NewDriverExtension->Link = DriverObject->DriverSection;
@@ -2100,7 +2158,7 @@ IoAllocateDriverObjectExtension(
 
    *DriverObjectExtension = &NewDriverExtension->Extension;
 
-   return STATUS_SUCCESS;      
+   return STATUS_SUCCESS;
 }
 
 /*