368 lines
7.1 KiB
C
368 lines
7.1 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
regredir.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module define the APis to redirect 32bit registry calls. All 32bit wow process must
|
||
|
use following set of wowregistry APIs to manipulate registry so that 32-bit and 64-bit registry
|
||
|
can co exist in the same system registry.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
ATM Shafiqul Khalid (askhalid) 15-Oct-1999
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _REGREDIR_H_
|
||
|
#define _REGREDIR_H_
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
typedef CCHAR KPROCESSOR_MODE;
|
||
|
|
||
|
//
|
||
|
// Nt level registry API calls
|
||
|
//
|
||
|
|
||
|
#define REG_OPAQUE_ATTRIB_MIRROR 0x00000001 // need to see the 64 bit side
|
||
|
#define REG_OPAQUE_ATTRIB_REAL 0x00000002 // this is real value
|
||
|
#define DONT_CREATE_DEST_KEY 0x00000004 // Suync only if destination key exist
|
||
|
#define SKIP_SPECIAL_CASE 0x00000008 // Skip special case
|
||
|
|
||
|
#define MAX_KEY_BUFF_LEN STATIC_UNICODE_BUFFER_LENGTH*4
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwSignature;
|
||
|
DWORD dwAttribute;
|
||
|
} REG_OPAQUE_VALUE;
|
||
|
|
||
|
typedef struct {
|
||
|
POBJECT_ATTRIBUTES pObjectAddress; // pointer to the object that that has been patched using this one
|
||
|
PUNICODE_STRING p64bitName; // pointer to the correct unicode object name
|
||
|
HANDLE RootDirectory; // handle to the root directory in case different handle need to pass
|
||
|
UNICODE_STRING PatchedName; // pointer to the buffer holding patched name
|
||
|
PVOID pThis; // pointer to this object to avoid multiple free
|
||
|
SIZE_T Len; // Length of this memory segment including buffer at the end;
|
||
|
} PATCHED_OBJECT_ATTRIB, *PPATCHED_OBJECT_ATTRIB;
|
||
|
|
||
|
BOOL
|
||
|
IsUnderWow64 ();
|
||
|
|
||
|
BOOL
|
||
|
UpdateKeyTag (
|
||
|
HKEY hBase,
|
||
|
DWORD dwAttribute
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
RemapNtCreateKey(
|
||
|
OUT PHANDLE phPatchedHandle,
|
||
|
IN ACCESS_MASK DesiredAccess,
|
||
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||
|
IN ULONG TitleIndex,
|
||
|
IN PUNICODE_STRING Class OPTIONAL,
|
||
|
IN ULONG CreateOptions,
|
||
|
OUT PULONG Disposition OPTIONAL
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtCreateKey(
|
||
|
OUT PHANDLE KeyHandle,
|
||
|
IN ACCESS_MASK DesiredAccess,
|
||
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||
|
IN ULONG TitleIndex,
|
||
|
IN PUNICODE_STRING Class OPTIONAL,
|
||
|
IN ULONG CreateOptions,
|
||
|
OUT PULONG Disposition OPTIONAL
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtDeleteKey(
|
||
|
IN HANDLE KeyHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtDeleteValueKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN PUNICODE_STRING ValueName
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtEnumerateKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN ULONG Index,
|
||
|
IN KEY_INFORMATION_CLASS KeyInformationClass,
|
||
|
OUT PVOID KeyInformation,
|
||
|
IN ULONG Length,
|
||
|
OUT PULONG ResultLength
|
||
|
);
|
||
|
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtEnumerateValueKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN ULONG Index,
|
||
|
IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
|
||
|
OUT PVOID KeyValueInformation,
|
||
|
IN ULONG Length,
|
||
|
OUT PULONG ResultLength
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtFlushKey(
|
||
|
IN HANDLE KeyHandle
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtInitializeRegistry(
|
||
|
IN USHORT BootCondition
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtNotifyChangeKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN HANDLE Event OPTIONAL,
|
||
|
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
|
||
|
IN PVOID ApcContext OPTIONAL,
|
||
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||
|
IN ULONG CompletionFilter,
|
||
|
IN BOOLEAN WatchTree,
|
||
|
OUT PVOID Buffer,
|
||
|
IN ULONG BufferSize,
|
||
|
IN BOOLEAN Asynchronous
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtNotifyChangeMultipleKeys(
|
||
|
IN HANDLE MasterKeyHandle,
|
||
|
IN ULONG Count,
|
||
|
IN OBJECT_ATTRIBUTES SlaveObjects[],
|
||
|
IN HANDLE Event OPTIONAL,
|
||
|
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
|
||
|
IN PVOID ApcContext OPTIONAL,
|
||
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||
|
IN ULONG CompletionFilter,
|
||
|
IN BOOLEAN WatchTree,
|
||
|
OUT PVOID Buffer,
|
||
|
IN ULONG BufferSize,
|
||
|
IN BOOLEAN Asynchronous
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtLoadKey(
|
||
|
IN POBJECT_ATTRIBUTES TargetKey,
|
||
|
IN POBJECT_ATTRIBUTES SourceFile
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtLoadKey2(
|
||
|
IN POBJECT_ATTRIBUTES TargetKey,
|
||
|
IN POBJECT_ATTRIBUTES SourceFile,
|
||
|
IN ULONG Flags
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtOpenKey(
|
||
|
OUT PHANDLE KeyHandle,
|
||
|
IN ACCESS_MASK DesiredAccess,
|
||
|
IN POBJECT_ATTRIBUTES ObjectAttributes
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtQueryKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN KEY_INFORMATION_CLASS KeyInformationClass,
|
||
|
OUT PVOID KeyInformation,
|
||
|
IN ULONG Length,
|
||
|
OUT PULONG ResultLength
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtQueryValueKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN PUNICODE_STRING ValueName,
|
||
|
IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
|
||
|
OUT PVOID KeyValueInformation,
|
||
|
IN ULONG Length,
|
||
|
OUT PULONG ResultLength
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtQueryMultipleValueKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN PKEY_VALUE_ENTRY ValueEntries,
|
||
|
IN ULONG EntryCount,
|
||
|
OUT PVOID ValueBuffer,
|
||
|
IN OUT PULONG BufferLength,
|
||
|
OUT OPTIONAL PULONG RequiredBufferLength
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtReplaceKey(
|
||
|
IN POBJECT_ATTRIBUTES NewFile,
|
||
|
IN HANDLE TargetHandle,
|
||
|
IN POBJECT_ATTRIBUTES OldFile
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtRestoreKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN HANDLE FileHandle,
|
||
|
IN ULONG Flags
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtSaveKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN HANDLE FileHandle
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtSaveMergedKeys(
|
||
|
IN HANDLE HighPrecedenceKeyHandle,
|
||
|
IN HANDLE LowPrecedenceKeyHandle,
|
||
|
IN HANDLE FileHandle
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtSetValueKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN PUNICODE_STRING ValueName,
|
||
|
IN ULONG TitleIndex OPTIONAL,
|
||
|
IN ULONG Type,
|
||
|
IN PVOID Data,
|
||
|
IN ULONG DataSize
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtUnloadKey(
|
||
|
IN POBJECT_ATTRIBUTES TargetKey
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtSetInformationKey(
|
||
|
IN HANDLE KeyHandle,
|
||
|
IN KEY_SET_INFORMATION_CLASS KeySetInformationClass,
|
||
|
IN PVOID KeySetInformation,
|
||
|
IN ULONG KeySetInformationLength
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtClose(
|
||
|
IN HANDLE Handle
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
DisplayCallParam (
|
||
|
char *strCallLoc,
|
||
|
POBJECT_ATTRIBUTES ObjectAttributes
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtQueryOpenSubKeys(
|
||
|
IN POBJECT_ATTRIBUTES TargetKey,
|
||
|
OUT PULONG HandleCount
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
IsIsnNode (
|
||
|
PWCHAR wStr,
|
||
|
PWCHAR *pwStrIsn
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
CreatePathFromInsNode(
|
||
|
PWCHAR wStr,
|
||
|
PWCHAR wStrIsn
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
NTSTATUS
|
||
|
OpenIsnNodeByObjectAttributes (
|
||
|
POBJECT_ATTRIBUTES ObjectAttributes,
|
||
|
ACCESS_MASK DesiredAccess,
|
||
|
PHANDLE phPatchedHandle
|
||
|
);
|
||
|
|
||
|
int
|
||
|
Regwcsnicmp(
|
||
|
const WCHAR * first,
|
||
|
const WCHAR * last,
|
||
|
size_t count
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
SyncRegCreateKey (
|
||
|
HANDLE hBase,
|
||
|
PWCHAR AbsPath,
|
||
|
DWORD Flag
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
NtSyncNode (
|
||
|
HANDLE hBase,
|
||
|
PWCHAR AbsPath,
|
||
|
BOOL bForceSync
|
||
|
);
|
||
|
BOOL
|
||
|
IsOnReflectionList (
|
||
|
PWCHAR Path
|
||
|
);
|
||
|
BOOL
|
||
|
NtSyncNodeOpenCreate (
|
||
|
IN POBJECT_ATTRIBUTES ObjectAttributes
|
||
|
);
|
||
|
NTSTATUS
|
||
|
ObjectAttributesToKeyName (
|
||
|
POBJECT_ATTRIBUTES ObjectAttributes,
|
||
|
PWCHAR AbsPath,
|
||
|
DWORD AbsPathLenIn,
|
||
|
BOOL *bPatched,
|
||
|
DWORD *ParentLen
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
Wow64NtSetSecurityObject (
|
||
|
IN HANDLE Handle,
|
||
|
IN SECURITY_INFORMATION SecurityInformation,
|
||
|
IN PSECURITY_DESCRIPTOR SecurityDescriptor
|
||
|
);
|
||
|
|
||
|
void
|
||
|
CleanupReflector (
|
||
|
DWORD dwFlag
|
||
|
);
|
||
|
|
||
|
PWCHAR
|
||
|
wcsistr(
|
||
|
PWCHAR string1,
|
||
|
PWCHAR string2
|
||
|
);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif //__cplusplus
|
||
|
|
||
|
#endif // _REGREDIR_H_
|