-/* $Id: device.c,v 1.72 2004/08/12 16:43:12 ion Exp $
+/* $Id: device.c,v 1.73 2004/08/14 22:47:08 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
IO_STATUS_BLOCK IoStatusBlock;
IO_STACK_LOCATION Stack;
PDEVICE_OBJECT Fdo;
+ PCM_RESOURCE_LIST ResourceList = NULL;
NTSTATUS Status;
if (DriverObject->DriverExtension->AddDevice)
IopDeviceNodeSetFlag(DeviceNode, DNF_ADDED);
+ /* Query resource list from PDO */
+ Status = IopInitiatePnpIrp(
+ DeviceNode->Pdo,
+ &IoStatusBlock,
+ IRP_MN_QUERY_RESOURCES,
+ &Stack);
+
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("IopInitiatePnpIrp() failed\n");
+ ObDereferenceObject(Fdo);
+ return Status;
+ }
+ ResourceList = (PCM_RESOURCE_LIST)IoStatusBlock.Information;
+
DPRINT("Sending IRP_MN_START_DEVICE to driver\n");
- /* FIXME: Put some resources in the IRP for the device */
- Stack.Parameters.StartDevice.AllocatedResources = NULL;
+ Stack.Parameters.StartDevice.AllocatedResources = ResourceList;
+ /* FIXME: Translate the resource list */
Stack.Parameters.StartDevice.AllocatedResourcesTranslated = NULL;
Status = IopInitiatePnpIrp(
if (!NT_SUCCESS(Status))
{
DPRINT("IopInitiatePnpIrp() failed\n");
+ if (ResourceList != NULL)
+ ExFreePool(ResourceList);
ObDereferenceObject(Fdo);
return Status;
}
if (!NT_SUCCESS(Status))
{
+ if (ResourceList != NULL)
+ ExFreePool(ResourceList);
ObDereferenceObject(Fdo);
return Status;
}
}
#endif /* ACPI */
}
+
+ if (ResourceList != NULL)
+ ExFreePool(ResourceList);
+
ObDereferenceObject(Fdo);
}