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:
Eric Kohl 2010-02-09 22:54:02 +00:00
parent 29200c4aa6
commit 5095fd3746
5 changed files with 87 additions and 47 deletions

View file

@ -1405,7 +1405,8 @@ GetParentNode:
} }
/* set the device location edit control text */ /* set the device location edit control text */
if (GetDeviceLocationString(DeviceInfoData->DevInst, if (GetDeviceLocationString(DeviceInfoSet,
DeviceInfoData,
dap->ParentDevInst, dap->ParentDevInst,
dap->szTemp, dap->szTemp,
sizeof(dap->szTemp) / sizeof(dap->szTemp[0]))) sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))

View file

@ -181,7 +181,8 @@ UpdateControlStates(IN PHARDWARE_PAGE_DATA hpd)
} }
/* get the location string */ /* get the location string */
if (GetDeviceLocationString(HwDevInfo->DevInfoData.DevInst, if (GetDeviceLocationString(HwDevInfo->ClassDevInfo->hDevInfo,
&HwDevInfo->DevInfoData,
0, 0,
szBuffer, szBuffer,
sizeof(szBuffer) / sizeof(szBuffer[0])) && sizeof(szBuffer) / sizeof(szBuffer[0])) &&

View file

@ -317,7 +317,8 @@ GetDeviceManufacturerString(IN HDEVINFO DeviceInfoSet,
BOOL BOOL
GetDeviceLocationString(IN DEVINST dnDevInst OPTIONAL, GetDeviceLocationString(IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
IN DEVINST dnParentDevInst OPTIONAL, IN DEVINST dnParentDevInst OPTIONAL,
OUT LPWSTR szBuffer, OUT LPWSTR szBuffer,
IN DWORD BufferSize) IN DWORD BufferSize)
@ -326,10 +327,45 @@ GetDeviceLocationString(IN DEVINST dnDevInst OPTIONAL,
ULONG DataSize; ULONG DataSize;
CONFIGRET cRet; CONFIGRET cRet;
LPWSTR szFormatted; LPWSTR szFormatted;
HKEY hKey;
DWORD dwSize, dwType;
BOOL Ret = FALSE; BOOL Ret = FALSE;
DataSize = BufferSize * sizeof(WCHAR); DataSize = BufferSize * sizeof(WCHAR);
szBuffer[0] = L'\0'; szBuffer[0] = L'\0';
hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
DeviceInfoData,
DICS_FLAG_GLOBAL,
0,
DIREG_DRV,
KEY_QUERY_VALUE);
if (hKey != INVALID_HANDLE_VALUE)
{
/* 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')
{
Ret = TRUE;
}
else
{
szBuffer[0] = L'\0';
}
RegCloseKey(hKey);
}
if (!Ret)
{
if (dnParentDevInst != 0) if (dnParentDevInst != 0)
{ {
/* query the parent node name */ /* query the parent node name */
@ -353,9 +389,9 @@ GetDeviceLocationString(IN DEVINST dnDevInst OPTIONAL,
Ret = TRUE; Ret = TRUE;
} }
} }
else if (dnDevInst != 0) else if (DeviceInfoData->DevInst != 0)
{ {
cRet = CM_Get_DevNode_Registry_Property(dnDevInst, cRet = CM_Get_DevNode_Registry_Property(DeviceInfoData->DevInst,
CM_DRP_LOCATION_INFORMATION, CM_DRP_LOCATION_INFORMATION,
&RegDataType, &RegDataType,
szBuffer, szBuffer,
@ -390,6 +426,7 @@ GetDeviceLocationString(IN DEVINST dnDevInst OPTIONAL,
Ret = FALSE; Ret = FALSE;
} }
} }
}
if (!Ret && if (!Ret &&
LoadString(hDllInstance, LoadString(hDllInstance,

View file

@ -70,7 +70,8 @@ GetDeviceManufacturerString(IN HDEVINFO DeviceInfoSet,
IN DWORD BufferSize); IN DWORD BufferSize);
BOOL BOOL
GetDeviceLocationString(IN DEVINST dnDevInst OPTIONAL, GetDeviceLocationString(IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
IN DEVINST dnParentDevInst OPTIONAL, IN DEVINST dnParentDevInst OPTIONAL,
OUT LPWSTR szBuffer, OUT LPWSTR szBuffer,
IN DWORD BufferSize); IN DWORD BufferSize);

Binary file not shown.