From: Thomas Bluemel Date: Fri, 25 Nov 2005 23:36:32 +0000 (+0000) Subject: display the device manufacturer X-Git-Tag: backups/ros-branch-0_2_9@19949~337 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=eb8e907a1fc12148f3e9b0b1a85faff49fb96284 display the device manufacturer svn path=/trunk/; revision=19592 --- diff --git a/reactos/lib/devmgr/hwpage.c b/reactos/lib/devmgr/hwpage.c index 5329d9bac16..fac1f52f69a 100644 --- a/reactos/lib/devmgr/hwpage.c +++ b/reactos/lib/devmgr/hwpage.c @@ -49,6 +49,7 @@ typedef struct _HWCLASSDEVINFO { GUID Guid; HDEVINFO hDevInfo; + INT ImageIndex; INT ItemCount; PHWDEVINFO HwDevInfo; } HWCLASSDEVINFO, *PHWCLASSDEVINFO; @@ -129,98 +130,203 @@ static VOID UpdateControlStates(IN PHARDWARE_PAGE_DATA hpd) { PHWDEVINFO HwDevInfo; + HWND hBtnTroubleShoot, hBtnProperties; + DWORD RegDataType; + + hBtnTroubleShoot = GetDlgItem(hpd->hWnd, + IDC_TROUBLESHOOT); + hBtnProperties = GetDlgItem(hpd->hWnd, + IDC_PROPERTIES); HwDevInfo = (PHWDEVINFO)ListViewGetSelectedItemData(hpd->hWndDevList); if (HwDevInfo != NULL) { - /* FIXME - update static controls and enable buttons */ + /* update static controls */ + WCHAR szBuffer[256]; + LPWSTR szFormatted = NULL; + + if (!SetupDiGetDeviceRegistryProperty(HwDevInfo->ClassDevInfo->hDevInfo, + &HwDevInfo->DevInfoData, + SPDRP_MFG, + &RegDataType, + (PBYTE)szBuffer, + sizeof(szBuffer), + NULL) || + RegDataType != REG_SZ) + { + /* FIXME - check string for NULL termination! */ + szBuffer[0] = L'\0'; + } + if (LoadAndFormatString(hDllInstance, + IDS_MANUFACTURER, + &szFormatted, + szBuffer) != 0) + { + SetDlgItemText(hpd->hWnd, + IDC_MANUFACTURER, + szFormatted); + LocalFree((HLOCAL)szFormatted); + } + + /* FIXME - Display location and status */ } else { - /* FIXME - clear static controls and disable buttons */ + /* clear static controls */ + SetDlgItemText(hpd->hWnd, + IDC_MANUFACTURER, + NULL); + SetDlgItemText(hpd->hWnd, + IDC_LOCATION, + NULL); + SetDlgItemText(hpd->hWnd, + IDC_STATUS, + NULL); + } + + EnableWindow(hBtnTroubleShoot, + HwDevInfo != NULL); + EnableWindow(hBtnTroubleShoot, + hBtnProperties != NULL); +} + +static VOID +FreeDevicesList(IN PHARDWARE_PAGE_DATA hpd) +{ + PHWCLASSDEVINFO ClassDevInfo, LastClassDevInfo; + + ClassDevInfo = hpd->ClassDevInfo; + LastClassDevInfo = ClassDevInfo + hpd->NumberOfGuids; + + /* free the device info set handles */ + while (ClassDevInfo != LastClassDevInfo) + { + if (ClassDevInfo->hDevInfo != INVALID_HANDLE_VALUE) + { + SetupDiDestroyDeviceInfoList(ClassDevInfo->hDevInfo); + } + ClassDevInfo->hDevInfo = NULL; + ClassDevInfo->ItemCount = 0; + ClassDevInfo->ImageIndex = 0; + + if (ClassDevInfo->HwDevInfo != NULL) + { + HeapFree(GetProcessHeap(), + 0, + ClassDevInfo->HwDevInfo); + ClassDevInfo->HwDevInfo = NULL; + } + + ClassDevInfo++; } } static VOID -FillDevicesList(IN PHARDWARE_PAGE_DATA hpd) +BuildDevicesList(IN PHARDWARE_PAGE_DATA hpd) { - PHWCLASSDEVINFO DevInfo, LastDevInfo; + PHWCLASSDEVINFO ClassDevInfo, LastClassDevInfo; SP_DEVINFO_DATA DevInfoData; - WCHAR szBuffer[255]; - INT ItemCount = 0; DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); - DevInfo = hpd->ClassDevInfo; - LastDevInfo = DevInfo + hpd->NumberOfGuids; + ClassDevInfo = hpd->ClassDevInfo; + LastClassDevInfo = ClassDevInfo + hpd->NumberOfGuids; - while (DevInfo != LastDevInfo) + while (ClassDevInfo != LastClassDevInfo) { - INT ImageIndex = -1; - - DevInfo->hDevInfo = SetupDiGetClassDevs(&DevInfo->Guid, - NULL, - hpd->hWnd, - DIGCF_PRESENT); - if (DevInfo->hDevInfo != INVALID_HANDLE_VALUE) + ClassDevInfo->ImageIndex = -1; + ClassDevInfo->hDevInfo = SetupDiGetClassDevs(&ClassDevInfo->Guid, + NULL, + hpd->hWnd, + DIGCF_PRESENT); + if (ClassDevInfo->hDevInfo != INVALID_HANDLE_VALUE) { - LVITEM li; DWORD MemberIndex = 0; SetupDiGetClassImageIndex(&hpd->ClassImageListData, - &DevInfo->Guid, - &ImageIndex); + &ClassDevInfo->Guid, + &ClassDevInfo->ImageIndex); - while (SetupDiEnumDeviceInfo(DevInfo->hDevInfo, + while (SetupDiEnumDeviceInfo(ClassDevInfo->hDevInfo, MemberIndex++, &DevInfoData)) { - DWORD RegDataType; - INT iItem; - - if (DevInfo->HwDevInfo != NULL) + if (ClassDevInfo->HwDevInfo != NULL) { PHWDEVINFO HwNewDevInfo = HeapReAlloc(GetProcessHeap(), 0, - DevInfo->HwDevInfo, - (DevInfo->ItemCount + 1) * + ClassDevInfo->HwDevInfo, + (ClassDevInfo->ItemCount + 1) * sizeof(HWDEVINFO)); if (HwNewDevInfo != NULL) { - DevInfo->HwDevInfo = HwNewDevInfo; + ClassDevInfo->HwDevInfo = HwNewDevInfo; } else { DPRINT1("Unable to allocate memory for %d SP_DEVINFO_DATA structures!\n", - DevInfo->ItemCount + 1); + ClassDevInfo->ItemCount + 1); break; } } else { - DevInfo->HwDevInfo = HeapAlloc(GetProcessHeap(), - 0, - sizeof(HWDEVINFO)); - if (DevInfo->HwDevInfo == NULL) + ClassDevInfo->HwDevInfo = HeapAlloc(GetProcessHeap(), + 0, + sizeof(HWDEVINFO)); + if (ClassDevInfo->HwDevInfo == NULL) { DPRINT1("Unable to allocate memory for a SP_DEVINFO_DATA structures!\n"); break; } } - DevInfo->HwDevInfo[DevInfo->ItemCount].ClassDevInfo = DevInfo; - DevInfo->HwDevInfo[DevInfo->ItemCount++].DevInfoData = DevInfoData; + ClassDevInfo->HwDevInfo[ClassDevInfo->ItemCount].ClassDevInfo = ClassDevInfo; + ClassDevInfo->HwDevInfo[ClassDevInfo->ItemCount++].DevInfoData = DevInfoData; + } + } + + ClassDevInfo++; + } +} + + +static VOID +FillDevicesList(IN PHARDWARE_PAGE_DATA hpd) +{ + PHWCLASSDEVINFO ClassDevInfo, LastClassDevInfo; + PHWDEVINFO HwDevInfo, LastHwDevInfo; + WCHAR szBuffer[255]; + INT ItemCount = 0; + + BuildDevicesList(hpd); + + ClassDevInfo = hpd->ClassDevInfo; + LastClassDevInfo = ClassDevInfo + hpd->NumberOfGuids; - if ((SetupDiGetDeviceRegistryProperty(DevInfo->hDevInfo, - &DevInfoData, + while (ClassDevInfo != LastClassDevInfo) + { + if (ClassDevInfo->HwDevInfo != NULL) + { + HwDevInfo = ClassDevInfo->HwDevInfo; + LastHwDevInfo = HwDevInfo + ClassDevInfo->ItemCount; + + while (HwDevInfo != LastHwDevInfo) + { + DWORD RegDataType; + INT iItem; + LVITEM li; + + if ((SetupDiGetDeviceRegistryProperty(ClassDevInfo->hDevInfo, + &HwDevInfo->DevInfoData, SPDRP_FRIENDLYNAME, &RegDataType, (PBYTE)szBuffer, sizeof(szBuffer), NULL) || - SetupDiGetDeviceRegistryProperty(DevInfo->hDevInfo, - &DevInfoData, + SetupDiGetDeviceRegistryProperty(ClassDevInfo->hDevInfo, + &HwDevInfo->DevInfoData, SPDRP_DEVICEDESC, &RegDataType, (PBYTE)szBuffer, @@ -236,8 +342,8 @@ FillDevicesList(IN PHARDWARE_PAGE_DATA hpd) li.state = (ItemCount == 0 ? LVIS_SELECTED : 0); li.stateMask = LVIS_SELECTED; li.pszText = szBuffer; - li.iImage = ImageIndex; - li.lParam = (LPARAM)&DevInfo->HwDevInfo[DevInfo->ItemCount - 1]; + li.iImage = ClassDevInfo->ImageIndex; + li.lParam = (LPARAM)HwDevInfo; iItem = ListView_InsertItem(hpd->hWndDevList, &li); @@ -245,7 +351,7 @@ FillDevicesList(IN PHARDWARE_PAGE_DATA hpd) { ItemCount++; - if (SetupDiGetClassDescription(&DevInfo->Guid, + if (SetupDiGetClassDescription(&ClassDevInfo->Guid, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), NULL)) @@ -259,10 +365,12 @@ FillDevicesList(IN PHARDWARE_PAGE_DATA hpd) } } } + + HwDevInfo++; } } - DevInfo++; + ClassDevInfo++; } /* update the controls */ @@ -509,8 +617,6 @@ EnableTroubleShoot(PHARDWARE_PAGE_DATA hpd, HWND hBtnTroubleShoot = GetDlgItem(hpd->hWnd, IDC_TROUBLESHOOT); - EnableWindow(hBtnTroubleShoot, - Enable); ShowWindow(hBtnTroubleShoot, Enable ? SW_SHOW : SW_HIDE); } @@ -650,21 +756,8 @@ HardwareDlgProc(IN HWND hwndDlg, case WM_DESTROY: { - UINT i; - - /* free the device info set handles */ - for (i = 0; - i < hpd->NumberOfGuids; - i++) - { - SetupDiDestroyDeviceInfoList(hpd->ClassDevInfo[i].hDevInfo); - if (hpd->ClassDevInfo[i].HwDevInfo != NULL) - { - HeapFree(GetProcessHeap(), - 0, - hpd->ClassDevInfo[i].HwDevInfo); - } - } + /* free devices list */ + FreeDevicesList(hpd); /* restore the old window proc of the subclassed parent window */ if (hpd->hWndParent != NULL && hpd->ParentOldWndProc != NULL)