From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/setupapi/devinst.c | 214 ------------------------------------ dlls/setupapi/setupapi.spec | 16 +-- 2 files changed, 8 insertions(+), 222 deletions(-) diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index d7b7cdbcf7c..f6bfcc483b0 100644 --- a/dlls/setupapi/devinst.c +++ b/dlls/setupapi/devinst.c @@ -4161,220 +4161,6 @@ BOOL WINAPI SetupDiDeleteDevRegKey(HDEVINFO devinfo, SP_DEVINFO_DATA *device_dat return !l; } -static CONFIGRET get_device_id_list(const WCHAR *filter, WCHAR *buffer, ULONG *len, ULONG flags) -{ - const ULONG supported_flags = CM_GETIDLIST_FILTER_NONE | CM_GETIDLIST_FILTER_CLASS | CM_GETIDLIST_FILTER_PRESENT; - SP_DEVINFO_DATA device = { sizeof(device) }; - CONFIGRET ret = CR_SUCCESS; - GUID guid, *pguid = NULL; - unsigned int i, id_len; - ULONG query_flags = 0; - HDEVINFO set; - WCHAR id[256]; - ULONG needed; - WCHAR *p; - - if (!len || (buffer && !*len)) - return CR_INVALID_POINTER; - - needed = 1; - - if (buffer) - *buffer = 0; - if (flags & ~supported_flags) - { - FIXME("Flags %#lx are not supported.\n", flags); - *len = needed; - return CR_SUCCESS; - } - - if (!buffer) - *len = 0; - - if (flags & CM_GETIDLIST_FILTER_CLASS) - { - if (!filter) - return CR_INVALID_POINTER; - if (IIDFromString((WCHAR *)filter, &guid)) - return CR_INVALID_DATA; - pguid = &guid; - } - - if (!buffer) - *len = needed; - - if (!pguid) - query_flags |= DIGCF_ALLCLASSES; - if (flags & CM_GETIDLIST_FILTER_PRESENT) - query_flags |= DIGCF_PRESENT; - - set = SetupDiGetClassDevsW(pguid, NULL, NULL, query_flags); - if (set == INVALID_HANDLE_VALUE) - return CR_SUCCESS; - - p = buffer; - for (i = 0; SetupDiEnumDeviceInfo(set, i, &device); ++i) - { - ret = SetupDiGetDeviceInstanceIdW(set, &device, id, ARRAY_SIZE(id), NULL); - if (!ret) continue; - id_len = wcslen(id) + 1; - needed += id_len; - if (buffer) - { - if (needed > *len) - { - SetupDiDestroyDeviceInfoList(set); - *buffer = 0; - return CR_BUFFER_SMALL; - } - memcpy(p, id, sizeof(*p) * id_len); - p += id_len; - } - } - SetupDiDestroyDeviceInfoList(set); - *len = needed; - if (buffer) - *p = 0; - return CR_SUCCESS; -} - -/*********************************************************************** - * CM_Get_Device_ID_List_ExW (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(const WCHAR *filter, WCHAR *buffer, ULONG len, ULONG flags, HMACHINE machine) -{ - TRACE("%s %p %ld %#lx %p.\n", debugstr_w(filter), buffer, len, flags, machine); - - if (machine) - FIXME("machine %p.\n", machine); - - if (!buffer) - return CR_INVALID_POINTER; - - return get_device_id_list(filter, buffer, &len, flags); -} - -/*********************************************************************** - * CM_Get_Device_ID_ListW (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_ID_ListW(const WCHAR *filter, WCHAR *buffer, ULONG len, ULONG flags) -{ - return CM_Get_Device_ID_List_ExW(filter, buffer, len, flags, NULL); -} - -/*********************************************************************** - * CM_Get_Device_ID_List_Size_ExW (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW(ULONG *len, const WCHAR *filter, ULONG flags, HMACHINE machine) -{ - TRACE("%p %s %#lx, machine %p.\n", len, debugstr_w(filter), flags, machine); - - if (machine) - FIXME("machine %p.\n", machine); - - return get_device_id_list(filter, NULL, len, flags); -} - -/*********************************************************************** - * CM_Get_Device_ID_List_SizeW (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW(ULONG *len, const WCHAR *filter, ULONG flags) -{ - TRACE("%p %s %#lx.\n", len, debugstr_w(filter), flags); - - return get_device_id_list(filter, NULL, len, flags); -} - -/*********************************************************************** - * CM_Get_Device_ID_List_ExA (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_ID_List_ExA(const char *filter, char *buffer, ULONG len, ULONG flags, HMACHINE machine) -{ - WCHAR *wbuffer, *wfilter = NULL, *p; - unsigned int slen; - CONFIGRET ret; - - TRACE("%s %p %ld %#lx.\n", debugstr_a(filter), buffer, len, flags); - - if (machine) - FIXME("machine %p.\n", machine); - - if (!buffer || !len) - return CR_INVALID_POINTER; - - if (!(wbuffer = malloc(len * sizeof(*wbuffer)))) - return CR_OUT_OF_MEMORY; - - if (filter) - { - slen = strlen(filter) + 1; - if (!(wfilter = malloc(slen * sizeof(*wfilter)))) - { - free(wbuffer); - return CR_OUT_OF_MEMORY; - } - MultiByteToWideChar(CP_ACP, 0, filter, slen, wfilter, slen); - } - - if (!(ret = CM_Get_Device_ID_ListW(wfilter, wbuffer, len, flags))) - { - p = wbuffer; - while (*p) - { - slen = wcslen(p) + 1; - WideCharToMultiByte(CP_ACP, 0, p, slen, buffer, slen, NULL, NULL); - p += slen; - buffer += slen; - } - *buffer = 0; - } - free(wfilter); - free(wbuffer); - return ret; -} - -/*********************************************************************** - * CM_Get_Device_ID_ListA (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_ID_ListA(const char *filter, char *buffer, ULONG len, ULONG flags) -{ - return CM_Get_Device_ID_List_ExA(filter, buffer, len, flags, NULL); -} - -/*********************************************************************** - * CM_Get_Device_ID_List_Size_ExA (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA(ULONG *len, const char *filter, ULONG flags, HMACHINE machine) -{ - WCHAR *wfilter = NULL; - unsigned int slen; - CONFIGRET ret; - - TRACE("%p %s %#lx.\n", len, debugstr_a(filter), flags); - - if (machine) - FIXME("machine %p.\n", machine); - - if (filter) - { - slen = strlen(filter) + 1; - if (!(wfilter = malloc(slen * sizeof(*wfilter)))) - return CR_OUT_OF_MEMORY; - MultiByteToWideChar(CP_ACP, 0, filter, slen, wfilter, slen); - } - ret = CM_Get_Device_ID_List_SizeW(len, wfilter, flags); - free(wfilter); - return ret; -} - -/*********************************************************************** - * CM_Get_Device_ID_List_SizeA (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA(ULONG *len, const char *filter, ULONG flags) -{ - return CM_Get_Device_ID_List_Size_ExA(len, filter, flags, NULL); -} - /*********************************************************************** * SetupDiGetINFClassA (SETUPAPI.@) */ diff --git a/dlls/setupapi/setupapi.spec b/dlls/setupapi/setupapi.spec index 4c47b2ffe70..f1ebdb0efa4 100644 --- a/dlls/setupapi/setupapi.spec +++ b/dlls/setupapi/setupapi.spec @@ -79,14 +79,14 @@ @ stdcall CM_Get_Device_IDW(ptr ptr long long) cfgmgr32.CM_Get_Device_IDW @ stdcall CM_Get_Device_ID_ExA(ptr ptr long long ptr) cfgmgr32.CM_Get_Device_ID_ExA @ stdcall CM_Get_Device_ID_ExW(ptr ptr long long ptr) cfgmgr32.CM_Get_Device_ID_ExW -@ stdcall CM_Get_Device_ID_ListA(str ptr long long) -@ stdcall CM_Get_Device_ID_ListW(wstr ptr long long) -@ stdcall CM_Get_Device_ID_List_ExA(str ptr long long ptr) -@ stdcall CM_Get_Device_ID_List_ExW(wstr ptr long long ptr) -@ stdcall CM_Get_Device_ID_List_SizeA(ptr str long) -@ stdcall CM_Get_Device_ID_List_SizeW(ptr wstr long) -@ stdcall CM_Get_Device_ID_List_Size_ExA(ptr str long ptr) -@ stdcall CM_Get_Device_ID_List_Size_ExW(ptr wstr long ptr) +@ stdcall CM_Get_Device_ID_ListA(str ptr long long) cfgmgr32.CM_Get_Device_ID_ListA +@ stdcall CM_Get_Device_ID_ListW(wstr ptr long long) cfgmgr32.CM_Get_Device_ID_ListW +@ stdcall CM_Get_Device_ID_List_ExA(str ptr long long ptr) cfgmgr32.CM_Get_Device_ID_List_ExA +@ stdcall CM_Get_Device_ID_List_ExW(wstr ptr long long ptr) cfgmgr32.CM_Get_Device_ID_List_ExW +@ stdcall CM_Get_Device_ID_List_SizeA(ptr str long) cfgmgr32.CM_Get_Device_ID_List_SizeA +@ stdcall CM_Get_Device_ID_List_SizeW(ptr wstr long) cfgmgr32.CM_Get_Device_ID_List_SizeW +@ stdcall CM_Get_Device_ID_List_Size_ExA(ptr str long ptr) cfgmgr32.CM_Get_Device_ID_List_Size_ExA +@ stdcall CM_Get_Device_ID_List_Size_ExW(ptr wstr long ptr) cfgmgr32.CM_Get_Device_ID_List_Size_ExW @ stdcall CM_Get_Device_ID_Size(ptr ptr long) cfgmgr32.CM_Get_Device_ID_Size @ stdcall CM_Get_Device_ID_Size_Ex(ptr ptr long ptr) cfgmgr32.CM_Get_Device_ID_Size_Ex @ stdcall CM_Get_Device_Interface_AliasA(str ptr ptr ptr long) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10584