- document and partly implement DevicePropertiesExA/W() - minor fixes Modified: trunk/reactos/lib/devmgr/advprop.c Modified: trunk/reactos/lib/devmgr/hwpage.c Modified: trunk/reactos/lib/devmgr/misc.c Modified: trunk/reactos/lib/devmgr/precomp.h Modified: trunk/reactos/lib/devmgr/stubs.c _____
Modified: trunk/reactos/lib/devmgr/advprop.c --- trunk/reactos/lib/devmgr/advprop.c 2005-12-03 11:55:07 UTC (rev 19836) +++ trunk/reactos/lib/devmgr/advprop.c 2005-12-03 14:07:38 UTC (rev 19837) @@ -67,6 +67,7 @@
BOOL DeviceUsageChanged : 1; BOOL CloseDevInst : 1; BOOL IsAdmin : 1; + BOOL DoDefaultDevAction : 1;
WCHAR szDevName[255]; WCHAR szTemp[255]; @@ -682,7 +683,8 @@ IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, IN HINSTANCE hComCtl32, - IN LPCWSTR lpMachineName) + IN LPCWSTR lpMachineName, + IN DWORD dwFlags) { PROPSHEETHEADER psh = {0}; PROPSHEETPAGE pspGeneral = {0}; @@ -755,6 +757,7 @@ (DevIdSize * sizeof(WCHAR))); if (DevAdvPropInfo == NULL) { + SetLastError(ERROR_NOT_ENOUGH_MEMORY); goto Cleanup; }
@@ -788,6 +791,7 @@ DevAdvPropInfo->hComCtl32 = hComCtl32;
DevAdvPropInfo->IsAdmin = IsUserAdmin(); + DevAdvPropInfo->DoDefaultDevAction = ((dwFlags & DPF_DEVICE_STATUS_ACTION) != 0);
psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_PROPTITLE | PSH_NOAPPLYNOW; @@ -940,19 +944,15 @@ * lpDeviceID: Specifies the device whose properties are to be shown * * RETURN VALUE - * -1: if errors occured + * Always returns -1, a call to GetLastError returns 0 if successful * - * REVISIONS - * - * NOTE - * * @implemented */ INT_PTR WINAPI -DeviceAdvancedPropertiesW(HWND hWndParent, - LPCWSTR lpMachineName, - LPCWSTR lpDeviceID) +DeviceAdvancedPropertiesW(IN HWND hWndParent OPTIONAL, + IN LPCWSTR lpMachineName OPTIONAL, + IN LPCWSTR lpDeviceID) { HDEVINFO hDevInfo; SP_DEVINFO_DATA DevInfoData; @@ -981,7 +981,8 @@ hDevInfo, &DevInfoData, hComCtl32, - lpMachineName); + lpMachineName, + 0); }
SetupDiDestroyDeviceInfoList(hDevInfo); @@ -1008,19 +1009,15 @@ * lpDeviceID: Specifies the device whose properties are to be shown * * RETURN VALUE - * -1: if errors occured + * Always returns -1, a call to GetLastError returns 0 if successful * - * REVISIONS - * - * NOTE - * * @implemented */ INT_PTR WINAPI -DeviceAdvancedPropertiesA(HWND hWndParent, - LPCSTR lpMachineName, - LPCSTR lpDeviceID) +DeviceAdvancedPropertiesA(IN HWND hWndParent OPTIONAL, + IN LPCSTR lpMachineName OPTIONAL, + IN LPCSTR lpDeviceID) { LPWSTR lpMachineNameW = NULL; LPWSTR lpDeviceIDW = NULL; @@ -1063,3 +1060,178 @@
return Ret; } + + +/********************************************************************** ***** + * NAME EXPORTED + * DevicePropertiesExA + * + * 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 + * 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 +DevicePropertiesExA(IN HWND hWndParent OPTIONAL, + IN LPCSTR lpMachineName OPTIONAL, + IN LPCSTR lpDeviceID OPTIONAL, + IN DWORD dwFlags OPTIONAL, + IN BOOL bShowDevMgr) +{ + LPWSTR lpMachineNameW = NULL; + LPWSTR lpDeviceIDW = NULL; + INT_PTR Ret = -1; + + if (lpMachineName != NULL) + { + if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName, + CP_ACP))) + { + goto Cleanup; + } + } + if (lpDeviceID != NULL) + { + if (!(lpDeviceIDW = ConvertMultiByteToUnicode(lpDeviceID, + CP_ACP))) + { + goto Cleanup; + } + } + + Ret = DevicePropertiesExW(hWndParent, + lpMachineNameW, + lpDeviceIDW, + dwFlags, + bShowDevMgr); + +Cleanup: + if (lpMachineNameW != NULL) + { + HeapFree(GetProcessHeap(), + 0, + lpMachineNameW); + } + if (lpDeviceIDW != NULL) + { + HeapFree(GetProcessHeap(), + 0, + lpDeviceIDW); + } + + 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 + * 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 + * + * @unimplemented + */ +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_UNKNOWN | DPF_DEVICE_STATUS_ACTION)) + { + DPRINT1("DevPropertiesExW: Invalid flags: 0x%x\n", + dwFlags & ~(DPF_UNKNOWN | DPF_DEVICE_STATUS_ACTION)); + SetLastError(ERROR_INVALID_FLAGS); + return -1; + } + + if (bShowDevMgr) + { + DPRINT("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; +} _____
Modified: trunk/reactos/lib/devmgr/hwpage.c --- trunk/reactos/lib/devmgr/hwpage.c 2005-12-03 11:55:07 UTC (rev 19836) +++ trunk/reactos/lib/devmgr/hwpage.c 2005-12-03 14:07:38 UTC (rev 19837) @@ -30,13 +30,6 @@
#define NDEBUG #include <debug.h>
-typedef enum -{ - HWPD_STANDARDLIST = 0, - HWPD_LARGELIST, - HWPD_MAX = HWPD_LARGELIST -} HWPAGE_DISPLAYMODE, *PHWPAGE_DISPLAYMODE; - typedef struct _HWDEVINFO { struct _HWCLASSDEVINFO *ClassDevInfo; @@ -139,7 +132,8 @@
HwDevInfo->ClassDevInfo->hDevInfo, &HwDevInfo->DevInfoData, hpd->hComCtl32, - NULL) != -1; + NULL, + 0) != -1; }
return Ret; _____
Modified: trunk/reactos/lib/devmgr/misc.c --- trunk/reactos/lib/devmgr/misc.c 2005-12-03 11:55:07 UTC (rev 19836) +++ trunk/reactos/lib/devmgr/misc.c 2005-12-03 14:07:38 UTC (rev 19837) @@ -254,7 +254,10 @@
0, nLength * sizeof(WCHAR)); if (lpUnicodeStr == NULL) + { + SetLastError(ERROR_NOT_ENOUGH_MEMORY); return NULL; + }
if (!MultiByteToWideChar(uCodePage, 0, _____
Modified: trunk/reactos/lib/devmgr/precomp.h --- trunk/reactos/lib/devmgr/precomp.h 2005-12-03 11:55:07 UTC (rev 19836) +++ trunk/reactos/lib/devmgr/precomp.h 2005-12-03 14:07:38 UTC (rev 19837) @@ -120,16 +120,23 @@
INT_PTR WINAPI -DeviceAdvancedPropertiesA(HWND hWndParent, - LPCSTR lpMachineName, - LPCSTR lpDeviceID); +DeviceAdvancedPropertiesA(IN HWND hWndParent OPTIONAL, + IN LPCSTR lpMachineName OPTIONAL, + IN LPCSTR lpDeviceID);
INT_PTR WINAPI -DeviceAdvancedPropertiesW(HWND hWndParent, - LPCWSTR lpMachineName, - LPCWSTR lpDeviceID); +DeviceAdvancedPropertiesW(IN HWND hWndParent OPTIONAL, + IN LPCWSTR lpMachineName OPTIONAL, + IN LPCWSTR lpDeviceID);
+typedef enum +{ + HWPD_STANDARDLIST = 0, + HWPD_LARGELIST, + HWPD_MAX = HWPD_LARGELIST +} HWPAGE_DISPLAYMODE, *PHWPAGE_DISPLAYMODE; + HWND WINAPI DeviceCreateHardwarePage(HWND hWndParent, @@ -137,26 +144,28 @@
HWND WINAPI -DeviceCreateHardwarePageEx(HWND hWndParent, - LPGUID lpGuids, - UINT uNumberOfGuids, - UINT Unknown); +DeviceCreateHardwarePageEx(IN HWND hWndParent, + IN LPGUID lpGuids, + IN UINT uNumberOfGuids, + IN HWPAGE_DISPLAYMODE DisplayMode);
-int +#define DPF_UNKNOWN (0x1) +#define DPF_DEVICE_STATUS_ACTION (0x2) +INT_PTR WINAPI -DevicePropertiesExA(HWND hWndParent, - LPCSTR lpMachineName, - LPCSTR lpDeviceID, - HINSTANCE hInst, - DWORD Unknown); +DevicePropertiesExA(IN HWND hWndParent OPTIONAL, + IN LPCSTR lpMachineName OPTIONAL, + IN LPCSTR lpDeviceID OPTIONAL, + IN DWORD dwFlags OPTIONAL, + IN BOOL bShowDevMgr);
-int +INT_PTR WINAPI -DevicePropertiesExW(HWND hWndParent, - LPCWSTR lpMachineName, - LPCWSTR lpDeviceID, - HINSTANCE hInst, - DWORD Unknown); +DevicePropertiesExW(IN HWND hWndParent OPTIONAL, + IN LPCWSTR lpMachineName OPTIONAL, + IN LPCWSTR lpDeviceID OPTIONAL, + IN DWORD dwFlags OPTIONAL, + IN BOOL bShowDevMgr);
#ifdef UNICODE #define DeviceManager_Execute DeviceManager_ExecuteW @@ -188,7 +197,8 @@ IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, IN HINSTANCE hComCtl32, - IN LPCWSTR lpMachineName); + IN LPCWSTR lpMachineName, + IN DWORD dwFlags);
/* MISC.C */
_____
Modified: trunk/reactos/lib/devmgr/stubs.c --- trunk/reactos/lib/devmgr/stubs.c 2005-12-03 11:55:07 UTC (rev 19836) +++ trunk/reactos/lib/devmgr/stubs.c 2005-12-03 14:07:38 UTC (rev 19837) @@ -544,79 +544,3 @@
UNIMPLEMENTED; return FALSE; } - - -/********************************************************************** ***** - * NAME EXPORTED - * DevicePropertiesExA - * - * DESCRIPTION - * Invokes the extended device properties dialog - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * hInst: Handle to the application instance - * lpMachineName: Machine Name, NULL is the local machine - * lpDeviceID: Specifies the device whose properties are to be shown - * Unknown: Unknown parameter, see NOTEs - * - * RETURN VALUE - * >=0: if no errors occured - * -1: if errors occured - * - * REVISIONS - * - * NOTE - * Unknown seems to be a BOOL, not sure what it affects - * - * @unimplemented - */ -int -WINAPI -DevicePropertiesExA(HWND hWndParent, - LPCSTR lpMachineName, - LPCSTR lpDeviceID, - HINSTANCE hInst, - DWORD Unknown) -{ - UNIMPLEMENTED; - return -1; -} - - -/********************************************************************** ***** - * NAME EXPORTED - * DevicePropertiesExW - * - * DESCRIPTION - * Invokes the extended device properties dialog - * - * ARGUMENTS - * hWndParent: Handle to the parent window - * hInst: Handle to the application instance - * lpMachineName: Machine Name, NULL is the local machine - * lpDeviceID: Specifies the device whose properties are to be shown - * Unknown: Unknown parameter, see NOTEs - * - * RETURN VALUE - * >=0: if no errors occured - * -1: if errors occured - * - * REVISIONS - * - * NOTE - * Unknown seems to be a BOOL, not sure what it affects - * - * @unimplemented - */ -int -WINAPI -DevicePropertiesExW(HWND hWndParent, - LPCWSTR lpMachineName, - LPCWSTR lpDeviceID, - HINSTANCE hInst, - DWORD Unknown) -{ - UNIMPLEMENTED; - return -1; -}