From: Vibhav Pant vibhavp@gmail.com
--- dlls/setupapi/devinst.c | 4 +++- dlls/setupapi/tests/devinst.c | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index 7083688e5db..066bd6f09c2 100644 --- a/dlls/setupapi/devinst.c +++ b/dlls/setupapi/devinst.c @@ -3115,8 +3115,10 @@ static DWORD get_device_reg_properties( HKEY base_key, DEVPROPKEY *buf, DWORD bu LSTATUS ls; DWORD i, count = 0;
+ if (req_len) + *req_len = 0; if ((ls = RegOpenKeyExW( base_key, L"Properties", 0, KEY_ENUMERATE_SUB_KEYS, &properties ))) - return ls; + return ls == ERROR_FILE_NOT_FOUND ? ERROR_SUCCESS : ls;
keys = malloc( sizeof( *keys ) * buf_len ); if (!keys && buf_len) diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c index 2f46e5beb95..ed9d197e3bd 100644 --- a/dlls/setupapi/tests/devinst.c +++ b/dlls/setupapi/tests/devinst.c @@ -2823,6 +2823,13 @@ static void test_device_interface_properties(void) err = GetLastError(); ok(!ret && err == ERROR_NOT_FOUND, "%lu != %d\n", err, ERROR_NOT_FOUND);
+ /* Should return built-in property keys even when the "Properties" subkey for the interface hasn't been created */ + req = 0; + ret = SetupDiGetDeviceInterfacePropertyKeys(set, &iface, NULL, 0, &req, 0); + err = GetLastError(); + ok(!ret && err == ERROR_INSUFFICIENT_BUFFER, "%lu != %d\n", err, ERROR_INSUFFICIENT_BUFFER); + ok(req >= ARRAY_SIZE(default_keys), "got req %lu, should be >= %lu\n", req, (DWORD)ARRAY_SIZE(default_keys)); + ret = SetupDiSetDeviceInterfacePropertyW(set, &iface, &DEVPKEY_DeviceInterface_FriendlyName, DEVPROP_TYPE_STRING, (const BYTE *)str, sizeof(str), 0); err = GetLastError(); @@ -2910,7 +2917,7 @@ static void test_device_interface_properties(void) req = 0; ret = SetupDiGetDeviceInterfacePropertyKeys(set, &iface, NULL, 0, &req, 0); err = GetLastError(); - ok(!ret && err == ERROR_INSUFFICIENT_BUFFER, "%lu != %d\n", err, ERROR_INVALID_FLAGS); + ok(!ret && err == ERROR_INSUFFICIENT_BUFFER, "%lu != %d\n", err, ERROR_INSUFFICIENT_BUFFER);
size = req; keys = calloc(size, sizeof(*keys));