From cf6a3693d4b25ab8348912b0d7cb7f474fcb23b4 Mon Sep 17 00:00:00 2001 From: Jan Oltmann Date: Thu, 12 Feb 2026 09:12:18 +0100 Subject: [PATCH] Add 32-bit registry flags to key_access enum The key_access enum was missing values to access the 32-bit view of the registry from a 64-bit process. Add missing read32, write32 and readwrite32 values that map to KEY_READ/WRITE/ALL_ACCESS | KEY_WOW64_32KEY respectively. --- include/wil/registry_helpers.h | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/include/wil/registry_helpers.h b/include/wil/registry_helpers.h index f796864f..fc26ba86 100644 --- a/include/wil/registry_helpers.h +++ b/include/wil/registry_helpers.h @@ -65,7 +65,7 @@ namespace reg // Access rights for opening registry keys. See https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry-key-security-and-access-rights. enum class key_access { - // Open key for reading. + // Open key for reading. Equivalent to KEY_READ. read, // Open key for writing. Equivalent to KEY_WRITE. @@ -74,14 +74,23 @@ namespace reg // Open key for reading and writing. Equivalent to KEY_ALL_ACCESS. readwrite, - // Open key for reading from 64-bit registry. + // Open key for reading from 64-bit registry. Equivalent to KEY_READ | KEY_WOW64_64KEY. read64, // Open key for writing from 64-bit registry. Equivalent to KEY_WRITE | KEY_WOW64_64KEY. write64, - // Open key for reading and writing from 64-bit registry. Equivalent to KEY_ALL_ACCESS. + // Open key for reading and writing from 64-bit registry. Equivalent to KEY_ALL_ACCESS | KEY_WOW64_64KEY. readwrite64, + + // Open key for reading from 32-bit registry. Equivalent to KEY_READ | KEY_WOW64_32KEY. + read32, + + // Open key for writing from 32-bit registry. Equivalent to KEY_WRITE | KEY_WOW64_32KEY. + write32, + + // Open key for reading and writing from 32-bit registry. Equivalent to KEY_ALL_ACCESS | KEY_WOW64_32KEY. + readwrite32, }; /// @cond @@ -125,6 +134,12 @@ namespace reg return KEY_WRITE | KEY_WOW64_64KEY; case key_access::readwrite64: return KEY_ALL_ACCESS | KEY_WOW64_64KEY; + case key_access::read32: + return KEY_READ | KEY_WOW64_32KEY; + case key_access::write32: + return KEY_WRITE | KEY_WOW64_32KEY; + case key_access::readwrite32: + return KEY_ALL_ACCESS | KEY_WOW64_32KEY; } FAIL_FAST(); RESULT_NORETURN_RESULT(0);