[PATCH 3/7] setupapi: Implement directory search in SetupDiBuildDriverInfoList().
Zebediah Figura
z.figura12 at gmail.com
Mon May 20 23:55:45 CDT 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/setupapi/devinst.c | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 1b93d4be74..b72ae7cf55 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -101,6 +101,7 @@ static const WCHAR Phantom[] = {'P','h','a','n','t','o','m',0};
static const WCHAR SymbolicLink[] = {'S','y','m','b','o','l','i','c','L','i','n','k',0};
static const WCHAR Control[] = {'C','o','n','t','r','o','l',0};
static const WCHAR Linked[] = {'L','i','n','k','e','d',0};
+static const WCHAR backslashW[] = {'\\',0};
static const WCHAR emptyW[] = {0};
struct driver
@@ -4268,9 +4269,32 @@ BOOL WINAPI SetupDiBuildDriverInfoList(HDEVINFO devinfo, SP_DEVINFO_DATA *device
}
else
{
- FIXME("Searching in a directory is not yet implemented.\n");
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ static const WCHAR default_path[] = {'C',':','/','w','i','n','d','o','w','s','/','i','n','f',0};
+ static const WCHAR wildcardW[] = {'*',0};
+ WCHAR dir[MAX_PATH], file[MAX_PATH];
+ WIN32_FIND_DATAW find_data;
+ HANDLE find_handle;
+
+ if (device->params.DriverPath[0])
+ strcpyW(dir, device->params.DriverPath);
+ else
+ strcpyW(dir, default_path);
+ strcatW(dir, backslashW);
+ strcatW(dir, wildcardW);
+
+ TRACE("Searching for drivers in %s.\n", debugstr_w(dir));
+
+ if ((find_handle = FindFirstFileW(dir, &find_data)) != INVALID_HANDLE_VALUE)
+ {
+ do
+ {
+ strcpyW(file, dir);
+ strcpyW(file + strlenW(file) - 1, find_data.cFileName);
+ enum_compat_drivers_from_file(device, file);
+ } while (FindNextFileW(find_handle, &find_data));
+
+ FindClose(find_handle);
+ }
}
return TRUE;
--
2.21.0
More information about the wine-devel
mailing list