Author: cgutman
Date: Mon Aug 22 18:40:40 2011
New Revision: 53382
URL:
http://svn.reactos.org/svn/reactos?rev=53382&view=rev
Log:
[PNPMGR]
- Fix enumeration of existing root devices after a reboot
Modified:
trunk/reactos/ntoskrnl/io/pnpmgr/pnproot.c
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnproot.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/pnproot…
==============================================================================
--- trunk/reactos/ntoskrnl/io/pnpmgr/pnproot.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/pnpmgr/pnproot.c [iso-8859-1] Mon Aug 22 18:40:40 2011
@@ -381,7 +381,7 @@
UNICODE_STRING KeyName = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\"
REGSTR_PATH_SYSTEMENUM L"\\" REGSTR_KEY_ROOTENUM);
UNICODE_STRING SubKeyName;
WCHAR DevicePath[MAX_PATH + 1];
- RTL_QUERY_REGISTRY_TABLE QueryTable[5];
+ RTL_QUERY_REGISTRY_TABLE QueryTable[4];
PPNPROOT_DEVICE Device = NULL;
HANDLE KeyHandle = INVALID_HANDLE_VALUE;
HANDLE SubKeyHandle = INVALID_HANDLE_VALUE;
@@ -507,14 +507,14 @@
/* Fill device ID and instance ID */
if (!RtlCreateUnicodeString(&Device->DeviceID, DevicePath))
{
- DPRINT("RtlCreateUnicodeString() failed\n");
+ DPRINT1("RtlCreateUnicodeString() failed\n");
Status = STATUS_NO_MEMORY;
goto cleanup;
}
if (!RtlCreateUnicodeString(&Device->InstanceID,
SubKeyInfo->Name))
{
- DPRINT("RtlCreateUnicodeString() failed\n");
+ DPRINT1("RtlCreateUnicodeString() failed\n");
Status = STATUS_NO_MEMORY;
goto cleanup;
}
@@ -523,38 +523,45 @@
Status = IopOpenRegistryKeyEx(&DeviceKeyHandle, SubKeyHandle,
&Device->InstanceID, KEY_READ);
if (!NT_SUCCESS(Status))
{
- DPRINT("IopOpenRegistryKeyEx() failed with status
0x%08lx\n", Status);
+ DPRINT1("IopOpenRegistryKeyEx() failed with status
0x%08lx\n", Status);
break;
}
- /* Fill other informations */
+ /* Fill information from the device instance key */
+ RtlZeroMemory(QueryTable, sizeof(QueryTable));
+ QueryTable[0].QueryRoutine = QueryStringCallback;
+ QueryTable[0].Name = L"DeviceDesc";
+ QueryTable[0].EntryContext = &Device->DeviceDescription;
+
+ RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,
+ (PCWSTR)DeviceKeyHandle,
+ QueryTable,
+ NULL,
+ NULL);
+
+ /* Fill information from the LogConf subkey */
Buffer1.Data = (PVOID *)&Device->ResourceRequirementsList;
Buffer1.Length = NULL;
Buffer2.Data = (PVOID *)&Device->ResourceList;
Buffer2.Length = &Device->ResourceListSize;
RtlZeroMemory(QueryTable, sizeof(QueryTable));
- QueryTable[0].QueryRoutine = QueryStringCallback;
- QueryTable[0].Name = L"DeviceDesc";
- QueryTable[0].EntryContext = &Device->DeviceDescription;
- QueryTable[1].Flags = RTL_QUERY_REGISTRY_SUBKEY;
- QueryTable[1].Name = L"LogConf";
+ QueryTable[0].Flags = RTL_QUERY_REGISTRY_SUBKEY;
+ QueryTable[0].Name = L"LogConf";
+ QueryTable[1].QueryRoutine = QueryBinaryValueCallback;
+ QueryTable[1].Name = L"BasicConfigVector";
+ QueryTable[1].EntryContext = &Buffer1;
QueryTable[2].QueryRoutine = QueryBinaryValueCallback;
- QueryTable[2].Name = L"BasicConfigVector";
- QueryTable[2].EntryContext = &Buffer1;
- QueryTable[3].QueryRoutine = QueryBinaryValueCallback;
- QueryTable[3].Name = L"BootConfig";
- QueryTable[3].EntryContext = &Buffer2;
-
- Status = RtlQueryRegistryValues(
- RTL_REGISTRY_HANDLE,
- (PCWSTR)DeviceKeyHandle,
- QueryTable,
- NULL,
- NULL);
- if (!NT_SUCCESS(Status))
+ QueryTable[2].Name = L"BootConfig";
+ QueryTable[2].EntryContext = &Buffer2;
+
+ if (!NT_SUCCESS(RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,
+ (PCWSTR)DeviceKeyHandle,
+ QueryTable,
+ NULL,
+ NULL)))
{
- DPRINT("RtlQueryRegistryValues() failed with status
0x%08lx\n", Status);
- break;
+ /* Non-fatal error */
+ DPRINT1("Failed to read the LogConf key for %S\\%S\n",
DevicePath, SubKeyInfo->Name);
}
ZwClose(DeviceKeyHandle);