https://git.reactos.org/?p=reactos.git;a=commitdiff;h=435274d1ecb9eb2fb629bd5c49224f649246eebe

commit 435274d1ecb9eb2fb629bd5c49224f649246eebe
Author:     winesync <ros-...@reactos.org>
AuthorDate: Sun Mar 13 01:23:59 2022 +0100
Commit:     Mark Jansen <mark.jan...@reactos.org>
CommitDate: Sun Mar 20 19:28:19 2022 +0100

    [WINESYNC] msi: Fix architecture handling in the AppSearch action.
    
    Signed-off-by: Hans Leidekker <h...@codeweavers.com>
    Signed-off-by: Alexandre Julliard <julli...@winehq.org>
    
    wine commit id eb508e5a014f59fbb2c70d9909ba0870ce2b901a by Hans Leidekker 
<h...@codeweavers.com>
---
 dll/win32/msi/appsearch.c                |  7 ++++--
 modules/rostests/winetests/msi/package.c | 37 +++++++++++++++++++++++++++++++-
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/dll/win32/msi/appsearch.c b/dll/win32/msi/appsearch.c
index 047085d1f39..6b1768e8af2 100644
--- a/dll/win32/msi/appsearch.c
+++ b/dll/win32/msi/appsearch.c
@@ -372,6 +372,7 @@ static UINT search_reg( MSIPACKAGE *package, WCHAR 
**appValue, MSISIGNATURE *sig
     const WCHAR *keyPath, *valueName;
     WCHAR *deformatted = NULL, *ptr = NULL, *end;
     int root, type;
+    REGSAM access = KEY_READ;
     HKEY rootKey, key = NULL;
     DWORD sz = 0, regType;
     LPBYTE value = NULL;
@@ -406,6 +407,8 @@ static UINT search_reg( MSIPACKAGE *package, WCHAR 
**appValue, MSISIGNATURE *sig
         break;
     case msidbRegistryRootLocalMachine:
         rootKey = HKEY_LOCAL_MACHINE;
+        if (type & msidbLocatorType64bit) access |= KEY_WOW64_64KEY;
+        else access |= KEY_WOW64_32KEY;
         break;
     case msidbRegistryRootUsers:
         rootKey = HKEY_USERS;
@@ -415,10 +418,10 @@ static UINT search_reg( MSIPACKAGE *package, WCHAR 
**appValue, MSISIGNATURE *sig
         goto end;
     }
 
-    rc = RegOpenKeyW(rootKey, deformatted, &key);
+    rc = RegOpenKeyExW( rootKey, deformatted, 0, access, &key );
     if (rc)
     {
-        TRACE("RegOpenKeyW returned %d\n", rc);
+        TRACE("RegOpenKeyExW returned %d\n", rc);
         goto end;
     }
 
diff --git a/modules/rostests/winetests/msi/package.c 
b/modules/rostests/winetests/msi/package.c
index d5f156825df..593e254405c 100644
--- a/modules/rostests/winetests/msi/package.c
+++ b/modules/rostests/winetests/msi/package.c
@@ -4036,6 +4036,8 @@ static void test_appsearch(void)
     add_appsearch_entry( hdb, "'WEBBROWSERPROG', 'NewSignature1'" );
     add_appsearch_entry( hdb, "'NOTEPAD', 'NewSignature2'" );
     add_appsearch_entry( hdb, "'REGEXPANDVAL', 'NewSignature3'" );
+    add_appsearch_entry( hdb, "'32KEYVAL', 'NewSignature4'" );
+    add_appsearch_entry( hdb, "'64KEYVAL', 'NewSignature5'" );
 
     create_reglocator_table( hdb );
     add_reglocator_entry( hdb, "NewSignature1", 0, 
"htmlfile\\shell\\open\\command", "", 1 );
@@ -4045,7 +4047,26 @@ static void test_appsearch(void)
     r = RegSetValueExA(hkey, NULL, 0, REG_EXPAND_SZ, (const 
BYTE*)reg_expand_value, strlen(reg_expand_value) + 1);
     ok( r == ERROR_SUCCESS, "Could not set key value: %d.\n", r);
     RegCloseKey(hkey);
-    add_reglocator_entry( hdb, "NewSignature3", 1, "Software\\Winetest_msi", 
"", 1 );
+    add_reglocator_entry( hdb, "NewSignature3", 1, "Software\\Winetest_msi", 
"", msidbLocatorTypeFileName );
+
+    r = RegCreateKeyExA(HKEY_LOCAL_MACHINE, "Software\\Winetest_msi", 0, NULL, 
0, KEY_ALL_ACCESS|KEY_WOW64_32KEY,
+                        NULL, &hkey, NULL);
+    ok( r == ERROR_SUCCESS, "Could not create key: %d.\n", r );
+    r = RegSetValueExA(hkey, NULL, 0, REG_SZ, (const BYTE 
*)"c:\\windows\\system32\\notepad.exe",
+                       sizeof("c:\\windows\\system32\\notepad.exe"));
+    ok( r == ERROR_SUCCESS, "Could not set key value: %d.\n", r);
+    RegCloseKey(hkey);
+    add_reglocator_entry( hdb, "NewSignature4", 2, "Software\\Winetest_msi", 
"", msidbLocatorTypeFileName );
+
+    r = RegCreateKeyExA(HKEY_LOCAL_MACHINE, "Software\\Winetest_msi", 0, NULL, 
0, KEY_ALL_ACCESS|KEY_WOW64_64KEY,
+                        NULL, &hkey, NULL);
+    ok( r == ERROR_SUCCESS, "Could not create key: %d.\n", r );
+    r = RegSetValueExA(hkey, NULL, 0, REG_SZ, (const BYTE 
*)"c:\\windows\\system32\\notepad.exe",
+                       sizeof("c:\\windows\\system32\\notepad.exe"));
+    ok( r == ERROR_SUCCESS, "Could not set key value: %d.\n", r);
+    RegCloseKey(hkey);
+    add_reglocator_entry( hdb, "NewSignature5", 2, "Software\\Winetest_msi", 
"",
+                          msidbLocatorTypeFileName|msidbLocatorType64bit );
 
     create_drlocator_table( hdb );
     add_drlocator_entry( hdb, "'NewSignature2', 0, 'c:\\windows\\system32', 0" 
);
@@ -4054,6 +4075,8 @@ static void test_appsearch(void)
     add_signature_entry( hdb, "'NewSignature1', 'FileName', '', '', '', '', 
'', '', ''" );
     add_signature_entry( hdb, "'NewSignature2', 'NOTEPAD.EXE|notepad.exe', '', 
'', '', '', '', '', ''" );
     add_signature_entry( hdb, "'NewSignature3', 'NOTEPAD.EXE|notepad.exe', '', 
'', '', '', '', '', ''" );
+    add_signature_entry( hdb, "'NewSignature4', 'NOTEPAD.EXE|notepad.exe', '', 
'', '', '', '', '', ''" );
+    add_signature_entry( hdb, "'NewSignature5', 'NOTEPAD.EXE|notepad.exe', '', 
'', '', '', '', '', ''" );
 
     r = package_from_db( hdb, &hpkg );
     if (r == ERROR_INSTALL_PACKAGE_REJECTED)
@@ -4086,10 +4109,22 @@ static void test_appsearch(void)
     ok( r == ERROR_SUCCESS, "get property failed: %d\n", r);
     ok( lstrlenA(prop) != 0, "Expected non-zero length\n");
 
+    size = sizeof(prop);
+    r = MsiGetPropertyA( hpkg, "32KEYVAL", prop, &size );
+    ok( r == ERROR_SUCCESS, "get property failed: %d\n", r);
+    ok( lstrlenA(prop) != 0, "Expected non-zero length\n");
+
+    size = sizeof(prop);
+    r = MsiGetPropertyA( hpkg, "64KEYVAL", prop, &size );
+    ok( r == ERROR_SUCCESS, "get property failed: %d\n", r);
+    ok( lstrlenA(prop) != 0, "Expected non-zero length\n");
+
 done:
     MsiCloseHandle( hpkg );
     DeleteFileA(msifile);
     RegDeleteKeyA(HKEY_CURRENT_USER, "Software\\Winetest_msi");
+    delete_key(HKEY_LOCAL_MACHINE, "Software\\Winetest_msi", KEY_WOW64_32KEY);
+    delete_key(HKEY_LOCAL_MACHINE, "Software\\Winetest_msi", KEY_WOW64_64KEY);
 }
 
 static void test_appsearch_complocator(void)

Reply via email to