Author: cgutman Date: Thu Aug 19 23:26:44 2010 New Revision: 48570
URL: http://svn.reactos.org/svn/reactos?rev=48570&view=rev Log: [NTOSKRNL] - 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
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c... ============================================================================== --- trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c [iso-8859-1] Thu Aug 19 23:26:44 2010 @@ -64,6 +64,13 @@ { 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 @@ { /* 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)) - { - DPRINT1("IopStartDevice(%wZ) failed with status 0x%08x\n", - &DeviceNode->InstancePath, Status); + Status = IopInitializeDevice(DeviceNode, NULL); + if (NT_SUCCESS(Status)) + { + Status = IopStartDevice(DeviceNode); + if (!NT_SUCCESS(Status)) + { + DPRINT1("IopStartDevice(%wZ) failed with status 0x%08x\n", + &DeviceNode->InstancePath, Status); + } } } else