59 SourceFile->ObjectName,
70 DPRINT1(
"ERROR: Hive is frozen\n");
108 if ((ForceFlush) && (Hive->
UseCount))
112 DPRINT1(
"FIXME: Hive is damaged and needs fixup\n");
137 NextEntry = NextEntry->
Flink;
162 if (
Parent->ValueList.Count)
201 DPRINT1(
"Invalid user data!\n");
308 if (!(WasSmall) && (
Length > 0))
316 Value->Data = TempData;
322 if (!(WasSmall) && (
Length > 0))
325 DataCell =
Value->Data;
365 Value->Data = NewCell;
398 NameLength =
Node->NameLength;
426 Info->KeyBasicInformation.LastWriteTime =
Node->LastWriteTime;
427 Info->KeyBasicInformation.TitleIndex = 0;
428 Info->KeyBasicInformation.NameLength = NameLength;
431 SizeLeft =
Length - MinimumSize;
484 Info->KeyNodeInformation.LastWriteTime =
Node->LastWriteTime;
485 Info->KeyNodeInformation.TitleIndex = 0;
486 Info->KeyNodeInformation.ClassLength =
Node->ClassLength;
487 Info->KeyNodeInformation.NameLength = NameLength;
490 SizeLeft =
Length - MinimumSize;
519 if (
Node->ClassLength > 0)
524 Info->KeyNodeInformation.ClassOffset =
Offset;
544 if (Length < Offset + Node->ClassLength)
555 Info->KeyNodeInformation.ClassOffset = 0xFFFFFFFF;
582 Info->KeyFullInformation.LastWriteTime =
Node->LastWriteTime;
583 Info->KeyFullInformation.TitleIndex = 0;
584 Info->KeyFullInformation.ClassLength =
Node->ClassLength;
587 Info->KeyFullInformation.Values =
Node->ValueList.Count;
588 Info->KeyFullInformation.MaxNameLen =
Node->MaxNameLen;
589 Info->KeyFullInformation.MaxClassLen =
Node->MaxClassLen;
590 Info->KeyFullInformation.MaxValueNameLen =
Node->MaxValueNameLen;
591 Info->KeyFullInformation.MaxValueDataLen =
Node->MaxValueDataLen;
594 if (
Node->ClassLength > 0)
598 Info->KeyFullInformation.ClassOffset =
Offset;
615 if (Length < Offset + Node->ClassLength)
626 Info->KeyFullInformation.ClassOffset = 0xFFFFFFFF;
724 FlusherLocked =
TRUE;
776 ChildCell = CurrentChild;
854 ASSERT(
Parent->MaxValueNameLen == Kcb->KcbMaxValueNameLen);
859 Kcb->KcbMaxValueNameLen =
ValueName->Length;
863 ASSERT(
Parent->MaxValueDataLen == Kcb->KcbMaxValueDataLen);
868 Kcb->KcbMaxValueDataLen =
Parent->MaxValueDataLen;
873 Kcb->KcbLastWriteTime =
Parent->LastWriteTime;
891 Kcb->ValueCache.Count =
Parent->ValueList.Count;
892 Kcb->ValueCache.ValueList =
Parent->ValueList.List;
972 if (ChildCell ==
HCELL_NIL)
goto Quickie;
1019 Kcb->KcbLastWriteTime =
Parent->LastWriteTime;
1022 ASSERT(
Parent->MaxValueNameLen == Kcb->KcbMaxValueNameLen);
1023 ASSERT(
Parent->MaxValueDataLen == Kcb->KcbMaxValueDataLen);
1027 if (!
Parent->ValueList.Count)
1030 Parent->MaxValueNameLen = 0;
1031 Parent->MaxValueDataLen = 0;
1032 Kcb->KcbMaxValueNameLen = 0;
1033 Kcb->KcbMaxValueDataLen = 0;
1044 Kcb->ValueCache.Count =
ChildList->Count;
1045 Kcb->ValueCache.ValueList =
ChildList->List;
1116 Hive = Kcb->KeyHive;
1151 KeyValueInformation,
1227 Hive = Kcb->KeyHive;
1232 if (Kcb->ValueCache.Count !=
Parent->ValueList.Count)
1234 DPRINT1(
"HACK: Overriding value cache count\n");
1235 Kcb->ValueCache.Count =
Parent->ValueList.Count;
1239 if (
Index >= Kcb->ValueCache.Count)
1322 KeyValueInformation,
1376 KeyHive = Kcb->KeyHash.KeyHive;
1377 KeyCell = Kcb->KeyHash.KeyCell;
1385 ASSERT(
Node->ValueList.Count == Kcb->ValueCache.Count);
1389 SubKeyCount =
Node->SubKeyCounts[0] +
Node->SubKeyCounts[1];
1392 ASSERT(SubKeyCount == 0);
1396 ASSERT(SubKeyCount == 1);
1400 ASSERT(SubKeyCount == Kcb->IndexHint->Count);
1404 ASSERT(SubKeyCount == Kcb->SubKeyCount);
1408 ASSERT(
Node->LastWriteTime.QuadPart == Kcb->KcbLastWriteTime.QuadPart);
1409 ASSERT(
Node->MaxNameLen == Kcb->KcbMaxNameLen);
1410 ASSERT(
Node->MaxValueNameLen == Kcb->KcbMaxValueNameLen);
1411 ASSERT(
Node->MaxValueDataLen == Kcb->KcbMaxValueDataLen);
1419 if (Kcb->NameBlock ==
NULL)
1425 if (Kcb->NameBlock->Compressed)
1429 Kcb->NameBlock->NameHash.NameLength);
1434 NameLength = Kcb->NameBlock->NameHash.NameLength;
1445 KeyCachedInfo->LastWriteTime = Kcb->KcbLastWriteTime;
1446 KeyCachedInfo->TitleIndex = 0;
1447 KeyCachedInfo->NameLength = NameLength;
1448 KeyCachedInfo->Values = Kcb->ValueCache.Count;
1449 KeyCachedInfo->MaxNameLen = Kcb->KcbMaxNameLen;
1450 KeyCachedInfo->MaxValueNameLen = Kcb->KcbMaxValueNameLen;
1451 KeyCachedInfo->MaxValueDataLen = Kcb->KcbMaxValueDataLen;
1457 DPRINT1(
"Kcb cache incoherency detected, kcb = %p\n", Kcb);
1467 KeyCachedInfo->SubKeys =
Node->SubKeyCounts[0] +
Node->SubKeyCounts[1];
1475 KeyCachedInfo->SubKeys = 0;
1480 KeyCachedInfo->SubKeys = 1;
1485 KeyCachedInfo->SubKeys = Kcb->IndexHint->Count;
1490 KeyCachedInfo->SubKeys = Kcb->SubKeyCount;
1500 _Out_ PKEY_USER_FLAGS_INFORMATION KeyFlagsInfo,
1512 KeyFlagsInfo->UserFlags = Kcb->KcbUserFlags;
1551 KeyNameInfo->NameLength = NeededLength;
1562 KeyNameInfo->NameLength = 0;
1589 NeededLength -= NameLength;
1605 ASSERT(NeededLength == 0);
1652 Hive = Kcb->KeyHive;
1763 Hive = Kcb->KeyHive;
1836 Kcb = KeyBody->KeyControlBlock;
1879 ParentCell =
Node->Parent;
1949 Hive = Kcb->KeyHive;
2021 DPRINT(
"Trusted classes not yet supported\n");
2032 &ClientSecurityContext);
2036 DPRINT1(
"Security context failed\n");
2054 &ClientSecurityContext,
2103 TargetKey->RootDirectory,
2106 TargetKey->SecurityDescriptor);
2127 DPRINT1(
"CmpLinkHiveToMaster failed, Status %lx\n",
Status);
2168 DPRINT(
"CmpUnlinkHiveFromMaster()\n");
2171 CellData =
HvGetCell(&CmHive->Hive, Cell);
2172 if (CellData ==
NULL)
2187 DPRINT1(
"CmpFreeKeyByCell() failed (Status 0x%08lx)\n",
Status);
2211 Hive = Kcb->KeyHive;
2212 Cell = Kcb->KeyCell;
2218 DPRINT1(
"Key is not a hive root key!\n");
2225 DPRINT1(
"Do not try to unload the master hive!\n");
2233 if (Kcb->RefCount > 1)
2246 DPRINT1(
"CmUnloadKey: Force unloading is HALF-IMPLEMENTED, expect dangling KCBs problems!\n");
2265 DPRINT(
"CmpUnlinkHiveFromMaster() failed!\n");
2342 ULONG ParentKeyCount;
2346 DPRINT(
"CmpEnumerateOpenSubKeys() called\n");
2349 if (RootKcb->RefCount == 1)
2351 DPRINT(
"Open sub keys: 0\n");
2368 if (CachedKcb->
TotalLevels > RootKcb->TotalLevels)
2371 ParentKeyCount = CachedKcb->
TotalLevels - RootKcb->TotalLevels;
2374 ParentKcb = CachedKcb;
2375 for (
j = 0;
j < ParentKeyCount;
j++)
2381 if (ParentKcb == RootKcb)
2387 DPRINT(
"Found a sub key pointing to '%.*s', RefCount = %u\n",
2392 if (DereferenceOpenedEntries &&
2423 else if ((CachedKcb->
RefCount == 0) && RemoveEmptyCacheEntries)
2444 DPRINT1(
"Open sub keys: %u\n", SubKeys);
2468 DPRINT(
"CmpDeepCopyKeyInternal(0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X)\n",
2522 DestNode->
Class = NewClassCell;
2621 if (DestKeyCell) *DestKeyCell = NewKeyCell;
2729 if (LowKcb->Delete || HighKcb->Delete)
#define ALIGN_UP_BY(size, align)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
#define OBJ_NAME_PATH_SEPARATOR
VOID NTAPI CmpFree(_In_ PVOID Ptr, _In_ ULONG Quota)
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
HCELL_INDEX NTAPI CmpCopyCell(IN PHHIVE SourceHive, IN HCELL_INDEX SourceCell, IN PHHIVE DestinationHive, IN HSTORAGE_TYPE StorageType)
#define CM_KCB_SUBKEY_ONE
enum _VALUE_SEARCH_RETURN_TYPE VALUE_SEARCH_RETURN_TYPE
#define CM_KCB_SUBKEY_HINT
@ SearchNeedExclusiveLock
#define CM_KCB_SYM_LINK_FOUND
#define CM_KCB_INVALID_CACHED_INFO
struct _KEY_INFORMATION * PKEY_INFORMATION
#define CM_KCB_READ_ONLY_KEY
FORCEINLINE VOID CmpAcquireKcbLockExclusive(PCM_KEY_CONTROL_BLOCK Kcb)
#define CMP_ASSERT_EXCLUSIVE_REGISTRY_LOCK()
#define CMP_ASSERT_FLUSH_LOCK(h)
#define CmpAcquireKcbLockShared(k)
#define CMP_IS_CELL_CACHED(c)
#define CmpIsKcbLockedExclusive(k)
#define CMP_ASSERT_KCB_LOCK(k)
FORCEINLINE VOID CmpConvertKcbSharedToExclusive(IN PCM_KEY_CONTROL_BLOCK k)
FORCEINLINE VOID CmpReleaseKcbLock(PCM_KEY_CONTROL_BLOCK Kcb)
FORCEINLINE BOOLEAN CmpTryToConvertKcbSharedToExclusive(IN PCM_KEY_CONTROL_BLOCK k)
static BOOLEAN NTAPI CmpUnlinkHiveFromMaster(IN PCMHIVE CmHive, IN HCELL_INDEX Cell)
NTSTATUS NTAPI CmUnloadKey(IN PCM_KEY_CONTROL_BLOCK Kcb, IN ULONG Flags)
NTSTATUS NTAPI CmpSetValueKeyExisting(IN PHHIVE Hive, IN HCELL_INDEX OldChild, IN PCM_KEY_VALUE Value, IN ULONG Type, IN PVOID Data, IN ULONG DataSize, IN ULONG StorageType, IN ULONG TempData)
static NTSTATUS CmpQueryKeyDataFromCache(_In_ PCM_KEY_CONTROL_BLOCK Kcb, _Out_ PKEY_CACHED_INFORMATION KeyCachedInfo, _In_ ULONG Length, _Out_ PULONG ResultLength)
BOOLEAN NTAPI CmpIsHiveAlreadyLoaded(IN HANDLE KeyHandle, IN POBJECT_ATTRIBUTES SourceFile, OUT PCMHIVE *CmHive)
NTSTATUS NTAPI CmSetValueKey(IN PCM_KEY_CONTROL_BLOCK Kcb, IN PUNICODE_STRING ValueName, IN ULONG Type, IN PVOID Data, IN ULONG DataLength)
static NTSTATUS CmpDeepCopyKeyInternal(IN PHHIVE SourceHive, IN HCELL_INDEX SrcKeyCell, IN PHHIVE DestinationHive, IN HCELL_INDEX Parent, IN HSTORAGE_TYPE StorageType, OUT PHCELL_INDEX DestKeyCell OPTIONAL)
NTSTATUS NTAPI CmSaveMergedKeys(IN PCM_KEY_CONTROL_BLOCK HighKcb, IN PCM_KEY_CONTROL_BLOCK LowKcb, IN HANDLE FileHandle)
NTSTATUS NTAPI CmFlushKey(IN PCM_KEY_CONTROL_BLOCK Kcb, IN BOOLEAN ExclusiveLock)
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 CmpSetValueKeyNew(IN PHHIVE Hive, IN PCM_KEY_NODE Parent, IN PUNICODE_STRING ValueName, IN ULONG Index, IN ULONG Type, IN PVOID Data, IN ULONG DataSize, IN ULONG StorageType, IN ULONG SmallData)
NTSTATUS NTAPI CmpDeepCopyKey(IN PHHIVE SourceHive, IN HCELL_INDEX SrcKeyCell, IN PHHIVE DestinationHive, IN HSTORAGE_TYPE StorageType, OUT PHCELL_INDEX DestKeyCell OPTIONAL)
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)
static NTSTATUS CmpQueryFlagsInformation(_In_ PCM_KEY_CONTROL_BLOCK Kcb, _Out_ PKEY_USER_FLAGS_INFORMATION KeyFlagsInfo, _In_ ULONG Length, _In_ PULONG ResultLength)
NTSTATUS NTAPI CmDeleteValueKey(IN PCM_KEY_CONTROL_BLOCK Kcb, IN UNICODE_STRING ValueName)
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 CmSaveKey(IN PCM_KEY_CONTROL_BLOCK Kcb, IN HANDLE FileHandle, IN ULONG Flags)
BOOLEAN NTAPI CmpDoFlushAll(IN BOOLEAN ForceFlush)
NTSTATUS NTAPI CmQueryKey(_In_ PCM_KEY_CONTROL_BLOCK Kcb, _In_ KEY_INFORMATION_CLASS KeyInformationClass, _Out_opt_ PVOID KeyInformation, _In_ ULONG Length, _Out_ PULONG ResultLength)
NTSTATUS NTAPI CmpQueryKeyData(IN PHHIVE Hive, IN PCM_KEY_NODE Node, IN KEY_INFORMATION_CLASS KeyInformationClass, IN OUT PVOID KeyInformation, IN ULONG Length, IN OUT PULONG ResultLength)
NTSTATUS NTAPI CmDeleteKey(IN PCM_KEY_BODY KeyBody)
NTSTATUS NTAPI CmLoadKey(IN POBJECT_ATTRIBUTES TargetKey, IN POBJECT_ATTRIBUTES SourceFile, IN ULONG Flags, IN PCM_KEY_BODY KeyBody)
ULONG NTAPI CmpEnumerateOpenSubKeys(IN PCM_KEY_CONTROL_BLOCK RootKcb, IN BOOLEAN RemoveEmptyCacheEntries, IN BOOLEAN DereferenceOpenedEntries)
static NTSTATUS CmpQueryNameInformation(_In_ PCM_KEY_CONTROL_BLOCK Kcb, _Out_opt_ PKEY_NAME_INFORMATION KeyNameInfo, _In_ ULONG Length, _Out_ PULONG ResultLength)
EX_PUSH_LOCK CmpHiveListHeadLock
EX_PUSH_LOCK CmpLoadHiveLock
UNICODE_STRING CmSymbolicLinkValueName
struct _CM_KEY_NODE * PCM_KEY_NODE
struct _CM_KEY_VALUE * PCM_KEY_VALUE
#define CM_KEY_VALUE_SIGNATURE
#define CM_KEY_VALUE_SPECIAL_SIZE
#define CM_KEY_NODE_SIGNATURE
#define CM_KEY_VALUE_SMALL
VOID NTAPI CmpRemoveFromDelayedClose(IN PCM_KEY_CONTROL_BLOCK Kcb)
VOID NTAPI CmpRemoveFromHiveFileList(IN PCMHIVE Hive)
NTSTATUS NTAPI CmpAddToHiveFileList(IN PCMHIVE Hive)
BOOLEAN NTAPI CmpAddSubKey(IN PHHIVE Hive, IN HCELL_INDEX Parent, IN HCELL_INDEX Child)
HCELL_INDEX NTAPI CmpFindSubKeyByNumber(IN PHHIVE Hive, IN PCM_KEY_NODE Node, IN ULONG Number)
VOID NTAPI CmpCleanUpKcbCacheWithLock(IN PCM_KEY_CONTROL_BLOCK Kcb, IN BOOLEAN LockHeldExclusively)
PCM_KEY_HASH_TABLE_ENTRY CmpCacheTable
VOID NTAPI CmpCleanUpKcbValueCache(IN PCM_KEY_CONTROL_BLOCK Kcb)
VOID NTAPI CmpFlushNotifiesOnKeyBodyList(IN PCM_KEY_CONTROL_BLOCK Kcb, IN BOOLEAN LockHeld)
VOID NTAPI CmpCleanUpSubKeyInfo(IN PCM_KEY_CONTROL_BLOCK Kcb)
VOID NTAPI CmpRemoveKeyControlBlock(IN PCM_KEY_CONTROL_BLOCK Kcb)
NTSTATUS NTAPI CmpFreeKeyByCell(IN PHHIVE Hive, IN HCELL_INDEX Cell, IN BOOLEAN Unlink)
NTSTATUS NTAPI CmpCmdHiveOpen(IN POBJECT_ATTRIBUTES FileAttributes, IN PSECURITY_CLIENT_CONTEXT ImpersonationContext, IN OUT PBOOLEAN Allocate, OUT PCMHIVE *NewHive, IN ULONG CheckFlags)
BOOLEAN CmpForceForceFlush
BOOLEAN CMAPI HvTrackCellRef(IN OUT PHV_TRACK_CELL_REF CellRef, IN PHHIVE Hive, IN HCELL_INDEX Cell)
#define HvReleaseCell(Hive, Cell)
USHORT NTAPI CmpCopyName(IN PHHIVE Hive, OUT PWCHAR Destination, IN PCUNICODE_STRING Source)
BOOLEAN NTAPI CmpMarkValueDataDirty(IN PHHIVE Hive, IN PCM_KEY_VALUE Value)
BOOLEAN CMAPI HvHiveWillShrink(IN PHHIVE RegistryHive)
BOOLEAN NTAPI CmpFreeValue(IN PHHIVE Hive, IN HCELL_INDEX Cell)
BOOLEAN NTAPI CmpFreeValueData(IN PHHIVE Hive, IN HCELL_INDEX DataCell, IN ULONG DataLength)
NTSTATUS NTAPI CmpRemoveValueFromList(IN PHHIVE Hive, IN ULONG Index, IN OUT PCHILD_LIST ChildList)
USHORT NTAPI CmpNameSize(IN PHHIVE Hive, IN PCUNICODE_STRING Name)
BOOLEAN CMAPI HvSyncHive(PHHIVE RegistryHive)
NTSTATUS NTAPI CmpSetValueDataNew(IN PHHIVE Hive, IN PVOID Data, IN ULONG DataSize, IN HSTORAGE_TYPE StorageType, IN HCELL_INDEX ValueCell, OUT PHCELL_INDEX DataCell)
VOID NTAPI CmpCopyCompressedName(OUT PWCHAR Destination, IN ULONG DestinationLength, IN PWCHAR Source, IN ULONG SourceLength)
NTSTATUS NTAPI CmpCopyKeyValueList(IN PHHIVE SourceHive, IN PCHILD_LIST SrcValueList, IN PHHIVE DestinationHive, IN OUT PCHILD_LIST DestValueList, IN HSTORAGE_TYPE StorageType)
BOOLEAN CMAPI HvIsCellDirty(IN PHHIVE Hive, IN HCELL_INDEX Cell)
VOID CMAPI HvReleaseFreeCellRefArray(IN OUT PHV_TRACK_CELL_REF CellRef)
#define ASSERT_VALUE_BIG(h, s)
static BOOLEAN CmpIsKeyValueSmall(OUT PULONG RealLength, IN ULONG Length)
VOID CMAPI HvFreeCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset)
LONG CMAPI HvGetCellSize(PHHIVE RegistryHive, PVOID Cell)
USHORT NTAPI CmpCompressedNameSize(IN PWCHAR Name, IN ULONG Length)
BOOLEAN CMAPI HvMarkCellDirty(PHHIVE RegistryHive, HCELL_INDEX CellOffset, BOOLEAN HoldingLock)
HCELL_INDEX CMAPI HvReallocateCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset, ULONG Size)
#define HvGetCell(Hive, Cell)
HCELL_INDEX CMAPI HvAllocateCell(PHHIVE RegistryHive, ULONG Size, HSTORAGE_TYPE Storage, IN HCELL_INDEX Vicinity)
VOID CMAPI HvFree(PHHIVE RegistryHive)
BOOLEAN CMAPI HvWriteHive(PHHIVE RegistryHive)
BOOLEAN NTAPI CmpFindNameInList(IN PHHIVE Hive, IN PCHILD_LIST ChildList, IN PCUNICODE_STRING Name, OUT PULONG ChildIndex OPTIONAL, OUT PHCELL_INDEX CellIndex)
NTSTATUS NTAPI CmpAddValueToList(IN PHHIVE Hive, IN HCELL_INDEX ValueCell, IN ULONG Index, IN HSTORAGE_TYPE StorageType, IN OUT PCHILD_LIST ChildList)
VOID NTAPI CmpDestroyHiveViewList(IN PCMHIVE Hive)
VOID NTAPI CmpReportNotify(IN PCM_KEY_CONTROL_BLOCK Kcb, IN PHHIVE Hive, IN HCELL_INDEX Cell, IN ULONG Filter)
VOID NTAPI CmpSetGlobalQuotaAllowed(VOID)
VOID NTAPI CmpDestroySecurityCache(IN PCMHIVE Hive)
VOID NTAPI CmpLockRegistryExclusive(VOID)
VOID NTAPI CmpUnlockRegistry(VOID)
NTSTATUS NTAPI CmpLinkHiveToMaster(IN PUNICODE_STRING LinkName, IN HANDLE RootDirectory, IN PCMHIVE RegistryHive, IN BOOLEAN Allocate, IN PSECURITY_DESCRIPTOR SecurityDescriptor)
VOID NTAPI CmpLockHiveFlusherExclusive(IN PCMHIVE Hive)
VOID NTAPI CmpAcquireTwoKcbLocksExclusiveByKey(IN ULONG ConvKey1, IN ULONG ConvKey2)
VOID NTAPI CmpReleaseTwoKcbLockByKey(IN ULONG ConvKey1, IN ULONG ConvKey2)
VOID NTAPI CmpLockRegistry(VOID)
VOID NTAPI CmpLockHiveFlusherShared(IN PCMHIVE Hive)
BOOLEAN CmpSpecialBootCondition
BOOLEAN NTAPI CmpTestRegistryLockExclusive(VOID)
LIST_ENTRY CmpHiveListHead
VOID NTAPI CmpUnlockHiveFlusher(IN PCMHIVE Hive)
VALUE_SEARCH_RETURN_TYPE NTAPI CmpQueryKeyValueData(IN PCM_KEY_CONTROL_BLOCK Kcb, IN PCM_CACHED_VALUE *CachedValue, IN PCM_KEY_VALUE ValueKey, IN BOOLEAN ValueIsCached, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, IN PVOID KeyValueInformation, IN ULONG Length, OUT PULONG ResultLength, OUT PNTSTATUS Status)
VALUE_SEARCH_RETURN_TYPE NTAPI CmpFindValueByNameFromCache(IN PCM_KEY_CONTROL_BLOCK Kcb, IN PCUNICODE_STRING Name, OUT PCM_CACHED_VALUE **CachedValue, OUT ULONG *Index, OUT PCM_KEY_VALUE *Value, OUT BOOLEAN *ValueIsCached, OUT PHCELL_INDEX CellToRelease)
VALUE_SEARCH_RETURN_TYPE NTAPI CmpGetValueListFromCache(IN PCM_KEY_CONTROL_BLOCK Kcb, OUT PCELL_DATA *CellData, OUT BOOLEAN *IndexIsCached, OUT PHCELL_INDEX ValueListToRelease)
VALUE_SEARCH_RETURN_TYPE NTAPI CmpGetValueKeyFromCache(IN PCM_KEY_CONTROL_BLOCK Kcb, IN PCELL_DATA CellData, IN ULONG Index, OUT PCM_CACHED_VALUE **CachedValue, OUT PCM_KEY_VALUE *Value, IN BOOLEAN IndexIsCached, OUT BOOLEAN *ValueIsCached, OUT PHCELL_INDEX CellToRelease)
VALUE_SEARCH_RETURN_TYPE NTAPI CmpCompareNewValueDataAgainstKCBCache(IN PCM_KEY_CONTROL_BLOCK Kcb, IN PUNICODE_STRING ValueName, IN ULONG Type, IN PVOID Data, IN ULONG DataSize)
#define NT_SUCCESS(StatCode)
static const WCHAR Cleanup[]
#define RemoveEntryList(Entry)
#define PsGetCurrentThread()
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
#define KeQuerySystemTime(t)
#define ExDeleteResourceLite(res)
FORCEINLINE VOID ExReleasePushLock(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID ExAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
IN PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ULONG BOOLEAN BOOLEAN ExclusiveLock
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
#define KeGetCurrentThread
#define HIVE_IS_UNLOADING
#define HFILE_TYPE_PRIMARY
#define HvGetCellType(Cell)
_In_ GUID _In_ PVOID ValueData
#define EXCEPTION_EXECUTE_HANDLER
struct _SECURITY_QUALITY_OF_SERVICE SECURITY_QUALITY_OF_SERVICE
#define ExFreePoolWithTag(_P, _T)
#define SeDeleteClientSecurity(C)
NTKERNELAPI NTSTATUS NTAPI SeCreateClientSecurity(IN PETHREAD Thread, IN PSECURITY_QUALITY_OF_SERVICE QualityOfService, IN BOOLEAN RemoteClient, OUT PSECURITY_CLIENT_CONTEXT ClientContext)
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
_In_ ULONG _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define REG_NO_LAZY_FLUSH
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
enum _KEY_VALUE_INFORMATION_CLASS KEY_VALUE_INFORMATION_CLASS
enum _KEY_INFORMATION_CLASS KEY_INFORMATION_CLASS
#define RTL_SIZEOF_THROUGH_FIELD(type, field)
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS NTAPI CmpInitializeHive(OUT PCMHIVE *CmHive, IN ULONG OperationType, IN ULONG HiveFlags, IN ULONG FileType, IN PVOID HiveData OPTIONAL, IN HANDLE Primary, IN HANDLE Log, IN HANDLE External, IN PCUNICODE_STRING FileName OPTIONAL, IN ULONG CheckFlags)
VOID NTAPI CmpCloseHiveFiles(IN PCMHIVE Hive)
NTSTATUS NTAPI CmpDestroyHive(IN PCMHIVE CmHive)
#define STATUS_KEY_DELETED
#define STATUS_NO_LOG_SPACE
#define STATUS_NO_MORE_ENTRIES
#define STATUS_INVALID_INFO_CLASS
#define STATUS_REGISTRY_IO_FAILED
NTSTATUS NTAPI ObOpenObjectByName(IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN OUT PVOID ParseContext, OUT PHANDLE Handle)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
#define STATUS_CANNOT_DELETE
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
PULONG MinorVersion OPTIONAL
base of all file and directory entries
union _CELL_DATA::@4098 u
HANDLE FileHandles[HFILE_TYPE_MAX]
UNICODE_STRING FileUserName
struct _CM_KEY_CONTROL_BLOCK * KeyControlBlock
PCM_NAME_CONTROL_BLOCK NameBlock
struct _CM_KEY_CONTROL_BLOCK * ParentKcb
HCELL_INDEX SubKeyLists[HTYPE_COUNT]
ULONG SubKeyCounts[HTYPE_COUNT]
WCHAR Name[ANYSIZE_ARRAY]
WCHAR Name[ANYSIZE_ARRAY]
struct _LIST_ENTRY * Flink
SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFCHILDLIST * ChildList
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
#define REG_NOTIFY_CHANGE_NAME
#define REG_NOTIFY_CHANGE_LAST_SET
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_Must_inspect_result_ _In_ ULONG Flags
_In_opt_ PALLOCATE_FUNCTION Allocate
#define ObDereferenceObject
#define SECURITY_DYNAMIC_TRACKING
_In_ ULONG _In_ KEY_INFORMATION_CLASS KeyInformationClass