Juan Lang : setupapi: Add error checking to SetupDiCreateDeviceInfoW stub.
Alexandre Julliard
julliard at winehq.org
Thu Sep 20 10:30:06 CDT 2007
Module: wine
Branch: master
Commit: 1bbfd72afbda1e1b953ac6fef7a396ba5b518209
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1bbfd72afbda1e1b953ac6fef7a396ba5b518209
Author: Juan Lang <juan.lang at gmail.com>
Date: Wed Sep 19 17:49:17 2007 -0700
setupapi: Add error checking to SetupDiCreateDeviceInfoW stub.
---
dlls/setupapi/devinst.c | 41 +++++++++++++++++++++++++++++++++++++++--
dlls/setupapi/tests/devinst.c | 3 ---
2 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index e567670..a1c27dd 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -752,13 +752,50 @@ BOOL WINAPI SetupDiCreateDeviceInfoW(
DWORD CreationFlags,
PSP_DEVINFO_DATA DeviceInfoData)
{
+ struct DeviceInfoSet *set = (struct DeviceInfoSet *)DeviceInfoSet;
+ BOOL ret = FALSE;
+
TRACE("%p %s %s %s %p %x %p\n", DeviceInfoSet, debugstr_w(DeviceName),
debugstr_guid(ClassGuid), debugstr_w(DeviceDescription),
hwndParent, CreationFlags, DeviceInfoData);
- FIXME("stub\n");
+ if (!DeviceName)
+ {
+ SetLastError(ERROR_INVALID_DEVINST_NAME);
+ return FALSE;
+ }
+ if (!DeviceInfoSet || DeviceInfoSet == (HDEVINFO)INVALID_HANDLE_VALUE)
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return FALSE;
+ }
+ if (!ClassGuid)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+ if (set->magic == SETUP_DEVICE_INFO_SET_MAGIC)
+ {
+ if (IsEqualGUID(&set->ClassGuid, &GUID_NULL) ||
+ IsEqualGUID(ClassGuid, &set->ClassGuid))
+ ret = TRUE;
+ else
+ SetLastError(ERROR_CLASS_MISMATCH);
+ if ((CreationFlags & DICD_GENERATE_ID) && strchrW(DeviceName, '\\'))
+ {
+ SetLastError(ERROR_INVALID_DEVINST_NAME);
+ ret = FALSE;
+ }
+ if (ret)
+ {
+ FIXME("stub\n");
+ ret = FALSE;
+ }
+ }
+ else
+ SetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
+ return ret;
}
/***********************************************************************
diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c
index e8fdc33..05d42d8 100644
--- a/dlls/setupapi/tests/devinst.c
+++ b/dlls/setupapi/tests/devinst.c
@@ -146,13 +146,11 @@ static void testCreateDeviceInfo(void)
}
SetLastError(0xdeadbeef);
ret = pSetupDiCreateDeviceInfoA(NULL, NULL, NULL, NULL, NULL, 0, NULL);
- todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_DEVINST_NAME,
"Expected ERROR_INVALID_DEVINST_NAME, got %08x\n", GetLastError());
SetLastError(0xdeadbeef);
ret = pSetupDiCreateDeviceInfoA(NULL, "Root\\LEGACY_BOGUS\\0000", NULL,
NULL, NULL, 0, NULL);
- todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_HANDLE,
"Expected ERROR_INVALID_HANDLEHANDLE, got %08x\n", GetLastError());
set = pSetupDiCreateDeviceInfoList(&guid, NULL);
@@ -166,7 +164,6 @@ static void testCreateDeviceInfo(void)
SetLastError(0xdeadbeef);
ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", NULL,
NULL, NULL, 0, NULL);
- todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError());
/* Finally, with all three required parameters, this succeeds: */
More information about the wine-cvs
mailing list