[NTOSKRNL]

- Store the allocated resources for reported devices

svn path=/trunk/; revision=46842
This commit is contained in:
Cameron Gutman 2010-04-11 16:21:29 +00:00
parent 26d1db9190
commit 5d6b19c9a0

View file

@ -266,9 +266,6 @@ IoReportDetectedDevice(IN PDRIVER_OBJECT DriverObject,
/* Write the resource information to the registry */ /* Write the resource information to the registry */
IopSetDeviceInstanceData(InstanceKey, DeviceNode); IopSetDeviceInstanceData(InstanceKey, DeviceNode);
/* Close the instance key handle */
ZwClose(InstanceKey);
/* If the caller didn't get the resources assigned for us, do it now */ /* If the caller didn't get the resources assigned for us, do it now */
if (!ResourceAssigned) if (!ResourceAssigned)
{ {
@ -278,7 +275,19 @@ IoReportDetectedDevice(IN PDRIVER_OBJECT DriverObject,
{ {
Status = IopTranslateDeviceResources(DeviceNode, RequiredLength); Status = IopTranslateDeviceResources(DeviceNode, RequiredLength);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{
Status = IopUpdateResourceMapForPnPDevice(DeviceNode); Status = IopUpdateResourceMapForPnPDevice(DeviceNode);
if (NT_SUCCESS(Status) && DeviceNode->ResourceList)
{
RtlInitUnicodeString(&ValueName, L"AllocConfig");
Status = ZwSetValueKey(InstanceKey,
&ValueName,
0,
REG_RESOURCE_LIST,
DeviceNode->ResourceList,
CM_RESOURCE_LIST_SIZE(DeviceNode->ResourceList));
}
}
} }
IopDeviceNodeClearFlag(DeviceNode, DNF_ASSIGNING_RESOURCES); IopDeviceNodeClearFlag(DeviceNode, DNF_ASSIGNING_RESOURCES);
@ -286,10 +295,14 @@ IoReportDetectedDevice(IN PDRIVER_OBJECT DriverObject,
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT("Assigning resources failed: 0x%x\n", Status); DPRINT("Assigning resources failed: 0x%x\n", Status);
ZwClose(InstanceKey);
return Status; return Status;
} }
} }
/* Close the instance key handle */
ZwClose(InstanceKey);
/* Report the device's enumeration to umpnpmgr */ /* Report the device's enumeration to umpnpmgr */
IopQueueTargetDeviceEvent(&GUID_DEVICE_ENUMERATED, IopQueueTargetDeviceEvent(&GUID_DEVICE_ENUMERATED,
&DeviceNode->InstancePath); &DeviceNode->InstancePath);