From 4a200035def56d45c2bfad919ccd7ad691977dcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Tue, 5 Jul 2005 12:59:14 +0000 Subject: [PATCH] Implement SetupDiGetClassDevs(Ex)A/W svn path=/trunk/; revision=16425 --- reactos/include/wine/setupapi.h | 5 ++- reactos/lib/setupapi/devinst.c | 56 ++++++++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/reactos/include/wine/setupapi.h b/reactos/include/wine/setupapi.h index ffa28c5ee39..2b9cc31d6da 100644 --- a/reactos/include/wine/setupapi.h +++ b/reactos/include/wine/setupapi.h @@ -613,7 +613,7 @@ DECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS) #define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE #define ERROR_NOT_INSTALLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000) -/* flags for SetupDiGetClassDevs */ +/* flags for SetupDiGetClassDevs(Ex) */ #define DIGCF_DEFAULT 0x00000001 #define DIGCF_PRESENT 0x00000002 #define DIGCF_ALLCLASSES 0x00000004 @@ -741,6 +741,9 @@ BOOL WINAPI SetupDiGetClassDescriptionExW(const GUID*, PWSTR, DWORD, PDWORD, HDEVINFO WINAPI SetupDiGetClassDevsA(CONST GUID *,LPCSTR,HWND,DWORD); HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID *,LPCWSTR,HWND,DWORD); #define SetupDiGetClassDevs WINELIB_NAME_AW(SetupDiGetClassDevs) +HDEVINFO WINAPI SetupDiGetClassDevsExA(CONST GUID *,LPCSTR,HWND,DWORD,LPCSTR,PVOID); +HDEVINFO WINAPI SetupDiGetClassDevsExW(CONST GUID *,LPCWSTR,HWND,DWORD,LPCWSTR,PVOID); +#define SetupDiGetClassDevsEx WINELIB_NAME_AW(SetupDiGetClassDevsEx) BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A, DWORD, PDWORD, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_W, diff --git a/reactos/lib/setupapi/devinst.c b/reactos/lib/setupapi/devinst.c index 4322d4eecb0..ad1a78c9df2 100644 --- a/reactos/lib/setupapi/devinst.c +++ b/reactos/lib/setupapi/devinst.c @@ -948,9 +948,38 @@ HDEVINFO WINAPI SetupDiGetClassDevsA( LPCSTR enumstr, HWND parent, DWORD flags) +{ + return SetupDiGetClassDevsExA(class, enumstr, parent, + flags, NULL, NULL); +} + +/*********************************************************************** + * SetupDiGetClassDevsW (SETUPAPI.@) + */ +HDEVINFO WINAPI SetupDiGetClassDevsW( + CONST GUID *class, + LPCWSTR enumstr, + HWND parent, + DWORD flags) +{ + return SetupDiGetClassDevsExW(class, enumstr, parent, + flags, NULL, NULL); +} + +/*********************************************************************** + * SetupDiGetClassDevsExA (SETUPAPI.@) + */ +HDEVINFO WINAPI SetupDiGetClassDevsExA( + CONST GUID *class, + LPCSTR enumstr, + HWND parent, + DWORD flags, + LPCSTR machine, + PVOID reserved) { HDEVINFO ret; LPWSTR enumstrW = NULL; + LPWSTR machineW = NULL; if (enumstr) { @@ -963,10 +992,22 @@ HDEVINFO WINAPI SetupDiGetClassDevsA( } MultiByteToWideChar(CP_ACP, 0, enumstr, -1, enumstrW, len); } - ret = SetupDiGetClassDevsW(class, enumstrW, parent, flags); - HeapFree(GetProcessHeap(), 0, enumstrW); + if (machine) + { + int len = MultiByteToWideChar(CP_ACP, 0, machine, -1, NULL, 0); + machineW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!machineW) + { + ret = (HDEVINFO)INVALID_HANDLE_VALUE; + goto end; + } + MultiByteToWideChar(CP_ACP, 0, machine, -1, machineW, len); + } + ret = SetupDiGetClassDevsExW(class, enumstrW, parent, flags, machineW, reserved); end: + HeapFree(GetProcessHeap(), 0, enumstrW); + HeapFree(GetProcessHeap(), 0, machineW); return ret; } @@ -1079,7 +1120,6 @@ static HDEVINFO SETUP_CreateDevListFromClass( return INVALID_HANDLE_VALUE; } - FIXME("subKeys %ld, maxSubKey %ld\n", subKeys, maxSubKey); for (i = 0; i < subKeys; i++) { deviceInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(DeviceInfo) + maxSubKey * sizeof(WCHAR)); @@ -1108,13 +1148,15 @@ static HDEVINFO SETUP_CreateDevListFromClass( } /*********************************************************************** - * SetupDiGetClassDevsW (SETUPAPI.@) + * SetupDiGetClassDevsExW (SETUPAPI.@) */ -HDEVINFO WINAPI SetupDiGetClassDevsW( +HDEVINFO WINAPI SetupDiGetClassDevsExW( CONST GUID *class, LPCWSTR enumstr, HWND parent, - DWORD flags) + DWORD flags, + LPCWSTR machine, + PVOID reserved) { HDEVINFO ret = (HDEVINFO)INVALID_HANDLE_VALUE; @@ -1141,7 +1183,7 @@ HDEVINFO WINAPI SetupDiGetClassDevsW( else #else { - ret = SETUP_CreateDevListFromClass(NULL, (LPGUID)class); + ret = SETUP_CreateDevListFromClass(machine, (LPGUID)class); } #endif }