static BOOL DisplaySelectedDeviceProperties(IN PHARDWARE_PAGE_DATA hpd) { PHWDEVINFO HwDevInfo; SP_DEVINFO_DATA DevInfoData; BOOL Ret = FALSE; HwDevInfo = (PHWDEVINFO)ListViewGetSelectedItemData(hpd->hWndDevList); if (HwDevInfo != NULL) { /* make a copy of the SP_DEVINFO_DATA structure on the stack, it may become invalid in case the devices are updated */ DevInfoData = HwDevInfo->DevInfoData; /* display the advanced properties */ Ret = DisplayDeviceAdvancedProperties(hpd->hWnd, NULL, HwDevInfo->ClassDevInfo->hDevInfo, &DevInfoData, hpd->hComCtl32, NULL, 0) != -1; } return Ret; }
/*************************************************************************** * NAME EXPORTED * DeviceAdvancedPropertiesW * * DESCRIPTION * Invokes the device properties dialog, this version may add some property pages * for some devices * * ARGUMENTS * hWndParent: Handle to the parent window * lpMachineName: Machine Name, NULL is the local machine * lpDeviceID: Specifies the device whose properties are to be shown * * RETURN VALUE * Always returns -1, a call to GetLastError returns 0 if successful * * @implemented */ INT_PTR WINAPI DeviceAdvancedPropertiesW(IN HWND hWndParent OPTIONAL, IN LPCWSTR lpMachineName OPTIONAL, IN LPCWSTR lpDeviceID) { HDEVINFO hDevInfo; SP_DEVINFO_DATA DevInfoData; HINSTANCE hComCtl32; INT_PTR Ret = -1; if (lpDeviceID == NULL) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } /* dynamically load comctl32 */ hComCtl32 = LoadAndInitComctl32(); if (hComCtl32 != NULL) { hDevInfo = SetupDiCreateDeviceInfoListEx(NULL, hWndParent, lpMachineName, NULL); if (hDevInfo != INVALID_HANDLE_VALUE) { DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); if (SetupDiOpenDeviceInfo(hDevInfo, lpDeviceID, hWndParent, 0, &DevInfoData)) { Ret = DisplayDeviceAdvancedProperties(hWndParent, lpDeviceID, hDevInfo, &DevInfoData, hComCtl32, lpMachineName, 0); } SetupDiDestroyDeviceInfoList(hDevInfo); } FreeLibrary(hComCtl32); } return Ret; }
/*************************************************************************** * NAME EXPORTED * DevicePropertiesExW * * DESCRIPTION * Invokes the extended device properties dialog * * ARGUMENTS * hWndParent: Handle to the parent window * lpMachineName: Machine Name, NULL is the local machine * lpDeviceID: Specifies the device whose properties are to be shown, optional if * bShowDevMgr is nonzero * dwFlags: This parameter can be a combination of the following flags: * * DPF_DEVICE_STATUS_ACTION: Only valid if bShowDevMgr, causes * the default device status action button * to be clicked (Troubleshoot, Enable * Device, etc) * bShowDevMgr: If non-zero it displays the device manager instead of * the advanced device property dialog * * RETURN VALUE * 1: if bShowDevMgr is non-zero and no error occured * -1: a call to GetLastError returns 0 if successful * * @implemented */ INT_PTR WINAPI DevicePropertiesExW(IN HWND hWndParent OPTIONAL, IN LPCWSTR lpMachineName OPTIONAL, IN LPCWSTR lpDeviceID OPTIONAL, IN DWORD dwFlags OPTIONAL, IN BOOL bShowDevMgr) { INT_PTR Ret = -1; if (dwFlags & ~(DPF_EXTENDED | DPF_DEVICE_STATUS_ACTION)) { FIXME("DevPropertiesExW: Invalid flags: 0x%x\n", dwFlags & ~(DPF_EXTENDED | DPF_DEVICE_STATUS_ACTION)); SetLastError(ERROR_INVALID_FLAGS); return -1; } if (bShowDevMgr) { FIXME("DevPropertiesExW doesn't support bShowDevMgr!\n"); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); } else { HDEVINFO hDevInfo; SP_DEVINFO_DATA DevInfoData; HINSTANCE hComCtl32; if (lpDeviceID == NULL) { SetLastError(ERROR_INVALID_PARAMETER); return -1; } /* dynamically load comctl32 */ hComCtl32 = LoadAndInitComctl32(); if (hComCtl32 != NULL) { hDevInfo = SetupDiCreateDeviceInfoListEx(NULL, hWndParent, lpMachineName, NULL); if (hDevInfo != INVALID_HANDLE_VALUE) { DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); if (SetupDiOpenDeviceInfo(hDevInfo, lpDeviceID, hWndParent, 0, &DevInfoData)) { Ret = DisplayDeviceAdvancedProperties(hWndParent, lpDeviceID, hDevInfo, &DevInfoData, hComCtl32, lpMachineName, dwFlags); } SetupDiDestroyDeviceInfoList(hDevInfo); } FreeLibrary(hComCtl32); } } return Ret; }