[PATCH 6/7] setupapi: Set the device class in SetupDiBuildDriverInfoList().
Zebediah Figura
z.figura12 at gmail.com
Mon May 20 23:55:48 CDT 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/setupapi/devinst.c | 14 ++++++++++++++
dlls/setupapi/tests/devinst.c | 20 ++++++++++++++++++++
2 files changed, 34 insertions(+)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 11c12b125b..25bde67752 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -4297,6 +4297,20 @@ BOOL WINAPI SetupDiBuildDriverInfoList(HDEVINFO devinfo, SP_DEVINFO_DATA *device
}
}
+ if (device->driver_count)
+ {
+ WCHAR classname[MAX_CLASS_NAME_LEN], guidstr[39];
+ GUID class;
+
+ if (SetupDiGetINFClassW(device->drivers[0].inf_path, &class, classname, ARRAY_SIZE(classname), NULL))
+ {
+ device_data->ClassGuid = device->class = class;
+ SETUPDI_GuidToString(&class, guidstr);
+ RegSetValueExW(device->key, ClassGUID, 0, REG_SZ, (BYTE *)guidstr, sizeof(guidstr));
+ RegSetValueExW(device->key, Class, 0, REG_SZ, (BYTE *)classname, strlenW(classname) * sizeof(WCHAR));
+ }
+ }
+
return TRUE;
}
diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c
index a717bc08c6..73fdcb1283 100644
--- a/dlls/setupapi/tests/devinst.c
+++ b/dlls/setupapi/tests/devinst.c
@@ -2125,12 +2125,14 @@ static void test_driver_list(void)
SP_DEVINSTALL_PARAMS_A params = {sizeof(params)};
SP_DRVINFO_DATA_A driver = {sizeof(driver)};
SP_DEVINFO_DATA device = {sizeof(device)};
+ char buffer[39];
HDEVINFO set;
BOOL ret;
static const char inf_data[] = "[Version]\n"
"Signature=\"$Chicago$\"\n"
"ClassGuid={6a55b5a4-3f65-11db-b704-0011955c2bdb}\n"
+ "Class=wine test class 1\n"
"[Manufacturer]\n"
"mfg1=mfg1_key,NT" MYEXT "\n"
"mfg2=mfg2_key,NT" MYEXT "\n"
@@ -2157,6 +2159,7 @@ static void test_driver_list(void)
static const char inf_data_file1[] = "[Version]\n"
"Signature=\"$Chicago$\"\n"
"ClassGuid={6a55b5a4-3f65-11db-b704-0011955c2bdb}\n"
+ "Class=wine test class 1\n"
"[Manufacturer]\n"
"mfg1=mfg1_key,NT" MYEXT ",NT" WOWEXT "\n"
"[mfg1_key.nt" MYEXT "]\n"
@@ -2167,6 +2170,7 @@ static void test_driver_list(void)
static const char inf_data_file2[] = "[Version]\n"
"Signature=\"$Chicago$\"\n"
"ClassGuid={6a55b5a5-3f65-11db-b704-0011955c2bdb}\n"
+ "Class=wine test class 2\n"
"[Manufacturer]\n"
"mfg1=mfg1_key,NT" MYEXT ",NT" WOWEXT "\n"
"[mfg1_key.nt" MYEXT "]\n"
@@ -2205,6 +2209,14 @@ static void test_driver_list(void)
ret = SetupDiBuildDriverInfoList(set, &device, SPDIT_COMPATDRIVER);
ok(ret, "Failed to build driver list, error %#x.\n", GetLastError());
+ ok(IsEqualGUID(&device.ClassGuid, &guid), "Got unexpected class %s.\n", wine_dbgstr_guid(&device.ClassGuid));
+ ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_CLASSGUID, NULL, (BYTE *)buffer, sizeof(buffer), NULL);
+ ok(ret, "Failed to get class GUID, error %#x.\n", GetLastError());
+ ok(!strcasecmp(buffer, "{6a55b5a4-3f65-11db-b704-0011955c2bdb}"), "Got unexpected class %s.\n", buffer);
+ ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_CLASS, NULL, (BYTE *)buffer, sizeof(buffer), NULL);
+ ok(ret, "Failed to get class GUID, error %#x.\n", GetLastError());
+ ok(!strcmp(buffer, "wine test class 1"), "Got unexpected class %s.\n", buffer);
+
ret = SetupDiEnumDriverInfoA(set, &device, SPDIT_COMPATDRIVER, 0, &driver);
ok(ret, "Failed to enumerate drivers, error %#x.\n", GetLastError());
ok(driver.DriverType == SPDIT_COMPATDRIVER, "Got wrong type %#x.\n", driver.DriverType);
@@ -2271,6 +2283,14 @@ static void test_driver_list(void)
ret = SetupDiBuildDriverInfoList(set, &device, SPDIT_COMPATDRIVER);
ok(ret, "Failed to build driver list, error %#x.\n", GetLastError());
+ ok(IsEqualGUID(&device.ClassGuid, &guid), "Got unexpected class %s.\n", wine_dbgstr_guid(&device.ClassGuid));
+ ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_CLASSGUID, NULL, (BYTE *)buffer, sizeof(buffer), NULL);
+ ok(ret, "Failed to get class GUID, error %#x.\n", GetLastError());
+ ok(!strcasecmp(buffer, "{6a55b5a4-3f65-11db-b704-0011955c2bdb}"), "Got unexpected class %s.\n", buffer);
+ ret = SetupDiGetDeviceRegistryPropertyA(set, &device, SPDRP_CLASS, NULL, (BYTE *)buffer, sizeof(buffer), NULL);
+ ok(ret, "Failed to get class GUID, error %#x.\n", GetLastError());
+ ok(!strcmp(buffer, "wine test class 1"), "Got unexpected class %s.\n", buffer);
+
ret = SetupDiEnumDriverInfoA(set, &device, SPDIT_COMPATDRIVER, 0, &driver);
ok(ret, "Failed to enumerate drivers, error %#x.\n", GetLastError());
ok(driver.DriverType == SPDIT_COMPATDRIVER, "Got wrong type %#x.\n", driver.DriverType);
--
2.21.0
More information about the wine-devel
mailing list