mirror of
https://github.com/reactos/reactos.git
synced 2025-08-07 01:03:16 +00:00
Implement SetupDiGetClassDevs(Ex)A/W
svn path=/trunk/; revision=16425
This commit is contained in:
parent
3c215ef287
commit
4a200035de
2 changed files with 53 additions and 8 deletions
|
@ -613,7 +613,7 @@ DECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS)
|
||||||
#define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE
|
#define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE
|
||||||
#define ERROR_NOT_INSTALLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000)
|
#define ERROR_NOT_INSTALLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000)
|
||||||
|
|
||||||
/* flags for SetupDiGetClassDevs */
|
/* flags for SetupDiGetClassDevs(Ex) */
|
||||||
#define DIGCF_DEFAULT 0x00000001
|
#define DIGCF_DEFAULT 0x00000001
|
||||||
#define DIGCF_PRESENT 0x00000002
|
#define DIGCF_PRESENT 0x00000002
|
||||||
#define DIGCF_ALLCLASSES 0x00000004
|
#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 SetupDiGetClassDevsA(CONST GUID *,LPCSTR,HWND,DWORD);
|
||||||
HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID *,LPCWSTR,HWND,DWORD);
|
HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID *,LPCWSTR,HWND,DWORD);
|
||||||
#define SetupDiGetClassDevs WINELIB_NAME_AW(SetupDiGetClassDevs)
|
#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,
|
BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A,
|
||||||
DWORD, PDWORD, PSP_DEVINFO_DATA);
|
DWORD, PDWORD, PSP_DEVINFO_DATA);
|
||||||
BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_W,
|
BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_W,
|
||||||
|
|
|
@ -948,9 +948,38 @@ HDEVINFO WINAPI SetupDiGetClassDevsA(
|
||||||
LPCSTR enumstr,
|
LPCSTR enumstr,
|
||||||
HWND parent,
|
HWND parent,
|
||||||
DWORD flags)
|
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;
|
HDEVINFO ret;
|
||||||
LPWSTR enumstrW = NULL;
|
LPWSTR enumstrW = NULL;
|
||||||
|
LPWSTR machineW = NULL;
|
||||||
|
|
||||||
if (enumstr)
|
if (enumstr)
|
||||||
{
|
{
|
||||||
|
@ -963,10 +992,22 @@ HDEVINFO WINAPI SetupDiGetClassDevsA(
|
||||||
}
|
}
|
||||||
MultiByteToWideChar(CP_ACP, 0, enumstr, -1, enumstrW, len);
|
MultiByteToWideChar(CP_ACP, 0, enumstr, -1, enumstrW, len);
|
||||||
}
|
}
|
||||||
ret = SetupDiGetClassDevsW(class, enumstrW, parent, flags);
|
if (machine)
|
||||||
HeapFree(GetProcessHeap(), 0, enumstrW);
|
{
|
||||||
|
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:
|
end:
|
||||||
|
HeapFree(GetProcessHeap(), 0, enumstrW);
|
||||||
|
HeapFree(GetProcessHeap(), 0, machineW);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1079,7 +1120,6 @@ static HDEVINFO SETUP_CreateDevListFromClass(
|
||||||
return INVALID_HANDLE_VALUE;
|
return INVALID_HANDLE_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
FIXME("subKeys %ld, maxSubKey %ld\n", subKeys, maxSubKey);
|
|
||||||
for (i = 0; i < subKeys; i++)
|
for (i = 0; i < subKeys; i++)
|
||||||
{
|
{
|
||||||
deviceInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(DeviceInfo) + maxSubKey * sizeof(WCHAR));
|
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,
|
CONST GUID *class,
|
||||||
LPCWSTR enumstr,
|
LPCWSTR enumstr,
|
||||||
HWND parent,
|
HWND parent,
|
||||||
DWORD flags)
|
DWORD flags,
|
||||||
|
LPCWSTR machine,
|
||||||
|
PVOID reserved)
|
||||||
{
|
{
|
||||||
HDEVINFO ret = (HDEVINFO)INVALID_HANDLE_VALUE;
|
HDEVINFO ret = (HDEVINFO)INVALID_HANDLE_VALUE;
|
||||||
|
|
||||||
|
@ -1141,7 +1183,7 @@ HDEVINFO WINAPI SetupDiGetClassDevsW(
|
||||||
else
|
else
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
ret = SETUP_CreateDevListFromClass(NULL, (LPGUID)class);
|
ret = SETUP_CreateDevListFromClass(machine, (LPGUID)class);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue