[2/5] setupapi: Changing pointers on SP_DEVINFO_DATA
Alexander Morozov
amorozov at etersoft.ru
Wed Apr 2 09:47:55 CDT 2008
> > SETUPDI_AddDeviceToSet: changing pointers on SP_DEVINFO_DATA after
> > allocating new memory block for their array
>
> We shouldn't have to do that sort of thing. The data structure should be
> fixed to store pointers that don't have to be moved around.
Should modify DeviceInfoSet and _SP_DEVINFO_DATA structures?
Without this patch so modified testRegisterAndGetDetail crashes:
--- a/dlls/setupapi/tests/devinst.c
+++ b/dlls/setupapi/tests/devinst.c
@@ -777,22 +777,26 @@ static void testRegisterAndGetDetail(voi
SP_DEVINFO_DATA devInfo = { sizeof(SP_DEVINFO_DATA), { 0 } };
SP_DEVICE_INTERFACE_DATA interfaceData = { sizeof(interfaceData), {
0 } };
DWORD dwSize = 0;
+ DWORD i;
SetLastError(0xdeadbeef);
set = pSetupDiGetClassDevsA(&guid, NULL, 0, DIGCF_ALLCLASSES);
ok(set != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsA failed: %08x\n",
GetLastError());
- SetLastError(0xdeadbeef);
- ret = pSetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid, NULL, 0,
- DICD_GENERATE_ID, &devInfo);
- ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError());
- SetLastError(0xdeadbeef);
- ret = pSetupDiCreateDeviceInterfaceA(set, &devInfo, &guid, NULL, 0,
&interfaceData);
- ok(ret, "SetupDiCreateDeviceInterfaceA failed: %08x\n", GetLastError());
- SetLastError(0xdeadbeef);
- ret = pSetupDiRegisterDeviceInfo(set, &devInfo, 0, NULL, NULL, NULL);
- ok(ret, "SetupDiRegisterDeviceInfo failed: %08x\n", GetLastError());
+ for (i = 0; i < 10; ++i)
+ {
+ SetLastError(0xdeadbeef);
+ ret = pSetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid, NULL, 0,
+ DICD_GENERATE_ID, &devInfo);
+ ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError());
+ SetLastError(0xdeadbeef);
+ ret = pSetupDiCreateDeviceInterfaceA(set, &devInfo, &guid, NULL, 0,
&interfaceData);
+ ok(ret, "SetupDiCreateDeviceInterfaceA failed: %08x\n",
GetLastError());
+ SetLastError(0xdeadbeef);
+ ret = pSetupDiRegisterDeviceInfo(set, &devInfo, 0, NULL, NULL, NULL);
+ ok(ret, "SetupDiRegisterDeviceInfo failed: %08x\n", GetLastError());
+ }
pSetupDiDestroyDeviceInfoList(set);
More information about the wine-devel
mailing list