From 0fddbdff46f9a3a5d590029cd29d86ab65fb377e Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Mon, 24 Sep 2007 13:00:42 -0700 Subject: [PATCH] Partially implement SetupDiGetClassDevsExW --- dlls/setupapi/devinst.c | 32 ++++++++++++++++++++++++++++++-- 1 files changed, 30 insertions(+), 2 deletions(-) diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index 85ef0ac..0df3b70 100644 --- a/dlls/setupapi/devinst.c +++ b/dlls/setupapi/devinst.c @@ -2098,8 +2098,36 @@ HDEVINFO WINAPI SetupDiGetClassDevsExW( PCWSTR machine, PVOID reserved) { - FIXME("stub\n"); - return NULL; + static const DWORD unsupportedFlags = DIGCF_DEFAULT | DIGCF_PRESENT | + DIGCF_PROFILE; + HDEVINFO set; + + TRACE("%s %s %p 0x%08x %p %s %p\n", debugstr_guid(class), + debugstr_w(enumstr), parent, flags, deviceset, debugstr_w(machine), + reserved); + + if (!(flags & DIGCF_ALLCLASSES) && !class) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + if (flags & unsupportedFlags) + WARN("unsupported flags %08x\n", flags & unsupportedFlags); + if (deviceset) + set = deviceset; + else + set = SetupDiCreateDeviceInfoListExW(class, parent, machine, reserved); + if (set) + { + if (machine) + FIXME("%s: unimplemented for remote machines\n", + debugstr_w(machine)); + else if (flags & DIGCF_DEVICEINTERFACE) + SETUPDI_EnumerateInterfaces(set, class, enumstr, flags); + else + SETUPDI_EnumerateDevices(set, class, enumstr, flags); + } + return set; } /*********************************************************************** -- 1.4.1