From 5095fd3746ed8a9aa88cc59c94f0dde916af58e6 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Tue, 9 Feb 2010 22:54:02 +0000 Subject: [PATCH] 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 --- reactos/dll/win32/devmgr/advprop.c | 3 +- reactos/dll/win32/devmgr/hwpage.c | 3 +- reactos/dll/win32/devmgr/misc.c | 125 +++++++++++++++++++---------- reactos/dll/win32/devmgr/precomp.h | 3 +- reactos/media/inf/msmouse.inf | Bin 18914 -> 19248 bytes 5 files changed, 87 insertions(+), 47 deletions(-) diff --git a/reactos/dll/win32/devmgr/advprop.c b/reactos/dll/win32/devmgr/advprop.c index eadd5218269..f3f69553306 100644 --- a/reactos/dll/win32/devmgr/advprop.c +++ b/reactos/dll/win32/devmgr/advprop.c @@ -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]))) diff --git a/reactos/dll/win32/devmgr/hwpage.c b/reactos/dll/win32/devmgr/hwpage.c index 190c22048ac..0b26bd67866 100644 --- a/reactos/dll/win32/devmgr/hwpage.c +++ b/reactos/dll/win32/devmgr/hwpage.c @@ -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])) && diff --git a/reactos/dll/win32/devmgr/misc.c b/reactos/dll/win32/devmgr/misc.c index f6549c70188..4e8c2330a3b 100644 --- a/reactos/dll/win32/devmgr/misc.c +++ b/reactos/dll/win32/devmgr/misc.c @@ -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; } } diff --git a/reactos/dll/win32/devmgr/precomp.h b/reactos/dll/win32/devmgr/precomp.h index 30111113a3b..1094d57eea8 100644 --- a/reactos/dll/win32/devmgr/precomp.h +++ b/reactos/dll/win32/devmgr/precomp.h @@ -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); diff --git a/reactos/media/inf/msmouse.inf b/reactos/media/inf/msmouse.inf index 94f5e15ffb1f9cae19b5ad5f5086fd564b0f7142..a1beeac90c767a24fe1737cda68742687d8b6224 100644 GIT binary patch delta 346 zcmaDfnQ_B3#tr{O>pd8}8G;ye7!<(RhasOKnIVy(gdr2i%46^Z;xr(uh#?nA)Ssb@ zAr&ZA1XPs*WPx-WfJs#bbQ93ksxt60aDlNkgD!*avdG%8(9(sX)sWfKJE*k|jV#Dlh~v1T*L}7y((iKz=DhF;I;HPzT5ZC7aJn$#Xgr vYfUQHV2~xnK*Ljkp^^=x!PZS~R2Ah<1X^1R6wLrTr+D&NDdWu&DyLKdg~LUE delta 32 qcmV+*0N?+xmI30E0kHlRvvd~N1e3fi8nezD{s@z_8!EGACCVlHhYpJX -- 2.17.1