windows-nt/Source/XPSP1/NT/sdktools/regini/regtool.h
2020-09-26 16:20:57 +08:00

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
);