From bc8462e40a29db37a5b0cbed83c5534d20e35ed3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herv=C3=A9=20Poussineau?= Date: Thu, 24 Nov 2005 09:18:16 +0000 Subject: [PATCH] Detect devices using the NULL driver, and set the STARTED flag svn path=/trunk/; revision=19520 --- reactos/ntoskrnl/io/pnpmgr.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/io/pnpmgr.c b/reactos/ntoskrnl/io/pnpmgr.c index 7feb2d61810..064eb7f83c4 100644 --- a/reactos/ntoskrnl/io/pnpmgr.c +++ b/reactos/ntoskrnl/io/pnpmgr.c @@ -1922,9 +1922,11 @@ IopActionConfigureChildServices( PDEVICE_NODE DeviceNode, PVOID Context) { - RTL_QUERY_REGISTRY_TABLE QueryTable[2]; + RTL_QUERY_REGISTRY_TABLE QueryTable[3]; PDEVICE_NODE ParentDeviceNode; PUNICODE_STRING Service; + UNICODE_STRING ClassGUID; + UNICODE_STRING NullString = RTL_CONSTANT_STRING(L""); NTSTATUS Status; DPRINT("IopActionConfigureChildServices(%p, %p)\n", DeviceNode, Context); @@ -1969,11 +1971,19 @@ IopActionConfigureChildServices( RtlZeroMemory(QueryTable, sizeof(QueryTable)); RtlInitUnicodeString(Service, NULL); + RtlInitUnicodeString(&ClassGUID, NULL); QueryTable[0].Name = L"Service"; QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT; QueryTable[0].EntryContext = Service; + QueryTable[1].Name = L"ClassGUID"; + QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT; + QueryTable[1].EntryContext = &ClassGUID; + QueryTable[1].DefaultType = REG_SZ; + QueryTable[1].DefaultData = &NullString; + QueryTable[1].DefaultLength = 0; + RtlAppendUnicodeToString(&RegKey, L"\\Registry\\Machine\\System\\CurrentControlSet\\Enum\\"); RtlAppendUnicodeStringToString(&RegKey, &DeviceNode->InstancePath); @@ -1993,6 +2003,15 @@ IopActionConfigureChildServices( if (Service->Buffer == NULL) { IopDeviceNodeSetFlag(DeviceNode, DNF_DISABLED); + + if (ClassGUID.Length != 0) + { + /* Device has a ClassGUID value, but no Service value. + * Suppose it is using the NULL driver, so state the + * device is started */ + DPRINT("%wZ is using NULL driver\n", &DeviceNode->InstancePath); + IopDeviceNodeSetFlag(DeviceNode, DNF_STARTED); + } return STATUS_SUCCESS; } -- 2.17.1