From: Sven Baars sbaars@codeweavers.com
--- dlls/kernelbase/registry.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/dlls/kernelbase/registry.c b/dlls/kernelbase/registry.c index 2cded4ede6b..3c2352a3a16 100644 --- a/dlls/kernelbase/registry.c +++ b/dlls/kernelbase/registry.c @@ -240,11 +240,10 @@ static NTSTATUS open_key( HKEY *retkey, DWORD options, ACCESS_MASK access, OBJEC static NTSTATUS create_key( HKEY *retkey, ACCESS_MASK access, OBJECT_ATTRIBUTES *attr, const UNICODE_STRING *class, ULONG options, PULONG dispos ) { - BOOL force_wow32 = is_win64 && (access & KEY_WOW64_32KEY); NTSTATUS status = STATUS_OBJECT_NAME_NOT_FOUND; HANDLE subkey, root = attr->RootDirectory;
- if (!force_wow32) + if (!(is_win64 && (access & KEY_WOW64_32KEY))) { if (options & REG_OPTION_OPEN_LINK) attr->Attributes |= OBJ_OPENLINK; status = NtCreateKey( (HANDLE *)retkey, access, attr, 0, class, options, dispos ); @@ -296,16 +295,14 @@ static NTSTATUS create_key( HKEY *retkey, ACCESS_MASK access, OBJECT_ATTRIBUTES buffer += i; len -= i;
- if (force_wow32) + str.Buffer = buffer; + str.Length = len * sizeof(WCHAR); + if (!is_wow6432node( &str )) { - str.Buffer = buffer; - str.Length = len * sizeof(WCHAR); - if (is_wow6432node( &str )) force_wow32 = FALSE; - else if ((subkey = open_wow6432node( attr->RootDirectory ))) + if ((subkey = open_wow6432node( attr->RootDirectory ))) { NtClose( attr->RootDirectory ); attr->RootDirectory = subkey; - force_wow32 = FALSE; } } }