Fix the case when IRP_MN_QUERY_DEVICE_TEXT returns nothing Set DN_DRIVER_LOADED and DN_STARTED flags Modified: trunk/reactos/ntoskrnl/io/device.c Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c Modified: trunk/reactos/ntoskrnl/io/pnproot.c _____
Modified: trunk/reactos/ntoskrnl/io/device.c --- trunk/reactos/ntoskrnl/io/device.c 2005-12-12 09:06:40 UTC (rev 20102) +++ trunk/reactos/ntoskrnl/io/device.c 2005-12-12 16:44:09 UTC (rev 20103) @@ -163,7 +163,10 @@
}
ObDereferenceObject(Fdo); - + + if (NT_SUCCESS(Status)) + DeviceNode->Flags |= DN_STARTED; + return Status; }
_____
Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c --- trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-12-12 09:06:40 UTC (rev 20102) +++ trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-12-12 16:44:09 UTC (rev 20103) @@ -1753,7 +1753,7 @@
RtlInitUnicodeString(&ValueName, L"DeviceDesc"); if (ZwQueryValueKey(InstanceKey, &ValueName, KeyValueBasicInformation, NULL, 0, &RequiredLength) == STATUS_OBJECT_NAME_NOT_FOUND) { - if (NT_SUCCESS(IoStatusBlock.Status) && + if (NT_SUCCESS(Status) && IoStatusBlock.Information && (*(PWSTR)IoStatusBlock.Information != 0)) { @@ -1768,16 +1768,15 @@ } else { - UNICODE_STRING DeviceDesc; - RtlInitUnicodeString(&DeviceDesc, L"Unknown Device"); - DPRINT("Driver didn't return DeviceDesc (Status %x), so place unknown device there\n", Status); + UNICODE_STRING DeviceDesc = RTL_CONSTANT_STRING(L"Unknown device"); + DPRINT("Driver didn't return DeviceDesc (Status 0x%08lx), so place unknown device there\n", Status);
Status = ZwSetValueKey(InstanceKey, &ValueName, 0, REG_SZ, - &DeviceDesc, - (wcslen((PWSTR)&DeviceDesc) + 1) * sizeof(WCHAR)); + DeviceDesc.Buffer, + DeviceDesc.MaximumLength);
if (!NT_SUCCESS(Status)) { @@ -2014,6 +2013,7 @@ * device is started */ DPRINT("%wZ is using NULL driver\n", &DeviceNode->InstancePath); IopDeviceNodeSetFlag(DeviceNode, DNF_STARTED); + DeviceNode->Flags |= DN_STARTED; } return STATUS_SUCCESS; } @@ -2095,8 +2095,11 @@ if (NT_SUCCESS(Status) || Status == STATUS_IMAGE_ALREADY_LOADED) { if (Status != STATUS_IMAGE_ALREADY_LOADED) + { + DeviceNode->Flags |= DN_DRIVER_LOADED; Status = IopInitializeDriverModule(DeviceNode, ModuleObject, &DeviceNode->ServiceName, FALSE, &DriverObject); + } else { /* get existing DriverObject pointer */ _____
Modified: trunk/reactos/ntoskrnl/io/pnproot.c --- trunk/reactos/ntoskrnl/io/pnproot.c 2005-12-12 09:06:40 UTC (rev 20102) +++ trunk/reactos/ntoskrnl/io/pnproot.c 2005-12-12 16:44:09 UTC (rev 20103) @@ -579,7 +579,7 @@
if (!NT_SUCCESS(Status)) { - /* FIXME: */ + Device->DeviceDescription.Buffer = NULL; }
DPRINT("Got device description: %S\n", DeviceDesc->Buffer); @@ -1184,8 +1184,8 @@ { DPRINT("Called\n");
- DriverObject->MajorFunction[IRP_MJ_PNP] = (PDRIVER_DISPATCH) PnpRootPnpControl; - DriverObject->MajorFunction[IRP_MJ_POWER] = (PDRIVER_DISPATCH) PnpRootPowerControl; + DriverObject->MajorFunction[IRP_MJ_PNP] = PnpRootPnpControl; + DriverObject->MajorFunction[IRP_MJ_POWER] = PnpRootPowerControl; DriverObject->DriverExtension->AddDevice = PnpRootAddDevice;
return STATUS_SUCCESS;