mirror of
https://github.com/reactos/reactos.git
synced 2024-07-06 12:45:16 +00:00
Implement device location information override support and add the location override value for PS/2 mice. PS/2 keyboards be added next.
Please translate the location override string. svn path=/trunk/; revision=45541
This commit is contained in:
parent
29200c4aa6
commit
5095fd3746
|
@ -1405,7 +1405,8 @@ GetParentNode:
|
|||
}
|
||||
|
||||
/* set the device location edit control text */
|
||||
if (GetDeviceLocationString(DeviceInfoData->DevInst,
|
||||
if (GetDeviceLocationString(DeviceInfoSet,
|
||||
DeviceInfoData,
|
||||
dap->ParentDevInst,
|
||||
dap->szTemp,
|
||||
sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
|
||||
|
|
|
@ -181,7 +181,8 @@ UpdateControlStates(IN PHARDWARE_PAGE_DATA hpd)
|
|||
}
|
||||
|
||||
/* get the location string */
|
||||
if (GetDeviceLocationString(HwDevInfo->DevInfoData.DevInst,
|
||||
if (GetDeviceLocationString(HwDevInfo->ClassDevInfo->hDevInfo,
|
||||
&HwDevInfo->DevInfoData,
|
||||
0,
|
||||
szBuffer,
|
||||
sizeof(szBuffer) / sizeof(szBuffer[0])) &&
|
||||
|
|
|
@ -317,7 +317,8 @@ GetDeviceManufacturerString(IN HDEVINFO DeviceInfoSet,
|
|||
|
||||
|
||||
BOOL
|
||||
GetDeviceLocationString(IN DEVINST dnDevInst OPTIONAL,
|
||||
GetDeviceLocationString(IN HDEVINFO DeviceInfoSet,
|
||||
IN PSP_DEVINFO_DATA DeviceInfoData,
|
||||
IN DEVINST dnParentDevInst OPTIONAL,
|
||||
OUT LPWSTR szBuffer,
|
||||
IN DWORD BufferSize)
|
||||
|
@ -326,68 +327,104 @@ GetDeviceLocationString(IN DEVINST dnDevInst OPTIONAL,
|
|||
ULONG DataSize;
|
||||
CONFIGRET cRet;
|
||||
LPWSTR szFormatted;
|
||||
HKEY hKey;
|
||||
DWORD dwSize, dwType;
|
||||
BOOL Ret = FALSE;
|
||||
|
||||
DataSize = BufferSize * sizeof(WCHAR);
|
||||
szBuffer[0] = L'\0';
|
||||
if (dnParentDevInst != 0)
|
||||
|
||||
hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
|
||||
DeviceInfoData,
|
||||
DICS_FLAG_GLOBAL,
|
||||
0,
|
||||
DIREG_DRV,
|
||||
KEY_QUERY_VALUE);
|
||||
if (hKey != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
/* query the parent node name */
|
||||
if (CM_Get_DevNode_Registry_Property(dnParentDevInst,
|
||||
CM_DRP_DEVICEDESC,
|
||||
&RegDataType,
|
||||
szBuffer,
|
||||
&DataSize,
|
||||
0) == CR_SUCCESS &&
|
||||
RegDataType == REG_SZ &&
|
||||
LoadAndFormatString(hDllInstance,
|
||||
IDS_DEVONPARENT,
|
||||
&szFormatted,
|
||||
szBuffer) != 0)
|
||||
/* query the LocationInformationOverride value */
|
||||
dwSize = BufferSize;
|
||||
if (RegQueryValueEx(hKey,
|
||||
L"LocationInformationOverride",
|
||||
NULL,
|
||||
&dwType,
|
||||
(LPBYTE)szBuffer,
|
||||
&dwSize) == ERROR_SUCCESS &&
|
||||
dwType == REG_SZ &&
|
||||
szBuffer[0] != L'\0')
|
||||
{
|
||||
wcsncpy(szBuffer,
|
||||
szFormatted,
|
||||
BufferSize - 1);
|
||||
szBuffer[BufferSize - 1] = L'\0';
|
||||
LocalFree((HLOCAL)szFormatted);
|
||||
Ret = TRUE;
|
||||
}
|
||||
}
|
||||
else if (dnDevInst != 0)
|
||||
{
|
||||
cRet = CM_Get_DevNode_Registry_Property(dnDevInst,
|
||||
CM_DRP_LOCATION_INFORMATION,
|
||||
&RegDataType,
|
||||
szBuffer,
|
||||
&DataSize,
|
||||
0);
|
||||
if (cRet == CR_SUCCESS && RegDataType == REG_SZ)
|
||||
else
|
||||
{
|
||||
/* FIXME - check string for NULL termination! */
|
||||
Ret = TRUE;
|
||||
szBuffer[0] = L'\0';
|
||||
}
|
||||
|
||||
if (Ret && szBuffer[0] >= L'0' && szBuffer[0] <= L'9')
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
|
||||
if (!Ret)
|
||||
{
|
||||
if (dnParentDevInst != 0)
|
||||
{
|
||||
/* convert the string to an integer value and create a
|
||||
formatted string */
|
||||
ULONG ulLocation = (ULONG)wcstoul(szBuffer,
|
||||
NULL,
|
||||
10);
|
||||
if (LoadAndFormatString(hDllInstance,
|
||||
IDS_LOCATIONSTR,
|
||||
&szFormatted,
|
||||
ulLocation,
|
||||
szBuffer) != 0)
|
||||
/* query the parent node name */
|
||||
if (CM_Get_DevNode_Registry_Property(dnParentDevInst,
|
||||
CM_DRP_DEVICEDESC,
|
||||
&RegDataType,
|
||||
szBuffer,
|
||||
&DataSize,
|
||||
0) == CR_SUCCESS &&
|
||||
RegDataType == REG_SZ &&
|
||||
LoadAndFormatString(hDllInstance,
|
||||
IDS_DEVONPARENT,
|
||||
&szFormatted,
|
||||
szBuffer) != 0)
|
||||
{
|
||||
wcsncpy(szBuffer,
|
||||
szFormatted,
|
||||
BufferSize - 1);
|
||||
szBuffer[BufferSize - 1] = L'\0';
|
||||
LocalFree((HLOCAL)szFormatted);
|
||||
Ret = TRUE;
|
||||
}
|
||||
}
|
||||
else if (DeviceInfoData->DevInst != 0)
|
||||
{
|
||||
cRet = CM_Get_DevNode_Registry_Property(DeviceInfoData->DevInst,
|
||||
CM_DRP_LOCATION_INFORMATION,
|
||||
&RegDataType,
|
||||
szBuffer,
|
||||
&DataSize,
|
||||
0);
|
||||
if (cRet == CR_SUCCESS && RegDataType == REG_SZ)
|
||||
{
|
||||
/* FIXME - check string for NULL termination! */
|
||||
Ret = TRUE;
|
||||
}
|
||||
|
||||
if (Ret && szBuffer[0] >= L'0' && szBuffer[0] <= L'9')
|
||||
{
|
||||
/* convert the string to an integer value and create a
|
||||
formatted string */
|
||||
ULONG ulLocation = (ULONG)wcstoul(szBuffer,
|
||||
NULL,
|
||||
10);
|
||||
if (LoadAndFormatString(hDllInstance,
|
||||
IDS_LOCATIONSTR,
|
||||
&szFormatted,
|
||||
ulLocation,
|
||||
szBuffer) != 0)
|
||||
{
|
||||
wcsncpy(szBuffer,
|
||||
szFormatted,
|
||||
BufferSize - 1);
|
||||
szBuffer[BufferSize - 1] = L'\0';
|
||||
LocalFree((HLOCAL)szFormatted);
|
||||
}
|
||||
else
|
||||
Ret = FALSE;
|
||||
}
|
||||
else
|
||||
Ret = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -70,7 +70,8 @@ GetDeviceManufacturerString(IN HDEVINFO DeviceInfoSet,
|
|||
IN DWORD BufferSize);
|
||||
|
||||
BOOL
|
||||
GetDeviceLocationString(IN DEVINST dnDevInst OPTIONAL,
|
||||
GetDeviceLocationString(IN HDEVINFO DeviceInfoSet,
|
||||
IN PSP_DEVINFO_DATA DeviceInfoData,
|
||||
IN DEVINST dnParentDevInst OPTIONAL,
|
||||
OUT LPWSTR szBuffer,
|
||||
IN DWORD BufferSize);
|
||||
|
|
Binary file not shown.
Loading…
Reference in a new issue