msi: Check the user component key for the clients.
This commit is contained in:
parent
5f7b95dadd
commit
fced2fee2f
|
@ -1317,9 +1317,9 @@ UINT WINAPI MsiEnumClientsW(LPCWSTR szComponent, DWORD index, LPWSTR szProduct)
|
||||||
if (!szComponent || !*szComponent || !szProduct)
|
if (!szComponent || !*szComponent || !szProduct)
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
r = MSIREG_OpenComponentsKey(szComponent,&hkeyComp,FALSE);
|
r = MSIREG_OpenUserDataComponentKey(szComponent, &hkeyComp, FALSE);
|
||||||
if (r != ERROR_SUCCESS)
|
if (r != ERROR_SUCCESS)
|
||||||
return ERROR_NO_MORE_ITEMS;
|
return ERROR_UNKNOWN_COMPONENT;
|
||||||
|
|
||||||
sz = SQUISH_GUID_SIZE;
|
sz = SQUISH_GUID_SIZE;
|
||||||
r = RegEnumValueW(hkeyComp, index, szValName, &sz, NULL, NULL, NULL, NULL);
|
r = RegEnumValueW(hkeyComp, index, szValName, &sz, NULL, NULL, NULL, NULL);
|
||||||
|
|
|
@ -1628,10 +1628,7 @@ static void test_MsiEnumClients(void)
|
||||||
/* all params correct, component missing */
|
/* all params correct, component missing */
|
||||||
product[0] = '\0';
|
product[0] = '\0';
|
||||||
r = MsiEnumClientsA(component, 0, product);
|
r = MsiEnumClientsA(component, 0, product);
|
||||||
todo_wine
|
|
||||||
{
|
|
||||||
ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r);
|
ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r);
|
||||||
}
|
|
||||||
ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product);
|
ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product);
|
||||||
|
|
||||||
lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\");
|
lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\");
|
||||||
|
@ -1666,20 +1663,14 @@ static void test_MsiEnumClients(void)
|
||||||
|
|
||||||
/* product value exists */
|
/* product value exists */
|
||||||
r = MsiEnumClientsA(component, 0, product);
|
r = MsiEnumClientsA(component, 0, product);
|
||||||
todo_wine
|
|
||||||
{
|
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product);
|
ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product);
|
||||||
}
|
|
||||||
|
|
||||||
/* try index 0 again */
|
/* try index 0 again */
|
||||||
product[0] = '\0';
|
product[0] = '\0';
|
||||||
r = MsiEnumClientsA(component, 0, product);
|
r = MsiEnumClientsA(component, 0, product);
|
||||||
todo_wine
|
|
||||||
{
|
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product);
|
ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product);
|
||||||
}
|
|
||||||
|
|
||||||
/* try index 1, second product value does not exist */
|
/* try index 1, second product value does not exist */
|
||||||
product[0] = '\0';
|
product[0] = '\0';
|
||||||
|
@ -1696,27 +1687,22 @@ static void test_MsiEnumClients(void)
|
||||||
todo_wine
|
todo_wine
|
||||||
{
|
{
|
||||||
ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
|
||||||
}
|
|
||||||
ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product);
|
ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product);
|
||||||
|
}
|
||||||
|
|
||||||
/* start the enumeration over */
|
/* start the enumeration over */
|
||||||
product[0] = '\0';
|
product[0] = '\0';
|
||||||
r = MsiEnumClientsA(component, 0, product);
|
r = MsiEnumClientsA(component, 0, product);
|
||||||
todo_wine
|
|
||||||
{
|
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
ok(!lstrcmpA(product, prodcode) || !lstrcmpA(product, prodcode2),
|
ok(!lstrcmpA(product, prodcode) || !lstrcmpA(product, prodcode2),
|
||||||
"Expected %s or %s, got %s\n", prodcode, prodcode2, product);
|
"Expected %s or %s, got %s\n", prodcode, prodcode2, product);
|
||||||
}
|
|
||||||
/* correctly query second product */
|
/* correctly query second product */
|
||||||
product[0] = '\0';
|
product[0] = '\0';
|
||||||
r = MsiEnumClientsA(component, 1, product);
|
r = MsiEnumClientsA(component, 1, product);
|
||||||
todo_wine
|
|
||||||
{
|
|
||||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||||
ok(!lstrcmpA(product, prodcode) || !lstrcmpA(product, prodcode2),
|
ok(!lstrcmpA(product, prodcode) || !lstrcmpA(product, prodcode2),
|
||||||
"Expected %s or %s, got %s\n", prodcode, prodcode2, product);
|
"Expected %s or %s, got %s\n", prodcode, prodcode2, product);
|
||||||
}
|
|
||||||
|
|
||||||
RegDeleteValueA(compkey, prod_squashed);
|
RegDeleteValueA(compkey, prod_squashed);
|
||||||
RegDeleteValueA(compkey, prod2_squashed);
|
RegDeleteValueA(compkey, prod2_squashed);
|
||||||
|
@ -1733,10 +1719,7 @@ static void test_MsiEnumClients(void)
|
||||||
/* user local component key exists */
|
/* user local component key exists */
|
||||||
product[0] = '\0';
|
product[0] = '\0';
|
||||||
r = MsiEnumClientsA(component, 0, product);
|
r = MsiEnumClientsA(component, 0, product);
|
||||||
todo_wine
|
|
||||||
{
|
|
||||||
ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r);
|
ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r);
|
||||||
}
|
|
||||||
ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product);
|
ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product);
|
||||||
|
|
||||||
/* index > 0, no products exist */
|
/* index > 0, no products exist */
|
||||||
|
@ -1772,7 +1755,10 @@ static void test_MsiEnumClients(void)
|
||||||
/* try index 1, second product value does not exist */
|
/* try index 1, second product value does not exist */
|
||||||
product[0] = '\0';
|
product[0] = '\0';
|
||||||
r = MsiEnumClientsA(component, 1, product);
|
r = MsiEnumClientsA(component, 1, product);
|
||||||
|
todo_wine
|
||||||
|
{
|
||||||
ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
|
ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
|
||||||
|
}
|
||||||
ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product);
|
ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product);
|
||||||
|
|
||||||
res = RegSetValueExA(compkey, prod2_squashed, 0, REG_SZ, (const BYTE *)"C:\\another", 10);
|
res = RegSetValueExA(compkey, prod2_squashed, 0, REG_SZ, (const BYTE *)"C:\\another", 10);
|
||||||
|
|
Loading…
Reference in New Issue