Send the right LocaleId to device stack when querying the device
description.
Don't erase device description stored by setupapi during next reboot
Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c
_____
Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c
--- trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-10-11 03:23:01 UTC (rev
18406)
+++ trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-10-11 13:35:07 UTC (rev
18407)
@@ -1475,6 +1475,8 @@
PWSTR Ptr;
USHORT Length;
USHORT TotalLength;
+ ULONG RequiredLength;
+ LCID LocaleId;
HANDLE InstanceKey = NULL;
UNICODE_STRING ValueName;
UNICODE_STRING ParentIdPrefix = { 0 };
@@ -1508,6 +1510,14 @@
return STATUS_UNSUCCESSFUL;
}
+ /* Get Locale ID */
+ Status = ZwQueryDefaultLocale(FALSE, &LocaleId);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("ZwQueryDefaultLocale() failed with status 0x%lx\n",
Status);
+ return Status;
+ }
+
/*
* FIXME: For critical errors, cleanup and disable device, but
always
* return STATUS_SUCCESS.
@@ -1735,7 +1745,7 @@
DPRINT("Sending IRP_MN_QUERY_DEVICE_TEXT.DeviceTextDescription to
device stack\n");
Stack.Parameters.QueryDeviceText.DeviceTextType =
DeviceTextDescription;
- Stack.Parameters.QueryDeviceText.LocaleId = 0; /* FIXME */
+ Stack.Parameters.QueryDeviceText.LocaleId = LocaleId;
Status = IopInitiatePnpIrp(
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
@@ -1743,18 +1753,22 @@
&Stack);
if (NT_SUCCESS(Status))
{
- RtlInitUnicodeString(&ValueName,
- L"DeviceDesc");
- Status = ZwSetValueKey(InstanceKey,
- &ValueName,
- 0,
- REG_SZ,
- (PVOID)IoStatusBlock.Information,
- (wcslen((PWSTR)IoStatusBlock.Information) +
1) * sizeof(WCHAR));
+ RtlInitUnicodeString(&ValueName, L"DeviceDesc");
+ if (ZwQueryValueKey(InstanceKey, &ValueName,
KeyValueBasicInformation, NULL, 0, &RequiredLength) ==
STATUS_OBJECT_NAME_NOT_FOUND)
+ {
+ /* This key is overriden when a driver is installed. Don't
write the
+ * new description if another one already exists */
+ Status = ZwSetValueKey(InstanceKey,
+ &ValueName,
+ 0,
+ REG_SZ,
+ (PVOID)IoStatusBlock.Information,
+
(wcslen((PWSTR)IoStatusBlock.Information) + 1) * sizeof(WCHAR));
+ }
if (!NT_SUCCESS(Status))
- {
- DPRINT1("ZwSetValueKey() failed (Status %lx)\n", Status);
- }
+ {
+ DPRINT1("ZwSetValueKey() failed (Status 0x%lx)\n", Status);
+ }
}
else
{
@@ -1764,7 +1778,7 @@
DPRINT("Sending IRP_MN_QUERY_DEVICE_TEXT.DeviceTextLocation to
device stack\n");
Stack.Parameters.QueryDeviceText.DeviceTextType =
DeviceTextLocationInformation;
- Stack.Parameters.QueryDeviceText.LocaleId = 0; // FIXME
+ Stack.Parameters.QueryDeviceText.LocaleId = LocaleId;
Status = IopInitiatePnpIrp(
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
Show replies by date