static NTSTATUS MapDefaultKey (PHANDLE ParentKey, HKEY Key);
static VOID CloseDefaultKeys(VOID);
-#define CloseDefaultKey(Handle) \
+#define ClosePredefKey(Handle) \
if ((ULONG_PTR)Handle & 0x1) { \
NtClose(Handle); \
}
+#define IsPredefKey(HKey) \
+ (((ULONG)(HKey) & 0xF0000000) == 0x80000000)
+#define GetPredefKeyIndex(HKey) \
+ ((ULONG)(HKey) & 0x0FFFFFFF)
static NTSTATUS OpenClassesRootKey(PHANDLE KeyHandle);
static NTSTATUS OpenLocalMachineKey (PHANDLE KeyHandle);
TRACE("MapDefaultKey (Key %x)\n", Key);
- if (((ULONG)Key & 0xF0000000) != 0x80000000)
+ if (!IsPredefKey(Key))
{
*RealKey = (HANDLE)((ULONG_PTR)Key & ~0x1);
return STATUS_SUCCESS;
}
/* Handle special cases here */
- Index = (ULONG)Key & 0x0FFFFFFF;
+ Index = GetPredefKeyIndex(Key);
if (Index >= MAX_DEFAULT_HANDLES)
{
return STATUS_INVALID_PARAMETER;
{
LONG ErrorCode = ERROR_SUCCESS;
- if (hKey == HKEY_CLASSES_ROOT ||
- hKey == HKEY_CURRENT_CONFIG ||
- hKey == HKEY_CURRENT_USER ||
- hKey == HKEY_LOCAL_MACHINE ||
- hKey == HKEY_PERFORMANCE_DATA ||
- hKey == HKEY_USERS)
+ if ((hKey == HKEY_CLASSES_ROOT ||
+ hKey == HKEY_CURRENT_CONFIG ||
+ hKey == HKEY_CURRENT_USER ||
+ hKey == HKEY_LOCAL_MACHINE ||
+ hKey == HKEY_PERFORMANCE_DATA ||
+ hKey == HKEY_USERS) &&
+ !IsPredefKey(hNewHKey))
{
PHANDLE Handle;
ULONG Index;
- Index = (ULONG)hKey & 0x0FFFFFFF;
+ Index = GetPredefKeyIndex(hKey);
Handle = &DefaultHandleTable[Index];
if (hNewHKey == NULL)
}
Cleanup:
- CloseDefaultKey(DestKeyHandle);
+ ClosePredefKey(DestKeyHandle);
Cleanup2:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
RtlFreeUnicodeString (&ClassString);
}
- CloseDefaultKey(ParentKey);
+ ClosePredefKey(ParentKey);
TRACE("Status %x\n", Status);
if (!NT_SUCCESS(Status))
samDesired,
lpdwDisposition);
- CloseDefaultKey(ParentKey);
+ ClosePredefKey(ParentKey);
TRACE("Status %x\n", Status);
if (!NT_SUCCESS(Status))
NtClose (TargetKey);
Cleanup:
- CloseDefaultKey(ParentKey);
+ ClosePredefKey(ParentKey);
if (!NT_SUCCESS(Status))
{
NtClose (TargetKey);
Cleanup:
- CloseDefaultKey(ParentKey);
+ ClosePredefKey(ParentKey);
if (!NT_SUCCESS(Status))
{
}
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
subkey, because the handle would be invalid already! */
if (CurKey != KeyHandle)
{
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
}
return ERROR_SUCCESS;
}
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return RtlNtStatusToDosError(Status);
}
}
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return Ret;
}
}
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return Ret;
}
&ValueName);
RtlFreeUnicodeString (&ValueName);
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
Status = NtDeleteValueKey (KeyHandle,
&ValueName);
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
KeyInfo);
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
KeyInfo);
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
done:
if (buf_ptr != buffer) HeapFree( GetProcessHeap(), 0, buf_ptr );
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return RtlNtStatusToDosError(status);
}
done:
if (buf_ptr != buffer) HeapFree( GetProcessHeap(), 0, buf_ptr );
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return RtlNtStatusToDosError(status);
}
Status = NtFlushKey (KeyHandle);
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
*lpcbSecurityDescriptor,
lpcbSecurityDescriptor);
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
}
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
ErrorCode = RtlNtStatusToDosError (Status);
}
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
ErrorCode = RtlNtStatusToDosError (Status);
}
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
ErrorCode = RtlNtStatusToDosError (Status);
}
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
}
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
ValueInfo);
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
}
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
}
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
NtClose (FileHandle);
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
NtClose (FileHandle);
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
SecurityInformation,
pSecurityDescriptor);
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
(PVOID)lpData,
(ULONG)cbData);
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{
}
Cleanup:
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
return ErrorCode;
}
Status = NtUnloadKey (&ObjectAttributes);
- CloseDefaultKey(KeyHandle);
+ ClosePredefKey(KeyHandle);
if (!NT_SUCCESS(Status))
{