From: Hervé Poussineau Date: Thu, 24 Nov 2005 09:18:16 +0000 (+0000) Subject: Detect devices using the NULL driver, and set the STARTED flag X-Git-Tag: backups/ros-branch-0_2_9@19949~408 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=bc8462e40a29db37a5b0cbed83c5534d20e35ed3;ds=sidebyside Detect devices using the NULL driver, and set the STARTED flag svn path=/trunk/; revision=19520 --- 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; }