-- -- File System Redirection tests -- local os = System.GetOSVersionInfo(); if (System.Is64BitOS() or String.ToNumber(os.MajorVersion) >= 6) then -- test file system redirection Wow64.DisableFsRedirection(); local error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "File system redirection disabled successfully", MB_OK, MB_ICONINFORMATION); -- create test file in protected folder local target = _WindowsFolder .. "\\System32\\Testfile.txt"; TextFile.WriteFromString(target, "This is a test"); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error].."\r\n"..target, MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", target .. " created successfully", MB_OK, MB_ICONINFORMATION); -- delete test file File.Delete(target, false, false, true); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); end end -- revert file system redirection Wow64.RevertFsRedirection(); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "File system redirection restored successfully", MB_OK, MB_ICONINFORMATION); end -- repeat the test file WITHOUT disabling the FS redirection -- now the file will actually be created in _WindowsFolder\SysWOW64 !!! TextFile.WriteFromString(target, "This is a test"); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error].."\r\n"..target, MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", target .. " created successfully", MB_OK, MB_ICONINFORMATION); -- delete test file File.Delete(target, false, false, true); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); end end end else Dialog.Message("Info", "File system redirection not supported on this OS", MB_OK, MB_ICONINFORMATION); end -- -- Registry access tests -- -- try to disable registry reflection res = Wow64.RegistryDisableReflectionKey(HKEY_LOCAL_MACHINE, "Software"); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "Registry reflection disabled", MB_OK, MB_ICONINFORMATION); end -- try to enable registry reflection res = Wow64.RegistryEnableReflectionKey(HKEY_LOCAL_MACHINE, "Software"); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "Registry reflection enabled", MB_OK, MB_ICONINFORMATION); end local RegistryView = Wow64.KEY64; -- On 64-bit Windows: -- Wow64.KEY64 will create test entries in HKEY_LOCAL_MACHINE\Software\MindQuake\Test -- Wow64.KEY32 will create test entries in HKEY_LOCAL_MACHINE\Software\Wow6432Node\MindQuake\Test -- On 32-bit Windows: -- you may use only Wow64.KEY32 for RegistryView or some functions, like Wow64.RegistryDeleteKey(), -- are not expected to work correctly -- create a registry key local res = Wow64.RegistryCreateKey(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "Registry key created", MB_OK, MB_ICONINFORMATION); end -- set several values of different data types res = Wow64.RegistrySetValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_SZ", "blah", REG_SZ, RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "REG_SZ value was set successfully", MB_OK, MB_ICONINFORMATION); end res = Wow64.RegistrySetValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_DWORD", 123456789, REG_DWORD, RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "REG_DWORD value was set successfully", MB_OK, MB_ICONINFORMATION); end res = Wow64.RegistrySetValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_BINARY", "00 01 02 03 04 05 06 07 08", REG_BINARY, RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "REG_BINARY value was set successfully", MB_OK, MB_ICONINFORMATION); end res = Wow64.RegistrySetValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_MULTI_SZ", "Line1|Line2|Line3", REG_MULTI_SZ, RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "REG_MULTI_SZ value was set successfully", MB_OK, MB_ICONINFORMATION); end res = Wow64.RegistrySetValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_EXPAND_SZ", "%UserProfile%", REG_EXPAND_SZ, RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "REG_EXPAND_SZ value was set successfully", MB_OK, MB_ICONINFORMATION); end -- get key names tKeyNames = Wow64.RegistryGetKeyNames(HKEY_LOCAL_MACHINE, "Software\\MindQuake", RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else if (Table.Count(tKeyNames) > 0) then for i,name in pairs(tKeyNames) do Dialog.Message("Info", "Key "..i..": "..name, MB_OK, MB_ICONINFORMATION); end else Dialog.Message("Info", "No keys found", MB_OK, MB_ICONINFORMATION); end end -- read value names tValueNames = Wow64.RegistryGetValueNames(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else if (Table.Count(tValueNames) > 0) then for i,name in pairs(tValueNames) do Dialog.Message("Info", "Value "..i..": "..name, MB_OK, MB_ICONINFORMATION); end else Dialog.Message("Info", "No values found", MB_OK, MB_ICONINFORMATION); end end -- get value type res = Wow64.RegistryGetValueType(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_SZ", RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "Dummy_REG_SZ is type "..res, MB_OK, MB_ICONINFORMATION); end -- get values res = Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_EXPAND_SZ", true, RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "Dummy_REG_EXPAND_SZ contains "..res, MB_OK, MB_ICONINFORMATION); end res = Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_DWORD", true, RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "Dummy_REG_DWORD contains "..res, MB_OK, MB_ICONINFORMATION); end res = Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_MULTI_SZ", true, RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "Dummy_REG_MULTI_SZ contains "..res, MB_OK, MB_ICONINFORMATION); end res = Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_BINARY", true, RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "Dummy_REG_BINARY contains "..res, MB_OK, MB_ICONINFORMATION); end -- check if key exists res = Wow64.RegistryDoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else if res then Dialog.Message("Info", "Registry key does exist", MB_OK, MB_ICONINFORMATION); else Dialog.Message("Info", "Registry key does not exist", MB_OK, MB_ICONINFORMATION); end end -- delete value res = Wow64.RegistryDeleteValue(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", "Dummy_REG_SZ", RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "REG_SZ value was deleted successfully", MB_OK, MB_ICONINFORMATION); end -- delete test key and data res = Wow64.RegistryDeleteKey(HKEY_LOCAL_MACHINE, "Software\\MindQuake\\Test", RegistryView); error = Application.GetLastError(); if (error ~= 0) then Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION); else Dialog.Message("Info", "Registry key deleted successfully", MB_OK, MB_ICONINFORMATION); end Application.Exit();