304 lines
6.2 KiB
C
304 lines
6.2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1989 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
regtool.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This is the include file for the REGTOOL.DLL registry helper.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Steve Wood (stevewo) 16-Nov-1995
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
//
|
||
|
// Routines for accessing registry. Allows code to access any of the following
|
||
|
// registry locations with the same code:
|
||
|
//
|
||
|
// Windows NT registry on local machine
|
||
|
// Windows NT registry on remote machine
|
||
|
// Windows NT hive files
|
||
|
// Windows 95 registry files (system.dat, user.dat)
|
||
|
//
|
||
|
|
||
|
BOOLEAN
|
||
|
RTInitialize( void );
|
||
|
|
||
|
#define REG_TARGET_DISCONNECTED 0
|
||
|
#define REG_TARGET_LOCAL_REGISTRY 1
|
||
|
#define REG_TARGET_REMOTE_REGISTRY 2
|
||
|
#define REG_TARGET_WIN95_REGISTRY 3
|
||
|
#define REG_TARGET_HIVE_REGISTRY 4
|
||
|
|
||
|
typedef struct _REG_CONTEXT_OPEN_HIVE_KEY {
|
||
|
struct _REG_CONTEXT_OPEN_HIVE_KEY *Next;
|
||
|
HKEY KeyHandle;
|
||
|
ULONG ReferenceCount;
|
||
|
} REG_CONTEXT_OPEN_HIVE_KEY, *PREG_CONTEXT_OPEN_HIVE_KEY;
|
||
|
|
||
|
typedef struct _REG_CONTEXT {
|
||
|
struct _REG_CONTEXT *Next;
|
||
|
ULONG Target;
|
||
|
HKEY MachineRoot;
|
||
|
HKEY UsersRoot;
|
||
|
HKEY CurrentUserRoot;
|
||
|
WCHAR MachinePath[ MAX_PATH ];
|
||
|
WCHAR UsersPath[ MAX_PATH ];
|
||
|
WCHAR CurrentUserPath[ MAX_PATH ];
|
||
|
ULONG MachinePathLength;
|
||
|
ULONG UsersPathLength;
|
||
|
ULONG CurrentUserPathLength;
|
||
|
HKEY HiveRootHandle;
|
||
|
OBJECT_ATTRIBUTES HiveRootKey;
|
||
|
PREG_CONTEXT_OPEN_HIVE_KEY OpenHiveKeys;
|
||
|
} REG_CONTEXT, *PREG_CONTEXT;
|
||
|
|
||
|
|
||
|
BOOLEAN
|
||
|
RTEnableBackupRestorePrivilege( void );
|
||
|
|
||
|
void
|
||
|
RTDisableBackupRestorePrivilege( void );
|
||
|
|
||
|
LONG
|
||
|
RTConnectToRegistry(
|
||
|
IN PWSTR MachineName,
|
||
|
IN PWSTR HiveFileName,
|
||
|
IN PWSTR HiveRootName,
|
||
|
IN PWSTR Win95Path,
|
||
|
IN PWSTR Win95UserName,
|
||
|
OUT PWSTR *DefaultRootKeyName,
|
||
|
OUT PREG_CONTEXT RegistryContext
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RTDisconnectFromRegistry(
|
||
|
IN PREG_CONTEXT RegistryContext
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RTCreateKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY RootKeyHandle,
|
||
|
IN PCWSTR SubKeyName,
|
||
|
IN ACCESS_MASK DesiredAccess,
|
||
|
IN ULONG CreateOptions,
|
||
|
IN PVOID SecurityDescriptor,
|
||
|
OUT PHKEY ReturnedKeyHandle,
|
||
|
OUT PULONG Disposition
|
||
|
);
|
||
|
|
||
|
|
||
|
LONG
|
||
|
RTOpenKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY RootKeyHandle,
|
||
|
IN PCWSTR SubKeyName,
|
||
|
IN ACCESS_MASK DesiredAccess,
|
||
|
IN ULONG OpenOptions,
|
||
|
OUT PHKEY ReturnedKeyHandle
|
||
|
);
|
||
|
|
||
|
#define HKEY_REGISTRY_ROOT (( HKEY ) (ULONG_PTR)((LONG)0x8000000A) )
|
||
|
|
||
|
LONG
|
||
|
RTCloseKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY KeyHandle
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RTFlushKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY KeyHandle
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RTEnumerateKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY KeyHandle,
|
||
|
IN ULONG Index,
|
||
|
OUT PFILETIME LastWriteTime,
|
||
|
IN OUT PULONG KeyNameLength,
|
||
|
OUT PWSTR KeyName
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RTEnumerateValueKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY KeyHandle,
|
||
|
IN ULONG Index,
|
||
|
OUT PULONG ValueType,
|
||
|
IN OUT PULONG ValueNameLength,
|
||
|
OUT PWSTR ValueName,
|
||
|
IN OUT PULONG ValueDataLength,
|
||
|
OUT PVOID ValueData
|
||
|
);
|
||
|
|
||
|
|
||
|
LONG
|
||
|
RTQueryKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY KeyHandle,
|
||
|
OUT PFILETIME LastWriteTime,
|
||
|
OUT PULONG NumberOfSubkeys,
|
||
|
OUT PULONG NumberOfValues
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RTQueryValueKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY KeyHandle,
|
||
|
IN PWSTR ValueName,
|
||
|
OUT PULONG ValueType,
|
||
|
IN OUT PULONG ValueDataLength,
|
||
|
OUT PVOID ValueData
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RTSetValueKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY KeyHandle,
|
||
|
IN PWSTR ValueName,
|
||
|
IN ULONG ValueType,
|
||
|
IN ULONG ValueDataLength,
|
||
|
IN PVOID ValueData
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RTDeleteKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY KeyHandle,
|
||
|
IN PCWSTR SubKeyName
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RTDeleteValueKey(
|
||
|
IN PREG_CONTEXT RegistryContext,
|
||
|
IN HKEY KeyHandle,
|
||
|
IN PWSTR ValueName
|
||
|
);
|
||
|
|
||
|
|
||
|
typedef struct _REG_UNICODE_FILE {
|
||
|
PWSTR FileName;
|
||
|
FILETIME LastWriteTime;
|
||
|
PWSTR FileContents;
|
||
|
PWSTR EndOfFile;
|
||
|
PWSTR NextLine;
|
||
|
ULONG NextLineNumber;
|
||
|
BOOLEAN BackwardsCompatibleInput;
|
||
|
} REG_UNICODE_FILE, *PREG_UNICODE_FILE;
|
||
|
|
||
|
LONG
|
||
|
RTLoadAsciiFileAsUnicode(
|
||
|
IN PWSTR Path,
|
||
|
OUT PREG_UNICODE_FILE UnicodeFile
|
||
|
);
|
||
|
|
||
|
void
|
||
|
RTUnloadUnicodeFile(
|
||
|
IN OUT PREG_UNICODE_FILE UnicodeFile
|
||
|
);
|
||
|
|
||
|
typedef enum _REG_UNICODE_PARSE_FAILURE_REASON {
|
||
|
ParseFailNoFailure = 0,
|
||
|
ParseFailValueTooLarge,
|
||
|
ParseFailUnableToAccessFile,
|
||
|
ParseFailDateTimeFormatInvalid,
|
||
|
ParseFailInvalidLineContinuation,
|
||
|
ParseFailInvalidQuoteCharacter,
|
||
|
ParseFailBinaryDataLengthMissing,
|
||
|
ParseFailBinaryDataOmitted,
|
||
|
ParseFailBinaryDataNotEnough,
|
||
|
ParseFailInvalidRegistryType
|
||
|
} REG_UNICODE_PARSE_FAILURE_REASON;
|
||
|
|
||
|
typedef struct _REG_UNICODE_PARSE {
|
||
|
ULONG LineNumber;
|
||
|
ULONG IndentAmount;
|
||
|
PWSTR BeginLine;
|
||
|
BOOLEAN AtEndOfFile;
|
||
|
BOOLEAN IsKeyName;
|
||
|
REG_UNICODE_PARSE_FAILURE_REASON ParseFailureReason;
|
||
|
union {
|
||
|
struct {
|
||
|
PWSTR KeyName;
|
||
|
PWSTR AclString;
|
||
|
PVOID SecurityDescriptor;
|
||
|
BOOLEAN DeleteKey;
|
||
|
SECURITY_DESCRIPTOR SecurityDescriptorBuffer;
|
||
|
};
|
||
|
struct {
|
||
|
PWSTR ValueName;
|
||
|
PWSTR ValueString;
|
||
|
ULONG ValueType;
|
||
|
ULONG ValueLength;
|
||
|
PVOID ValueData;
|
||
|
BOOLEAN DeleteValue;
|
||
|
};
|
||
|
};
|
||
|
} REG_UNICODE_PARSE, *PREG_UNICODE_PARSE;
|
||
|
|
||
|
|
||
|
BOOLEAN
|
||
|
RTParseNextLine(
|
||
|
IN OUT PREG_UNICODE_FILE UnicodeFile,
|
||
|
OUT PREG_UNICODE_PARSE ParsedLine
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
RTParseValueData(
|
||
|
IN OUT PREG_UNICODE_FILE UnicodeFile,
|
||
|
IN OUT PREG_UNICODE_PARSE ParsedLine,
|
||
|
IN PVOID ValueBuffer,
|
||
|
IN ULONG ValueBufferSize,
|
||
|
OUT PULONG ValueType,
|
||
|
OUT PVOID *ValueData,
|
||
|
OUT PULONG ValueLength
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
int
|
||
|
(_cdecl *PREG_OUTPUT_ROUTINE)(
|
||
|
PVOID pParameter,
|
||
|
LPSTR FormatString,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
void
|
||
|
RTFormatKeyName(
|
||
|
PREG_OUTPUT_ROUTINE OutputRoutine,
|
||
|
PVOID OutputRoutineParameter,
|
||
|
ULONG IndentLevel,
|
||
|
PWSTR KeyName
|
||
|
);
|
||
|
|
||
|
void
|
||
|
RTFormatKeySecurity(
|
||
|
PREG_OUTPUT_ROUTINE OutputRoutine,
|
||
|
PVOID OutputRoutineParameter,
|
||
|
HKEY KeyHandle,
|
||
|
PSECURITY_DESCRIPTOR SecurityDescriptor
|
||
|
);
|
||
|
|
||
|
void
|
||
|
RTFormatKeyValue(
|
||
|
ULONG OutputWidth,
|
||
|
PREG_OUTPUT_ROUTINE OutputRoutine,
|
||
|
PVOID OutputRoutineParameter,
|
||
|
BOOLEAN SummaryOutput,
|
||
|
ULONG IndentLevel,
|
||
|
PWSTR ValueName,
|
||
|
ULONG ValueLength,
|
||
|
ULONG ValueType,
|
||
|
PWSTR ValueData
|
||
|
);
|