From b308496ffa7e08ab80c9a6e9d11272ea5ef86e71 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 28 Oct 2007 22:38:20 +0000 Subject: [PATCH] - Include config/cm.h for cm based code, and remove all duplicated types and prototypes. - Get rid of EREGISTRY_HIVE, and use CMHIVE instead. Although the current ReactOS code doesn't make use of any of the functionality it offers, it's compatible with EREGISTRY_HIVE (our version was a subset) and allows us to get rid of another ros-specifc type, as well as being able to merge code from the cm-branch much more easily. - Merge cmwraprs.c from the cm-branch, since the only differences were the filehandle fields in EREGISTRY_HIVE vs CMHIVE. - Enable the #if'ed out code in cminit.c since it now applies to CMHIVE. svn path=/trunk/; revision=29944 --- .../boot/freeldr/freeldr/reactos/binhive.c | 8 +- reactos/lib/cmlib/cmlib.h | 94 ++++++- reactos/ntoskrnl/cm/cm.h | 263 +----------------- reactos/ntoskrnl/cm/ntfunc.c | 2 +- reactos/ntoskrnl/cm/regfile.c | 22 +- reactos/ntoskrnl/cm/registry.c | 15 +- reactos/ntoskrnl/cm/regobj.c | 4 +- reactos/ntoskrnl/config/cm.h | 126 +++++++-- reactos/ntoskrnl/config/cmapi.c | 4 +- reactos/ntoskrnl/config/cminit.c | 28 +- reactos/ntoskrnl/config/cmparse.c | 4 +- reactos/ntoskrnl/config/cmsysini.c | 20 +- reactos/ntoskrnl/config/cmwraprs.c | 16 +- reactos/tools/mkhive/binhive.c | 4 +- reactos/tools/mkhive/binhive.h | 2 +- reactos/tools/mkhive/cmi.c | 26 +- reactos/tools/mkhive/cmi.h | 10 +- reactos/tools/mkhive/registry.c | 20 +- reactos/tools/mkhive/registry.h | 13 +- 19 files changed, 282 insertions(+), 399 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/reactos/binhive.c b/reactos/boot/freeldr/freeldr/reactos/binhive.c index 08ea0b2428a..d16cf955a35 100644 --- a/reactos/boot/freeldr/freeldr/reactos/binhive.c +++ b/reactos/boot/freeldr/freeldr/reactos/binhive.c @@ -710,13 +710,13 @@ RegImportBinaryHive(PCHAR ChunkBase, FRLDRHKEY SystemKey; ULONG i; LONG Error; - PEREGISTRY_HIVE CmHive; + PCMHIVE CmHive; PHHIVE Hive; NTSTATUS Status; DbgPrint((DPRINT_REGISTRY, "RegImportBinaryHive(%x, %u) called\n",ChunkBase,ChunkSize)); - CmHive = CmpAllocate(sizeof(EREGISTRY_HIVE), TRUE, 0); + CmHive = CmpAllocate(sizeof(CMHIVE), TRUE, 0); Status = HvInitialize (&CmHive->Hive, HINIT_FLAT, 0, @@ -818,13 +818,13 @@ RegExportBinaryHive(PCWSTR KeyName, PCHAR ChunkBase, ULONG* ChunkSize) { - PEREGISTRY_HIVE CmHive; + PCMHIVE CmHive; PHHIVE Hive; NTSTATUS Status; DbgPrint((DPRINT_REGISTRY, "Creating binary hardware hive\n")); - CmHive = CmpAllocate(sizeof(EREGISTRY_HIVE), TRUE, 0); + CmHive = CmpAllocate(sizeof(CMHIVE), TRUE, 0); Status = HvInitialize (&CmHive->Hive, HINIT_CREATE, 0, diff --git a/reactos/lib/cmlib/cmlib.h b/reactos/lib/cmlib/cmlib.h index 0ff18194bee..f9256665c15 100644 --- a/reactos/lib/cmlib/cmlib.h +++ b/reactos/lib/cmlib/cmlib.h @@ -27,6 +27,7 @@ #ifndef _TYPEDEFS_HOST_H #include + #else #define REG_OPTION_VOLATILE 1 #define OBJ_CASE_INSENSITIVE 0x00000040L @@ -60,6 +61,14 @@ RtlClearAllBits( #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP) / 32]) >> ((BP) % 32)) & 0x1) +#define PKTHREAD PVOID +#define PKGUARDED_MUTEX PVOID +#define PERESOURCE PVOID +#define PFILE_OBJECT PVOID +#define PKEVENT PVOID +#define PWORK_QUEUE_ITEM PVOID +#define EX_PUSH_LOCK PULONG_PTR + #endif #ifndef ROUND_UP @@ -75,26 +84,87 @@ RtlClearAllBits( #include "hivedata.h" #include "cmdata.h" -#ifndef _CM_ -typedef struct _EREGISTRY_HIVE +#if defined(_TYPEDEFS_HOST_H) || defined(__FREELDR_H) + +#define PCM_KEY_SECURITY_CACHE_ENTRY PVOID +#define PCM_KEY_CONTROL_BLOCK PVOID +#define CMP_SECURITY_HASH_LISTS 64 +#define PCM_CELL_REMAP_BLOCK PVOID + +// +// Use Count Log and Entry +// +typedef struct _CM_USE_COUNT_LOG_ENTRY { - HHIVE Hive; - LIST_ENTRY HiveList; - UNICODE_STRING HiveFileName; - UNICODE_STRING LogFileName; - PCM_KEY_SECURITY RootSecurityCell; - ULONG Flags; - HANDLE HiveHandle; - HANDLE LogHandle; -} EREGISTRY_HIVE, *PEREGISTRY_HIVE; + HCELL_INDEX Cell; + PVOID Stack[7]; +} CM_USE_COUNT_LOG_ENTRY, *PCM_USE_COUNT_LOG_ENTRY; + +typedef struct _CM_USE_COUNT_LOG +{ + USHORT Next; + USHORT Size; + CM_USE_COUNT_LOG_ENTRY Log[32]; +} CM_USE_COUNT_LOG, *PCM_USE_COUNT_LOG; + +// +// Configuration Manager Hive Structure +// +typedef struct _CMHIVE +{ + HHIVE Hive; + HANDLE FileHandles[3]; + LIST_ENTRY NotifyList; + LIST_ENTRY HiveList; + EX_PUSH_LOCK HiveLock; + PKTHREAD HiveLockOwner; + PKGUARDED_MUTEX ViewLock; + PKTHREAD ViewLockOwner; + EX_PUSH_LOCK WriterLock; + PKTHREAD WriterLockOwner; + PERESOURCE FlusherLock; + EX_PUSH_LOCK SecurityLock; + PKTHREAD HiveSecurityLockOwner; + LIST_ENTRY LRUViewListHead; + LIST_ENTRY PinViewListHead; + PFILE_OBJECT FileObject; + UNICODE_STRING FileFullPath; + UNICODE_STRING FileUserName; + USHORT MappedViews; + USHORT PinnedViews; + ULONG UseCount; + ULONG SecurityCount; + ULONG SecurityCacheSize; + LONG SecurityHitHint; + PCM_KEY_SECURITY_CACHE_ENTRY SecurityCache; + LIST_ENTRY SecurityHash[CMP_SECURITY_HASH_LISTS]; + PKEVENT UnloadEvent; + PCM_KEY_CONTROL_BLOCK RootKcb; + BOOLEAN Frozen; + PWORK_QUEUE_ITEM UnloadWorkItem; + BOOLEAN GrowOnlyMode; + ULONG GrowOffset; + LIST_ENTRY KcbConvertListHead; + LIST_ENTRY KnodeConvertListHead; + PCM_CELL_REMAP_BLOCK CellRemapArray; + CM_USE_COUNT_LOG UseCountLog; + CM_USE_COUNT_LOG LockHiveLog; + ULONG Flags; + LIST_ENTRY TrustClassEntry; + ULONG FlushCount; + BOOLEAN HiveIsLoading; + PKTHREAD CreatorOwner; +} CMHIVE, *PCMHIVE; + #endif + /* * Public functions. */ NTSTATUS CMAPI HvInitialize( - PHHIVE RegistryHive, + PHHIVE RegistryHive, ULONG Operation, ULONG HiveType, ULONG HiveFlags, diff --git a/reactos/ntoskrnl/cm/cm.h b/reactos/ntoskrnl/cm/cm.h index f3074a3da07..1309d7d955a 100644 --- a/reactos/ntoskrnl/cm/cm.h +++ b/reactos/ntoskrnl/cm/cm.h @@ -1,7 +1,7 @@ #ifndef __INCLUDE_CM_H #define __INCLUDE_CM_H -#include +#include "ntoskrnl/config/cm.h" #ifdef DBG #define CHECKED 1 @@ -48,19 +48,6 @@ #define IsNoFileHive(Hive) ((Hive)->Flags & HIVE_NO_FILE) #define IsNoSynchHive(Hive) ((Hive)->Flags & HIVE_NO_SYNCH) -// -// Cached Child List -// -typedef struct _CACHED_CHILD_LIST -{ - ULONG Count; - union - { - ULONG ValueList; - //struct _CM_KEY_CONTROL_BLOCK *RealKcb; - struct _KEY_OBJECT *RealKcb; - }; -} CACHED_CHILD_LIST, *PCACHED_CHILD_LIST; /* KEY_OBJECT.Flags */ @@ -68,97 +55,6 @@ typedef struct _CACHED_CHILD_LIST attempts to access the key must not succeed */ #define KO_MARKED_FOR_DELETE 0x00000001 -/* Type defining the Object Manager Key Object */ -typedef struct _KEY_OBJECT -{ - /* Fields used by the Object Manager */ - CSHORT Type; - CSHORT Size; - - /* Key flags */ - ULONG Flags; - - /* Key name */ - UNICODE_STRING Name; - - /* Registry hive the key belongs to */ - PEREGISTRY_HIVE RegistryHive; - - /* Block offset of the key cell this key belongs in */ - HCELL_INDEX KeyCellOffset; - - /* CM_KEY_NODE this key belong in */ - PCM_KEY_NODE KeyCell; - - /* Link to the parent KEY_OBJECT for this key */ - struct _KEY_OBJECT *ParentKey; - - /* List entry into the global key object list */ - LIST_ENTRY ListEntry; - - /* Subkeys loaded in SubKeys */ - ULONG SubKeyCounts; - - /* Space allocated in SubKeys */ - ULONG SizeOfSubKeys; - - /* List of subkeys loaded */ - struct _KEY_OBJECT **SubKeys; - - /* Time stamp for the last access by the parse routine */ - ULONG TimeStamp; - - /* List entry for connected hives */ - LIST_ENTRY HiveList; - - CACHED_CHILD_LIST ValueCache; -} KEY_OBJECT, *PKEY_OBJECT; - -// -// Key Control Block (KCB) for old Cm (just so it can talk to New CM) -// -typedef struct _CM_KEY_CONTROL_BLOCK -{ - USHORT RefCount; - USHORT Flags; - ULONG ExtFlags:8; - ULONG PrivateAlloc:1; - ULONG Delete:1; - ULONG DelayedCloseIndex:12; - ULONG TotalLevels:10; - union - { - //CM_KEY_HASH KeyHash; - struct - { - ULONG ConvKey; - PVOID NextHash; - PHHIVE KeyHive; - HCELL_INDEX KeyCell; - }; - }; - struct _CM_KEY_CONTROL_BLOCK *ParentKcb; - PVOID NameBlock; - PVOID CachedSecurity; - CACHED_CHILD_LIST ValueCache; - PVOID IndexHint; - ULONG HashKey; - ULONG SubKeyCount; - union - { - LIST_ENTRY KeyBodyListHead; - LIST_ENTRY FreeListEntry; - }; - PVOID KeyBodyArray[4]; - PVOID DelayCloseEntry; - LARGE_INTEGER KcbLastWriteTime; - USHORT KcbMaxNameLen; - USHORT KcbMaxValueNameLen; - ULONG KcbMaxValueDataLen; - ULONG InDelayClose; -} CM_KEY_CONTROL_BLOCK, *PCM_KEY_CONTROL_BLOCK; - - /* Bits 31-22 (top 10 bits) of the cell index is the directory index */ #define CmiDirectoryIndex(CellIndex)(CellIndex & 0xffc000000) /* Bits 21-12 (middle 10 bits) of the cell index is the table index */ @@ -167,12 +63,9 @@ typedef struct _CM_KEY_CONTROL_BLOCK #define CmiByteOffset(Cellndex)(CellIndex & 0x00000fff) -extern PEREGISTRY_HIVE CmiVolatileHive; extern POBJECT_TYPE CmpKeyObjectType; extern KSPIN_LOCK CmiKeyListLock; -extern LIST_ENTRY CmpHiveListHead; - extern ERESOURCE CmpRegistryLock; extern EX_PUSH_LOCK CmpHiveListHeadLock; @@ -224,24 +117,10 @@ CmiLoadHive(POBJECT_ATTRIBUTES KeyObjectAttributes, ULONG Flags); NTSTATUS -CmiFlushRegistryHive(PEREGISTRY_HIVE RegistryHive); - -ULONG -CmiGetMaxNameLength(IN PHHIVE RegistryHive, IN PCM_KEY_NODE KeyCell); - -ULONG -CmiGetMaxClassLength(IN PHHIVE RegistryHive, IN PCM_KEY_NODE KeyCell); - -ULONG -CmiGetMaxValueNameLength(IN PHHIVE RegistryHive, - IN PCM_KEY_NODE KeyCell); - -ULONG -CmiGetMaxValueDataLength(IN PHHIVE RegistryHive, - IN PCM_KEY_NODE KeyCell); +CmiFlushRegistryHive(PCMHIVE RegistryHive); NTSTATUS -CmiScanForSubKey(IN PEREGISTRY_HIVE RegistryHive, +CmiScanForSubKey(IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, OUT PCM_KEY_NODE *SubKeyCell, OUT HCELL_INDEX *BlockOffset, @@ -250,111 +129,20 @@ CmiScanForSubKey(IN PEREGISTRY_HIVE RegistryHive, IN ULONG Attributes); NTSTATUS -CmiAddSubKey(IN PEREGISTRY_HIVE RegistryHive, - IN PKEY_OBJECT ParentKey, - OUT PKEY_OBJECT SubKey, - IN PUNICODE_STRING SubKeyName, - IN ULONG TitleIndex, - IN PUNICODE_STRING Class, - IN ULONG CreateOptions); - -NTSTATUS -CmiScanKeyForValue(IN PEREGISTRY_HIVE RegistryHive, +CmiScanKeyForValue(IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, IN PUNICODE_STRING ValueName, OUT PCM_KEY_VALUE *ValueCell, OUT HCELL_INDEX *VBOffset); -NTSTATUS -NTAPI -CmDeleteValueKey(IN PCM_KEY_CONTROL_BLOCK Kcb, - IN UNICODE_STRING ValueName); - -NTSTATUS -NTAPI -CmQueryValueKey(IN PCM_KEY_CONTROL_BLOCK Kcb, - IN UNICODE_STRING ValueName, - IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, - IN PVOID KeyValueInformation, - IN ULONG Length, - IN PULONG ResultLength); - -NTSTATUS -NTAPI -CmEnumerateValueKey(IN PCM_KEY_CONTROL_BLOCK Kcb, - IN ULONG Index, - IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, - IN PVOID KeyValueInformation, - IN ULONG Length, - IN PULONG ResultLength); - -NTSTATUS -NTAPI -CmSetValueKey(IN PCM_KEY_CONTROL_BLOCK Kcb, - IN PUNICODE_STRING ValueName, - IN ULONG Type, - IN PVOID Data, - IN ULONG DataSize); - -NTSTATUS -NTAPI -CmQueryKey(IN PCM_KEY_CONTROL_BLOCK Kcb, - IN KEY_INFORMATION_CLASS KeyInformationClass, - IN PVOID KeyInformation, - IN ULONG Length, - IN PULONG ResultLength); - -NTSTATUS -NTAPI -CmEnumerateKey(IN PCM_KEY_CONTROL_BLOCK Kcb, - IN ULONG Index, - IN KEY_INFORMATION_CLASS KeyInformationClass, - IN PVOID KeyInformation, - IN ULONG Length, - IN PULONG ResultLength); - -NTSTATUS -NTAPI -CmDeleteKey(IN PCM_KEY_CONTROL_BLOCK Kcb); NTSTATUS CmiConnectHive(POBJECT_ATTRIBUTES KeyObjectAttributes, - PEREGISTRY_HIVE RegistryHive); + PCMHIVE RegistryHive); NTSTATUS CmiInitHives(BOOLEAN SetupBoot); -NTSTATUS -NTAPI -CmpDoCreate( - IN PHHIVE Hive, - IN HCELL_INDEX Cell, - IN PACCESS_STATE AccessState, - IN PUNICODE_STRING Name, - IN KPROCESSOR_MODE AccessMode, - IN PUNICODE_STRING Class, - IN ULONG CreateOptions, - IN PKEY_OBJECT Parent, - IN PVOID OriginatingHive OPTIONAL, - OUT PVOID *Object -); - -HCELL_INDEX -NTAPI -CmpFindValueByName( - IN PHHIVE Hive, - IN PCM_KEY_NODE KeyNode, - IN PUNICODE_STRING Name -); - -HCELL_INDEX -NTAPI -CmpFindSubKeyByName( - IN PHHIVE Hive, - IN PCM_KEY_NODE Parent, - IN PCUNICODE_STRING SearchName -); - VOID CmiSyncHives(VOID); @@ -370,49 +158,8 @@ CmFindObject( IN PVOID ParseContext ); -NTSTATUS -NTAPI -CmpOpenHiveFiles(IN PCUNICODE_STRING BaseName, - IN PCWSTR Extension OPTIONAL, - IN PHANDLE Primary, - IN PHANDLE Log, - IN PULONG PrimaryDisposition, - IN PULONG LogDisposition, - IN BOOLEAN CreateAllowed, - IN BOOLEAN MarkAsSystemHive, - IN BOOLEAN NoBuffering, - OUT PULONG ClusterSize OPTIONAL); - -NTSTATUS -NTAPI -CmpInitHiveFromFile(IN PCUNICODE_STRING HiveName, - IN ULONG HiveFlags, - OUT PEREGISTRY_HIVE *Hive, - IN OUT PBOOLEAN New, - IN ULONG CheckFlags); - // Some Ob definitions for debug messages in Cm #define ObGetObjectPointerCount(x) OBJECT_TO_OBJECT_HEADER(x)->PointerCount #define ObGetObjectHandleCount(x) OBJECT_TO_OBJECT_HEADER(x)->HandleCount -// -// System Control Vector -// -typedef struct _CM_SYSTEM_CONTROL_VECTOR -{ - PWCHAR KeyPath; - PWCHAR ValueName; - PVOID Buffer; - PULONG BufferLength; - PULONG Type; -} CM_SYSTEM_CONTROL_VECTOR, *PCM_SYSTEM_CONTROL_VECTOR; - -VOID -NTAPI -CmGetSystemControlValues( - IN PVOID SystemHiveData, - IN PCM_SYSTEM_CONTROL_VECTOR ControlVector -); - -extern CM_SYSTEM_CONTROL_VECTOR CmControlVector[]; #endif /*__INCLUDE_CM_H*/ diff --git a/reactos/ntoskrnl/cm/ntfunc.c b/reactos/ntoskrnl/cm/ntfunc.c index 6c94a8faaa9..d72e794ae15 100644 --- a/reactos/ntoskrnl/cm/ntfunc.c +++ b/reactos/ntoskrnl/cm/ntfunc.c @@ -412,7 +412,7 @@ NtFlushKey(IN HANDLE KeyHandle) { NTSTATUS Status; PKEY_OBJECT KeyObject; - PEREGISTRY_HIVE RegistryHive; + PCMHIVE RegistryHive; KPROCESSOR_MODE PreviousMode; PAGED_CODE(); diff --git a/reactos/ntoskrnl/cm/regfile.c b/reactos/ntoskrnl/cm/regfile.c index 0dedb63ed1b..0e0fd951193 100644 --- a/reactos/ntoskrnl/cm/regfile.c +++ b/reactos/ntoskrnl/cm/regfile.c @@ -12,9 +12,7 @@ #include #define NDEBUG #include - #include "cm.h" -#include "../config/cm.h" /* LOCAL MACROS *************************************************************/ @@ -29,7 +27,7 @@ CmiLoadHive(IN POBJECT_ATTRIBUTES KeyObjectAttributes, IN PCUNICODE_STRING FileName, IN ULONG Flags) { - PEREGISTRY_HIVE Hive = NULL; + PCMHIVE Hive = NULL; NTSTATUS Status; BOOLEAN Allocate = TRUE; @@ -61,14 +59,14 @@ CmiLoadHive(IN POBJECT_ATTRIBUTES KeyObjectAttributes, } VOID -CmCloseHiveFiles(PEREGISTRY_HIVE RegistryHive) +CmCloseHiveFiles(PCMHIVE RegistryHive) { - ZwClose(RegistryHive->HiveHandle); - ZwClose(RegistryHive->LogHandle); + ZwClose(RegistryHive->FileHandles[HFILE_TYPE_PRIMARY]); + ZwClose(RegistryHive->FileHandles[HFILE_TYPE_LOG]); } NTSTATUS -CmiFlushRegistryHive(PEREGISTRY_HIVE RegistryHive) +CmiFlushRegistryHive(PCMHIVE RegistryHive) { BOOLEAN Success; NTSTATUS Status; @@ -81,10 +79,10 @@ CmiFlushRegistryHive(PEREGISTRY_HIVE RegistryHive) return(STATUS_SUCCESS); } - Status = CmpOpenHiveFiles(&RegistryHive->HiveFileName, + Status = CmpOpenHiveFiles(&RegistryHive->FileFullPath, L".LOG", - &RegistryHive->HiveHandle, - &RegistryHive->LogHandle, + &RegistryHive->FileHandles[HFILE_TYPE_PRIMARY], + &RegistryHive->FileHandles[HFILE_TYPE_LOG], &Disposition, &Disposition, FALSE, @@ -255,7 +253,7 @@ CmiGetMaxValueDataLength(PHHIVE Hive, } NTSTATUS -CmiScanKeyForValue(IN PEREGISTRY_HIVE RegistryHive, +CmiScanKeyForValue(IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, IN PUNICODE_STRING ValueName, OUT PCM_KEY_VALUE *ValueCell, @@ -278,7 +276,7 @@ CmiScanKeyForValue(IN PEREGISTRY_HIVE RegistryHive, } NTSTATUS -CmiScanForSubKey(IN PEREGISTRY_HIVE RegistryHive, +CmiScanForSubKey(IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, OUT PCM_KEY_NODE *SubKeyCell, OUT HCELL_INDEX *BlockOffset, diff --git a/reactos/ntoskrnl/cm/registry.c b/reactos/ntoskrnl/cm/registry.c index d4cc781d57d..1697e508d00 100644 --- a/reactos/ntoskrnl/cm/registry.c +++ b/reactos/ntoskrnl/cm/registry.c @@ -18,7 +18,6 @@ #include #include "cm.h" -#include "../config/cm.h" #if defined (ALLOC_PRAGMA) #pragma alloc_text(INIT, CmInitSystem1) @@ -29,7 +28,7 @@ extern BOOLEAN ExpInTextModeSetup; POBJECT_TYPE CmpKeyObjectType = NULL; -PEREGISTRY_HIVE CmiVolatileHive = NULL; +PCMHIVE CmiVolatileHive = NULL; LIST_ENTRY CmpHiveListHead; @@ -245,7 +244,7 @@ NTSTATUS NTAPI CmpLinkHiveToMaster(IN PUNICODE_STRING LinkName, IN HANDLE RootDirectory, - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN BOOLEAN Allocate, IN PSECURITY_DESCRIPTOR SecurityDescriptor) { @@ -267,7 +266,7 @@ CmpLinkHiveToMaster(IN PUNICODE_STRING LinkName, NTSTATUS CmiConnectHive(IN POBJECT_ATTRIBUTES KeyObjectAttributes, - IN PEREGISTRY_HIVE RegistryHive) + IN PCMHIVE RegistryHive) { UNICODE_STRING RemainingPath; PKEY_OBJECT ParentKey; @@ -671,7 +670,7 @@ CmiInitHives(BOOLEAN SetupBoot) VOID CmShutdownRegistry(VOID) { - PEREGISTRY_HIVE Hive; + PCMHIVE Hive; PLIST_ENTRY Entry; DPRINT("CmShutdownRegistry() called\n"); @@ -692,7 +691,7 @@ CmShutdownRegistry(VOID) Entry = CmpHiveListHead.Flink; while (Entry != &CmpHiveListHead) { - Hive = CONTAINING_RECORD(Entry, EREGISTRY_HIVE, HiveList); + Hive = CONTAINING_RECORD(Entry, CMHIVE, HiveList); if (!(IsNoFileHive(Hive) || IsNoSynchHive(Hive))) { @@ -713,7 +712,7 @@ VOID NTAPI CmiHiveSyncRoutine(PVOID DeferredContext) { - PEREGISTRY_HIVE Hive; + PCMHIVE Hive; PLIST_ENTRY Entry; DPRINT("CmiHiveSyncRoutine() called\n"); @@ -726,7 +725,7 @@ CmiHiveSyncRoutine(PVOID DeferredContext) Entry = CmpHiveListHead.Flink; while (Entry != &CmpHiveListHead) { - Hive = CONTAINING_RECORD(Entry, EREGISTRY_HIVE, HiveList); + Hive = CONTAINING_RECORD(Entry, CMHIVE, HiveList); if (!(IsNoFileHive(Hive) || IsNoSynchHive(Hive))) { diff --git a/reactos/ntoskrnl/cm/regobj.c b/reactos/ntoskrnl/cm/regobj.c index 2dd90a1a98b..3f81755861a 100644 --- a/reactos/ntoskrnl/cm/regobj.c +++ b/reactos/ntoskrnl/cm/regobj.c @@ -21,7 +21,7 @@ extern LIST_ENTRY CmiKeyObjectListHead; extern ULONG CmiTimer; static NTSTATUS -CmiGetLinkTarget(PEREGISTRY_HIVE RegistryHive, +CmiGetLinkTarget(PCMHIVE RegistryHive, PCM_KEY_NODE KeyCell, PUNICODE_STRING TargetPath); @@ -809,7 +809,7 @@ CmiScanKeyList(PKEY_OBJECT Parent, } static NTSTATUS -CmiGetLinkTarget(PEREGISTRY_HIVE RegistryHive, +CmiGetLinkTarget(PCMHIVE RegistryHive, PCM_KEY_NODE KeyCell, PUNICODE_STRING TargetPath) { diff --git a/reactos/ntoskrnl/config/cm.h b/reactos/ntoskrnl/config/cm.h index d084ad04624..0b6815d4bb4 100644 --- a/reactos/ntoskrnl/config/cm.h +++ b/reactos/ntoskrnl/config/cm.h @@ -93,8 +93,6 @@ #define CM_DELAYS_PER_PAGE \ PAGE_SIZE / sizeof(CM_DELAYED_CLOSE_ENTRY) -#ifndef __INCLUDE_CM_H - // // Value Search Results // @@ -496,24 +494,13 @@ typedef struct _KEY_INFORMATION #define REG_SYSTEM_KEY_NAME L"\\Registry\\Machine\\SYSTEM" #define REG_HARDWARE_KEY_NAME L"\\Registry\\Machine\\HARDWARE" #define IsNoFileHive(Hive) ((Hive)->Flags & HIVE_NO_FILE) -typedef struct _EREGISTRY_HIVE -{ - HHIVE Hive; - LIST_ENTRY HiveList; - UNICODE_STRING HiveFileName; - UNICODE_STRING LogFileName; - PCM_KEY_SECURITY RootSecurityCell; - ULONG Flags; - HANDLE HiveHandle; - HANDLE LogHandle; -} EREGISTRY_HIVE, *PEREGISTRY_HIVE; typedef struct _KEY_OBJECT { CSHORT Type; CSHORT Size; ULONG Flags; UNICODE_STRING Name; - PEREGISTRY_HIVE RegistryHive; + PCMHIVE RegistryHive; HCELL_INDEX KeyCellOffset; PCM_KEY_NODE KeyCell; struct _KEY_OBJECT *ParentKey; @@ -525,7 +512,7 @@ typedef struct _KEY_OBJECT LIST_ENTRY HiveList; CACHED_CHILD_LIST ValueCache; } KEY_OBJECT, *PKEY_OBJECT; -extern PEREGISTRY_HIVE CmiVolatileHive; +extern PCMHIVE CmiVolatileHive; extern LIST_ENTRY CmiKeyObjectListHead, CmiConnectedHiveList; extern KTIMER CmiWorkerTimer; VOID NTAPI CmiWorkerThread(IN PVOID Param); @@ -755,8 +742,6 @@ CmpLinkHiveToMaster( IN PSECURITY_DESCRIPTOR SecurityDescriptor ); -/* NOTE: This function declaration is currently duplicated in both */ -/* cm/cm.h and config/cm.h. TODO: Pick one single place to declare it. */ NTSTATUS NTAPI CmpOpenHiveFiles( @@ -772,6 +757,16 @@ CmpOpenHiveFiles( OUT PULONG ClusterSize OPTIONAL ); +NTSTATUS +NTAPI +CmpInitHiveFromFile( + IN PCUNICODE_STRING HiveName, + IN ULONG HiveFlags, + OUT PCMHIVE *Hive, + IN OUT PBOOLEAN New, + IN ULONG CheckFlags +); + // // Registry Utility Functions // @@ -832,7 +827,7 @@ EnlistKeyBodyWithKCB( #if 0 IN PCM_KEY_BODY KeyObject, #else - IN PVOID KeyObject, + IN PKEY_OBJECT KeyObject, #endif IN ULONG Flags ); @@ -917,12 +912,28 @@ CmpFlushEntireRegistry( IN BOOLEAN ForceFlush ); +// +// Open/Create Routines +// +NTSTATUS +NTAPI +CmpDoCreate( + IN PHHIVE Hive, + IN HCELL_INDEX Cell, + IN PACCESS_STATE AccessState, + IN PUNICODE_STRING Name, + IN KPROCESSOR_MODE AccessMode, + IN PUNICODE_STRING Class, + IN ULONG CreateOptions, + IN PKEY_OBJECT Parent, + IN PCMHIVE OriginatingHive OPTIONAL, + OUT PVOID *Object +); + // // Cell Index Routines // -/* NOTE: This function declaration is currently duplicated in both */ -/* cm/cm.h and config/cm.h. TODO: Pick one single place to declare it. */ HCELL_INDEX NTAPI CmpFindSubKeyByName( @@ -1064,6 +1075,14 @@ CmpFindControlSet( OUT PBOOLEAN AutoSelect ); +VOID +NTAPI +CmGetSystemControlValues( + IN PVOID SystemHiveData, + IN PCM_SYSTEM_CONTROL_VECTOR ControlVector +); + + // // Hardware Configuration Routines // @@ -1154,6 +1173,71 @@ CmpFileFlush( IN ULONG Length ); +// +// Configuration Manager side of Registry System Calls +// +NTSTATUS +NTAPI +CmEnumerateValueKey( + IN PCM_KEY_CONTROL_BLOCK Kcb, + IN ULONG Index, + IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + IN PVOID KeyValueInformation, + IN ULONG Length, + IN PULONG ResultLength); + +NTSTATUS +NTAPI +CmSetValueKey( + IN PCM_KEY_CONTROL_BLOCK Kcb, + IN PUNICODE_STRING ValueName, + IN ULONG Type, + IN PVOID Data, + IN ULONG DataSize); + +NTSTATUS +NTAPI +CmQueryKey(IN PCM_KEY_CONTROL_BLOCK Kcb, + IN KEY_INFORMATION_CLASS KeyInformationClass, + IN PVOID KeyInformation, + IN ULONG Length, + IN PULONG ResultLength +); + +NTSTATUS +NTAPI +CmEnumerateKey(IN PCM_KEY_CONTROL_BLOCK Kcb, + IN ULONG Index, + IN KEY_INFORMATION_CLASS KeyInformationClass, + IN PVOID KeyInformation, + IN ULONG Length, + IN PULONG ResultLength +); + +NTSTATUS +NTAPI +CmDeleteKey( + IN PCM_KEY_CONTROL_BLOCK Kcb +); + +NTSTATUS +NTAPI +CmDeleteValueKey( + IN PCM_KEY_CONTROL_BLOCK Kcb, + IN UNICODE_STRING ValueName +); + +NTSTATUS +NTAPI +CmQueryValueKey( + IN PCM_KEY_CONTROL_BLOCK Kcb, + IN UNICODE_STRING ValueName, + IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + IN PVOID KeyValueInformation, + IN ULONG Length, + IN PULONG ResultLength +); + // // Global variables accessible from all of Cm // @@ -1197,5 +1281,3 @@ extern ULONG CmpHashTableSize; // Inlined functions // #include "cm_x.h" - -#endif diff --git a/reactos/ntoskrnl/config/cmapi.c b/reactos/ntoskrnl/config/cmapi.c index d0386c012df..3d9d00d6023 100644 --- a/reactos/ntoskrnl/config/cmapi.c +++ b/reactos/ntoskrnl/config/cmapi.c @@ -1052,8 +1052,8 @@ CmDeleteKey(IN PCM_KEY_CONTROL_BLOCK Kcb) } /* Make sure we're file-backed */ - if (!(IsNoFileHive((PEREGISTRY_HIVE)Kcb->KeyHive)) || - !(IsNoFileHive((PEREGISTRY_HIVE)Kcb->ParentKcb->KeyHive))) + if (!(IsNoFileHive((PCMHIVE)Kcb->KeyHive)) || + !(IsNoFileHive((PCMHIVE)Kcb->ParentKcb->KeyHive))) { /* Sync up the hives */ CmiSyncHives(); diff --git a/reactos/ntoskrnl/config/cminit.c b/reactos/ntoskrnl/config/cminit.c index 2d1c7c4e892..7aefd8a5156 100644 --- a/reactos/ntoskrnl/config/cminit.c +++ b/reactos/ntoskrnl/config/cminit.c @@ -28,12 +28,8 @@ CmpInitializeHive(OUT PCMHIVE *RegistryHive, IN PCUNICODE_STRING FileName OPTIONAL, IN ULONG CheckFlags) { -#if 0 PCMHIVE Hive; -#else - PEREGISTRY_HIVE Hive; FILE_STANDARD_INFORMATION FileInformation; -#endif IO_STATUS_BLOCK IoStatusBlock; FILE_FS_SIZE_INFORMATION FileSizeInformation; NTSTATUS Status; @@ -89,9 +85,9 @@ CmpInitializeHive(OUT PCMHIVE *RegistryHive, } /* Allocate the hive */ - Hive = ExAllocatePoolWithTag(NonPagedPool, sizeof(EREGISTRY_HIVE), TAG_CM); + Hive = ExAllocatePoolWithTag(NonPagedPool, sizeof(CMHIVE), TAG_CM); if (!Hive) return STATUS_INSUFFICIENT_RESOURCES; -#if 0 + /* Setup null fields */ Hive->UnloadEvent = NULL; Hive->RootKcb = NULL; @@ -142,11 +138,11 @@ CmpInitializeHive(OUT PCMHIVE *RegistryHive, ExInitializeResourceLite(Hive->FlusherLock); /* Setup hive locks */ - ExInitializePushLock(&Hive->HiveLock); + ExInitializePushLock((PULONG_PTR)&Hive->HiveLock); Hive->HiveLockOwner = NULL; - ExInitializePushLock(&Hive->WriterLock); + ExInitializePushLock((PULONG_PTR)&Hive->WriterLock); Hive->WriterLockOwner = NULL; - ExInitializePushLock(&Hive->SecurityLock); + ExInitializePushLock((PULONG_PTR)&Hive->SecurityLock); Hive->HiveSecurityLockOwner = NULL; /* Clear file names */ @@ -154,22 +150,17 @@ CmpInitializeHive(OUT PCMHIVE *RegistryHive, RtlInitEmptyUnicodeString(&Hive->FileFullPath, NULL, 0); /* Initialize the view list */ - CmpInitializeHiveViewList(Hive); + CmpInitHiveViewList(Hive); /* Initailize the security cache */ - CmpInitializeSecurityCache(Hive); + CmpInitSecurityCache(Hive); /* Setup flags */ Hive->Flags = 0; Hive->FlushCount = 0; -#else - /* Clear it */ - RtlZeroMemory(Hive, sizeof(EREGISTRY_HIVE)); /* Set flags */ Hive->Flags = HiveFlags; - Hive->HiveHandle = Primary; - Hive->LogHandle = Log; /* Check how large the file is */ ZwQueryInformationFile(Primary, @@ -178,7 +169,6 @@ CmpInitializeHive(OUT PCMHIVE *RegistryHive, sizeof(FileInformation), FileStandardInformation); Cluster = FileInformation.EndOfFile.LowPart; -#endif /* Initialize it */ Status = HvInitialize(&Hive->Hive, @@ -197,10 +187,8 @@ CmpInitializeHive(OUT PCMHIVE *RegistryHive, if (!NT_SUCCESS(Status)) { /* Clear allocations and fail */ -#if 0 ExFreePool(Hive->ViewLock); ExFreePool(Hive->FlusherLock); -#endif ExFreePool(Hive); return Status; } @@ -215,10 +203,8 @@ CmpInitializeHive(OUT PCMHIVE *RegistryHive, if (CmCheckRegistry((PCMHIVE)Hive, TRUE)) { /* Free all alocations */ -#if 0 ExFreePool(Hive->ViewLock); ExFreePool(Hive->FlusherLock); -#endif ExFreePool(Hive); return STATUS_REGISTRY_CORRUPT; } diff --git a/reactos/ntoskrnl/config/cmparse.c b/reactos/ntoskrnl/config/cmparse.c index fe255ebd422..752926c313d 100644 --- a/reactos/ntoskrnl/config/cmparse.c +++ b/reactos/ntoskrnl/config/cmparse.c @@ -267,7 +267,7 @@ CmpDoCreate(IN PHHIVE Hive, if (!Class) Class = &LocalClass; /* Acquire the flusher lock */ - //ExAcquirePushLockShared((PVOID)&((PCMHIVE)Hive)->FlusherLock); + ExAcquirePushLockShared((PVOID)&((PCMHIVE)Hive)->FlusherLock); /* Check if the parent is being deleted */ #define KO_MARKED_FOR_DELETE 0x00000001 @@ -397,6 +397,6 @@ CmpDoCreate(IN PHHIVE Hive, Exit: /* Release the flusher lock and return status */ - //ExReleasePushLock((PVOID)&((PCMHIVE)Hive)->FlusherLock); + ExReleasePushLock((PVOID)&((PCMHIVE)Hive)->FlusherLock); return Status; } diff --git a/reactos/ntoskrnl/config/cmsysini.c b/reactos/ntoskrnl/config/cmsysini.c index 3b1d51a26c3..19f4ee0ca76 100644 --- a/reactos/ntoskrnl/config/cmsysini.c +++ b/reactos/ntoskrnl/config/cmsysini.c @@ -32,7 +32,7 @@ CmpInitHiveFromFile(IN PCUNICODE_STRING HiveName, HANDLE FileHandle = NULL, LogHandle = NULL; NTSTATUS Status; ULONG Operation, FileType; - PEREGISTRY_HIVE NewHive; + PCMHIVE NewHive; PAGED_CODE(); /* Assume failure */ @@ -110,24 +110,24 @@ CmpInitHiveFromFile(IN PCUNICODE_STRING HiveName, } /* Success, return hive */ - *Hive = (PCMHIVE)NewHive; + *Hive = NewHive; /* ROS: Init root key cell and prepare the hive */ if (Operation == HINIT_CREATE) CmCreateRootNode(&NewHive->Hive, L""); CmPrepareHive(&NewHive->Hive); /* Duplicate the hive name */ - NewHive->HiveFileName.Buffer = ExAllocatePoolWithTag(PagedPool, + NewHive->FileFullPath.Buffer = ExAllocatePoolWithTag(PagedPool, HiveName->Length, TAG_CM); - if (NewHive->HiveFileName.Buffer) + if (NewHive->FileFullPath.Buffer) { /* Copy the string */ - RtlCopyMemory(NewHive->HiveFileName.Buffer, + RtlCopyMemory(NewHive->FileFullPath.Buffer, HiveName->Buffer, HiveName->Length); - NewHive->HiveFileName.Length = HiveName->Length; - NewHive->HiveFileName.MaximumLength = HiveName->MaximumLength; + NewHive->FileFullPath.Length = HiveName->Length; + NewHive->FileFullPath.MaximumLength = HiveName->MaximumLength; } /* ROS: Close the hive files */ @@ -434,7 +434,7 @@ CmpInitializeSystemHive(IN PLOADER_PARAMETER_BLOCK LoaderBlock) NTSTATUS Status; BOOLEAN Allocate; UNICODE_STRING KeyName; - PEREGISTRY_HIVE SystemHive = NULL; + PCMHIVE SystemHive = NULL; UNICODE_STRING HiveName = RTL_CONSTANT_STRING(L"SYSTEM"); PSECURITY_DESCRIPTOR SecurityDescriptor; PAGED_CODE(); @@ -479,7 +479,7 @@ CmpInitializeSystemHive(IN PLOADER_PARAMETER_BLOCK LoaderBlock) CmPrepareHive(&SystemHive->Hive); /* Set the hive filename */ - RtlCreateUnicodeString(&SystemHive->HiveFileName, SYSTEM_REG_FILE); + RtlCreateUnicodeString(&SystemHive->FileFullPath, SYSTEM_REG_FILE); /* We imported, no need to create a new hive */ Allocate = FALSE; @@ -756,7 +756,7 @@ CmInitSystem1(VOID) LARGE_INTEGER DueTime; HANDLE ThreadHandle; CLIENT_ID ThreadId; - PEREGISTRY_HIVE HardwareHive; + PCMHIVE HardwareHive; PVOID BaseAddress; ULONG Length; PSECURITY_DESCRIPTOR SecurityDescriptor; diff --git a/reactos/ntoskrnl/config/cmwraprs.c b/reactos/ntoskrnl/config/cmwraprs.c index 418910bd31f..27d17dd57ac 100644 --- a/reactos/ntoskrnl/config/cmwraprs.c +++ b/reactos/ntoskrnl/config/cmwraprs.c @@ -77,8 +77,8 @@ CmpFileRead(IN PHHIVE RegistryHive, OUT PVOID Buffer, IN SIZE_T BufferLength) { - PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive; - HANDLE HiveHandle = FileType == HFILE_TYPE_PRIMARY ? CmHive->HiveHandle : CmHive->LogHandle; + PCMHIVE CmHive = (PCMHIVE)RegistryHive; + HANDLE HiveHandle = CmHive->FileHandles[FileType]; LARGE_INTEGER _FileOffset; IO_STATUS_BLOCK IoStatusBlock; NTSTATUS Status; @@ -97,8 +97,8 @@ CmpFileWrite(IN PHHIVE RegistryHive, IN PVOID Buffer, IN SIZE_T BufferLength) { - PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive; - HANDLE HiveHandle = FileType == HFILE_TYPE_PRIMARY ? CmHive->HiveHandle : CmHive->LogHandle; + PCMHIVE CmHive = (PCMHIVE)RegistryHive; + HANDLE HiveHandle = CmHive->FileHandles[FileType]; LARGE_INTEGER _FileOffset; IO_STATUS_BLOCK IoStatusBlock; NTSTATUS Status; @@ -116,8 +116,8 @@ CmpFileSetSize(IN PHHIVE RegistryHive, IN ULONG FileSize, IN ULONG OldFileSize) { - PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive; - HANDLE HiveHandle = FileType == HFILE_TYPE_PRIMARY ? CmHive->HiveHandle : CmHive->LogHandle; + PCMHIVE CmHive = (PCMHIVE)RegistryHive; + HANDLE HiveHandle = CmHive->FileHandles[FileType]; FILE_END_OF_FILE_INFORMATION EndOfFileInfo; FILE_ALLOCATION_INFORMATION FileAllocationInfo; IO_STATUS_BLOCK IoStatusBlock; @@ -149,8 +149,8 @@ CmpFileFlush(IN PHHIVE RegistryHive, IN OUT PLARGE_INTEGER FileOffset, IN ULONG Length) { - PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive; - HANDLE HiveHandle = FileType == HFILE_TYPE_PRIMARY ? CmHive->HiveHandle : CmHive->LogHandle; + PCMHIVE CmHive = (PCMHIVE)RegistryHive; + HANDLE HiveHandle = CmHive->FileHandles[FileType]; IO_STATUS_BLOCK IoStatusBlock; NTSTATUS Status; diff --git a/reactos/tools/mkhive/binhive.c b/reactos/tools/mkhive/binhive.c index cf17a8bb91e..e5dcbc5d20e 100644 --- a/reactos/tools/mkhive/binhive.c +++ b/reactos/tools/mkhive/binhive.c @@ -32,7 +32,7 @@ BOOL ExportBinaryHive( IN PCSTR FileName, - IN PEREGISTRY_HIVE Hive) + IN PCMHIVE Hive) { FILE *File; BOOL ret; @@ -49,7 +49,7 @@ ExportBinaryHive( fseek (File, 0, SEEK_SET); - Hive->HiveHandle = (HANDLE)File; + Hive->FileHandles[HFILE_TYPE_PRIMARY] = (HANDLE)File; ret = HvWriteHive(&Hive->Hive); fclose (File); return ret; diff --git a/reactos/tools/mkhive/binhive.h b/reactos/tools/mkhive/binhive.h index b252b941246..6ca62299dc2 100644 --- a/reactos/tools/mkhive/binhive.h +++ b/reactos/tools/mkhive/binhive.h @@ -29,7 +29,7 @@ BOOL ExportBinaryHive( IN PCSTR FileName, - IN PEREGISTRY_HIVE Hive); + IN PCMHIVE Hive); #endif /* __BINHIVE_H__ */ diff --git a/reactos/tools/mkhive/cmi.c b/reactos/tools/mkhive/cmi.c index 2b9940a25cb..185d383c20e 100644 --- a/reactos/tools/mkhive/cmi.c +++ b/reactos/tools/mkhive/cmi.c @@ -67,8 +67,8 @@ CmpFileWrite( IN PVOID Buffer, IN SIZE_T BufferLength) { - PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive; - FILE *File = CmHive->HiveHandle; + PCMHIVE CmHive = (PCMHIVE)RegistryHive; + FILE *File = CmHive->FileHandles[HFILE_TYPE_PRIMARY]; if (0 != fseek (File, *FileOffset, SEEK_SET)) return FALSE; return BufferLength == fwrite (Buffer, 1, BufferLength, File); @@ -94,20 +94,20 @@ CmpFileFlush( PLARGE_INTEGER FileOffset, ULONG Length) { - PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive; - FILE *File = CmHive->HiveHandle; + PCMHIVE CmHive = (PCMHIVE)RegistryHive; + FILE *File = CmHive->FileHandles[HFILE_TYPE_PRIMARY]; return 0 == fflush (File); } NTSTATUS CmiInitializeTempHive( - IN OUT PEREGISTRY_HIVE Hive) + IN OUT PCMHIVE Hive) { NTSTATUS Status; RtlZeroMemory ( Hive, - sizeof(EREGISTRY_HIVE)); + sizeof(CMHIVE)); DPRINT("Hive 0x%p\n", Hive); @@ -149,7 +149,7 @@ CmiInitializeTempHive( static NTSTATUS CmiAddKeyToHashTable( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN OUT PCM_KEY_FAST_INDEX HashCell, IN PCM_KEY_NODE KeyCell, IN HSTORAGE_TYPE StorageType, @@ -189,7 +189,7 @@ CmiAddKeyToHashTable( static NTSTATUS CmiAllocateHashTableCell ( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, OUT PCM_KEY_FAST_INDEX *HashBlock, OUT HCELL_INDEX *HBOffset, IN USHORT SubKeyCount, @@ -223,7 +223,7 @@ CmiAllocateHashTableCell ( NTSTATUS CmiAddSubKey( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN PCM_KEY_NODE ParentKeyCell, IN HCELL_INDEX ParentKeyCellOffset, IN PCUNICODE_STRING SubKeyName, @@ -513,7 +513,7 @@ CmiCompareKeyNamesI( NTSTATUS CmiScanForSubKey( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, IN PCUNICODE_STRING SubKeyName, IN ULONG Attributes, @@ -611,7 +611,7 @@ CmiGetPackedNameLength( static NTSTATUS CmiAllocateValueCell( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, OUT PCM_KEY_VALUE *ValueCell, OUT HCELL_INDEX *VBOffset, IN PCUNICODE_STRING ValueName, @@ -666,7 +666,7 @@ CmiAllocateValueCell( NTSTATUS CmiAddValueKey( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, IN HCELL_INDEX KeyCellOffset, IN PCUNICODE_STRING ValueName, @@ -780,7 +780,7 @@ CmiComparePackedNames( NTSTATUS CmiScanForValueKey( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, IN PCUNICODE_STRING ValueName, OUT PCM_KEY_VALUE *pValueCell, diff --git a/reactos/tools/mkhive/cmi.h b/reactos/tools/mkhive/cmi.h index b66d39ccde4..4a8f5e06095 100644 --- a/reactos/tools/mkhive/cmi.h +++ b/reactos/tools/mkhive/cmi.h @@ -28,11 +28,11 @@ NTSTATUS CmiInitializeTempHive( - IN OUT PEREGISTRY_HIVE Hive); + IN OUT PCMHIVE Hive); NTSTATUS CmiAddSubKey( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN PCM_KEY_NODE ParentKeyCell, IN HCELL_INDEX ParentKeyCellOffset, IN PCUNICODE_STRING SubKeyName, @@ -42,7 +42,7 @@ CmiAddSubKey( NTSTATUS CmiScanForSubKey( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, IN PCUNICODE_STRING SubKeyName, IN ULONG Attributes, @@ -51,7 +51,7 @@ CmiScanForSubKey( NTSTATUS CmiAddValueKey( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, IN HCELL_INDEX KeyCellOffset, IN PCUNICODE_STRING ValueName, @@ -60,7 +60,7 @@ CmiAddValueKey( NTSTATUS CmiScanForValueKey( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN PCM_KEY_NODE KeyCell, IN PCUNICODE_STRING ValueName, OUT PCM_KEY_VALUE *pValueCell, diff --git a/reactos/tools/mkhive/registry.c b/reactos/tools/mkhive/registry.c index 9a1074b0ef8..29de8c90f99 100644 --- a/reactos/tools/mkhive/registry.c +++ b/reactos/tools/mkhive/registry.c @@ -40,17 +40,17 @@ #define REG_DATA_SIZE_MASK 0x7FFFFFFF #define REG_DATA_IN_OFFSET 0x80000000 -static EREGISTRY_HIVE RootHive; +static CMHIVE RootHive; static MEMKEY RootKey; -EREGISTRY_HIVE DefaultHive; /* \Registry\User\.DEFAULT */ -EREGISTRY_HIVE SamHive; /* \Registry\Machine\SAM */ -EREGISTRY_HIVE SecurityHive; /* \Registry\Machine\SECURITY */ -EREGISTRY_HIVE SoftwareHive; /* \Registry\Machine\SOFTWARE */ -EREGISTRY_HIVE SystemHive; /* \Registry\Machine\SYSTEM */ +CMHIVE DefaultHive; /* \Registry\User\.DEFAULT */ +CMHIVE SamHive; /* \Registry\Machine\SAM */ +CMHIVE SecurityHive; /* \Registry\Machine\SECURITY */ +CMHIVE SoftwareHive; /* \Registry\Machine\SOFTWARE */ +CMHIVE SystemHive; /* \Registry\Machine\SYSTEM */ static MEMKEY CreateInMemoryStructure( - IN PEREGISTRY_HIVE RegistryHive, + IN PCMHIVE RegistryHive, IN HCELL_INDEX KeyCellOffset, IN PCUNICODE_STRING KeyName) { @@ -569,7 +569,7 @@ RegDeleteValueA( static BOOL ConnectRegistry( IN HKEY RootKey, - IN PEREGISTRY_HIVE HiveToConnect, + IN PCMHIVE HiveToConnect, IN LPCWSTR Path) { NTSTATUS Status; @@ -599,7 +599,7 @@ ConnectRegistry( static BOOL MyExportBinaryHive (PCHAR FileName, - PEREGISTRY_HIVE RootHive) + PCMHIVE RootHive) { FILE *File; BOOL ret; @@ -614,7 +614,7 @@ MyExportBinaryHive (PCHAR FileName, fseek (File, 0, SEEK_SET); - RootHive->HiveHandle = (HANDLE)File; + RootHive->FileHandles[HFILE_TYPE_PRIMARY] = (HANDLE)File; ret = HvWriteHive(&RootHive->Hive); fclose (File); return ret; diff --git a/reactos/tools/mkhive/registry.h b/reactos/tools/mkhive/registry.h index 9a1c41df25c..a810602a81f 100644 --- a/reactos/tools/mkhive/registry.h +++ b/reactos/tools/mkhive/registry.h @@ -41,7 +41,7 @@ typedef struct _REG_KEY /* Information on hard disk structure */ HCELL_INDEX KeyCellOffset; PCM_KEY_NODE KeyCell; - PEREGISTRY_HIVE RegistryHive; + PCMHIVE RegistryHive; /* Used when linking to another key */ struct _REG_KEY* LinkedKey; @@ -50,11 +50,11 @@ typedef struct _REG_KEY #define HKEY_TO_MEMKEY(hKey) ((MEMKEY)(hKey)) #define MEMKEY_TO_HKEY(memKey) ((HKEY)(memKey)) -extern EREGISTRY_HIVE DefaultHive; /* \Registry\User\.DEFAULT */ -extern EREGISTRY_HIVE SamHive; /* \Registry\Machine\SAM */ -extern EREGISTRY_HIVE SecurityHive; /* \Registry\Machine\SECURITY */ -extern EREGISTRY_HIVE SoftwareHive; /* \Registry\Machine\SOFTWARE */ -extern EREGISTRY_HIVE SystemHive; /* \Registry\Machine\SYSTEM */ +extern CMHIVE DefaultHive; /* \Registry\User\.DEFAULT */ +extern CMHIVE SamHive; /* \Registry\Machine\SAM */ +extern CMHIVE SecurityHive; /* \Registry\Machine\SECURITY */ +extern CMHIVE SoftwareHive; /* \Registry\Machine\SOFTWARE */ +extern CMHIVE SystemHive; /* \Registry\Machine\SYSTEM */ #define ERROR_SUCCESS 0L #define ERROR_UNSUCCESSFUL 1L @@ -127,3 +127,4 @@ RegInitializeRegistry(VOID); /* EOF */ +