[NTOSKRNL]
authorCameron Gutman <aicommander@gmail.com>
Thu, 19 Aug 2010 23:26:44 +0000 (23:26 +0000)
committerCameron Gutman <aicommander@gmail.com>
Thu, 19 Aug 2010 23:26:44 +0000 (23:26 +0000)
- Add a special case to IopInitializeDevice for raw devices
- Call IopInitializeDevice to set up our device node and ready it to start
- Fixes assertions hit by ACPI and PCIX

svn path=/trunk/; revision=48570

reactos/ntoskrnl/io/pnpmgr/pnpmgr.c

index e0ad64b..5721591 100644 (file)
@@ -64,6 +64,13 @@ IopInitializeDevice(PDEVICE_NODE DeviceNode,
 {
    PDEVICE_OBJECT Fdo;
    NTSTATUS Status;
+    
+   if (!DriverObject)
+   {
+      /* Special case for bus driven devices */
+      DeviceNode->Flags |= DNF_ADDED;
+      return STATUS_SUCCESS;
+   }
 
    if (!DriverObject->DriverExtension->AddDevice)
    {
@@ -1897,11 +1904,15 @@ IopActionInitChildServices(PDEVICE_NODE DeviceNode,
    {
       /* We don't need to worry about loading the driver because we're
        * being driven in raw mode so our parent must be loaded to get here */
-      Status = IopStartDevice(DeviceNode);
-      if (!NT_SUCCESS(Status))
+      Status = IopInitializeDevice(DeviceNode, NULL);
+      if (NT_SUCCESS(Status))
       {
-          DPRINT1("IopStartDevice(%wZ) failed with status 0x%08x\n",
-                  &DeviceNode->InstancePath, Status);
+          Status = IopStartDevice(DeviceNode);
+          if (!NT_SUCCESS(Status))
+          {
+              DPRINT1("IopStartDevice(%wZ) failed with status 0x%08x\n",
+                      &DeviceNode->InstancePath, Status);
+          }
       }
    }
    else