14 #define _CMLIB_DEBUG_ 1 22 #define NTDDI_WS03SP4 0x05020400 23 #define NTDDI_WIN6 0x06000000 24 #define NTDDI_LONGHORN NTDDI_WIN6 25 #define NTDDI_VISTA NTDDI_WIN6 26 #define NTDDI_WIN7 0x06010000 28 #define NTDDI_VERSION NTDDI_WS03SP4 // This is the ReactOS NT kernel version 31 #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1] 34 #define strncasecmp _strnicmp 35 #define strcasecmp _stricmp 38 #if (!defined(_MSC_VER) || (_MSC_VER < 1500)) 43 #define _In_range_(x, y) 46 #define __drv_aliasesMem 49 #define min(a, b) (((a) < (b)) ? (a) : (b)) 58 #define STATUS_SUCCESS ((NTSTATUS)0x00000000) 59 #define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002) 60 #define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017) 61 #define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009A) 62 #define STATUS_REGISTRY_CORRUPT ((NTSTATUS)0xC000014C) 63 #define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015C) 64 #define STATUS_REGISTRY_RECOVERED ((NTSTATUS)0x40000009) 66 #define REG_OPTION_VOLATILE 1 67 #define OBJ_CASE_INSENSITIVE 0x00000040L 68 #define USHORT_MAX USHRT_MAX 70 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\') 71 #define UNICODE_NULL ((WCHAR)0) 124 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP) / 32]) >> ((BP) % 32)) & 0x1) 125 #define UNREFERENCED_PARAMETER(P) ((void)(P)) 127 #define PKTHREAD PVOID 128 #define PKGUARDED_MUTEX PVOID 129 #define PERESOURCE PVOID 130 #define PFILE_OBJECT PVOID 131 #define PKEVENT PVOID 132 #define PWORK_QUEUE_ITEM PVOID 133 #define EX_PUSH_LOCK PULONG_PTR 151 #define CMLTRACE(x, ...) 154 #define REGISTRY_ERROR ((ULONG)0x00000051L) 162 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented 163 #define CMLTRACE DbgPrintEx 165 #define CMLTRACE(x, ...) \ 166 if (x & CmlibTraceLevel) DbgPrint(__VA_ARGS__) 169 #define CMLTRACE(x, ...) DPRINT(__VA_ARGS__) 174 #include <bugcodes.h> 186 #define CMLIB_HCELL_DEBUG 0x01 189 #define ROUND_UP(a,b) ((((a)+(b)-1)/(b))*(b)) 190 #define ROUND_DOWN(a,b) (((a)/(b))*(b)) 197 #if defined(TARGET_i386) || defined(TARGET_amd64) || \ 198 defined(TARGET_arm) || defined(TARGET_arm64) 199 #define PAGE_SIZE 0x1000 201 #error Local PAGE_SIZE definition required when built as host 206 #define TAG_KCB 'bkMC' 207 #define TAG_CMHIVE 'vHMC' 208 #define TAG_CMSD 'DSMC' 212 #include <wine/unicode.h> 223 #define CMP_SECURITY_HASH_LISTS 64 296 #define STATIC_CELL_PAIR_COUNT 4 311 #define ASSERT_VALUE_BIG(h, s) \ 312 ASSERTMSG("Big keys not supported!\n", !CmpIsKeyValueBig(h, s)); 381 #define HvGetCell(Hive, Cell) \ 382 (Hive)->GetCellRoutine(Hive, Cell) 384 #define HvReleaseCell(Hive, Cell) \ 386 if ((Hive)->ReleaseCellRoutine) \ 387 (Hive)->ReleaseCellRoutine(Hive, Cell); \
#define KeQuerySystemTime(t)
static int Hash(const char *)
BOOLEAN CMAPI HvIsCellDirty(IN PHHIVE Hive, IN HCELL_INDEX Cell)
LIST_ENTRY TrustClassEntry
PWORK_QUEUE_ITEM UnloadWorkItem
struct _CM_USE_COUNT_LOG * PCM_USE_COUNT_LOG
PHBIN CMAPI HvpAddBin(PHHIVE RegistryHive, ULONG Size, HSTORAGE_TYPE Storage)
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID NTAPI CmpFree(IN PVOID Ptr, IN ULONG Quota)
WORD * PSECURITY_DESCRIPTOR_CONTROL
BOOLEAN(CMAPI * PFILE_SET_SIZE_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, ULONG FileSize, ULONG OldfileSize)
ULONG NTAPI CmpComputeHashKey(IN ULONG Hash, IN PCUNICODE_STRING Name, IN BOOLEAN AllowSeparators)
BOOLEAN CMAPI HvIsCellAllocated(IN PHHIVE RegistryHive, IN HCELL_INDEX CellIndex)
HCELL_INDEX CMAPI HvReallocateCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset, ULONG Size)
struct _CM_USE_COUNT_LOG_ENTRY CM_USE_COUNT_LOG_ENTRY
ULONG CMAPI HvpHiveHeaderChecksum(PHBASE_BLOCK HiveHeader)
CM_USE_COUNT_LOG_ENTRY Log[32]
NTSTATUS CMAPI HvInitialize(PHHIVE RegistryHive, ULONG OperationType, ULONG HiveFlags, ULONG FileType, PVOID HiveData OPTIONAL, PALLOCATE_ROUTINE Allocate, PFREE_ROUTINE Free, PFILE_SET_SIZE_ROUTINE FileSetSize, PFILE_WRITE_ROUTINE FileWrite, PFILE_READ_ROUTINE FileRead, PFILE_FLUSH_ROUTINE FileFlush, ULONG Cluster OPTIONAL, PCUNICODE_STRING FileName OPTIONAL)
NTSTATUS NTAPI CmpFreeKeyByCell(IN PHHIVE Hive, IN HCELL_INDEX Cell, IN BOOLEAN Unlink)
BOOLEAN NTAPI CmpGetValueData(IN PHHIVE Hive, IN PCM_KEY_VALUE Value, OUT PULONG Length, OUT PVOID *Buffer, OUT PBOOLEAN BufferAllocated, OUT PHCELL_INDEX CellToRelease)
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
PVOID NTAPI CmpAllocate(IN SIZE_T Size, IN BOOLEAN Paged, IN ULONG Tag)
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
VOID NTAPI CmpFreeSecurityDescriptor(IN PHHIVE Hive, IN HCELL_INDEX Cell)
#define STATIC_CELL_PAIR_COUNT
HCELL_INDEX NTAPI CmpFindSubKeyByNumber(IN PHHIVE Hive, IN PCM_KEY_NODE Node, IN ULONG Number)
IN PVOID IN PVOID IN USHORT IN USHORT Size
CM_USE_COUNT_LOG UseCountLog
VOID CMAPI HvReleaseFreeCellRefArray(IN OUT PHV_TRACK_CELL_REF CellRef)
HCELL_INDEX CMAPI HvAllocateCell(PHHIVE RegistryHive, ULONG Size, HSTORAGE_TYPE Storage, IN HCELL_INDEX Vicinity)
NTSYSAPI ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP, ULONG, ULONG)
EX_PUSH_LOCK SecurityLock
NTSTATUS CMAPI HvpCreateHiveFreeCellList(PHHIVE Hive)
static int Unlink(const char **args)
struct _CM_KEY_CONTROL_BLOCK * PCM_KEY_CONTROL_BLOCK
NTSTATUS NTAPI CmpRemoveValueFromList(IN PHHIVE Hive, IN ULONG Index, IN OUT PCHILD_LIST ChildList)
_In_opt_ PALLOCATE_FUNCTION Allocate
BOOLEAN NTAPI CmpAddSubKey(IN PHHIVE Hive, IN HCELL_INDEX Parent, IN HCELL_INDEX Child)
NTSTATUS NTAPI CmpAddValueToList(IN PHHIVE Hive, IN HCELL_INDEX ValueCell, IN ULONG Index, IN HSTORAGE_TYPE StorageType, IN OUT PCHILD_LIST ChildList)
_In_ ULONG _In_ ULONG HintIndex
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
#define CM_KEY_VALUE_SPECIAL_SIZE
UNICODE_STRING FileUserName
USHORT NTAPI CmpCopyName(IN PHHIVE Hive, OUT PWCHAR Destination, IN PCUNICODE_STRING Source)
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
BOOLEAN NTAPI CmpFreeValue(IN PHHIVE Hive, IN HCELL_INDEX Cell)
USHORT NTAPI CmpNameSize(IN PHHIVE Hive, IN PCUNICODE_STRING Name)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_In_ WDFDEVICE _In_ WDF_SPECIAL_FILE_TYPE FileType
BOOLEAN(CMAPI * PFILE_READ_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PULONG FileOffset, PVOID Buffer, SIZE_T BufferLength)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
BOOLEAN(CMAPI * PFILE_FLUSH_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PLARGE_INTEGER FileOffset, ULONG Length)
_In_ const STRING _In_ BOOLEAN CaseInSensitive
WORD SECURITY_DESCRIPTOR_CONTROL
VOID NTAPI CmpCopyCompressedName(OUT PWCHAR Destination, IN ULONG DestinationLength, IN PWCHAR Source, IN ULONG SourceLength)
struct _HV_HIVE_CELL_PAIR * PHV_HIVE_CELL_PAIR
PCM_KEY_CONTROL_BLOCK RootKcb
struct _SECURITY_DESCRIPTOR_RELATIVE * PISECURITY_DESCRIPTOR_RELATIVE
HANDLE FileHandles[HFILE_TYPE_MAX]
BOOLEAN CMAPI HvWriteHive(PHHIVE RegistryHive)
static BOOLEAN CmpIsKeyValueSmall(OUT PULONG RealLength, IN ULONG Length)
UNICODE_STRING FileFullPath
#define CMP_SECURITY_HASH_LISTS
_Out_ _Inout_ POEM_STRING DestinationString
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
VOID CMAPI HvFree(PHHIVE RegistryHive)
struct _HV_HIVE_CELL_PAIR HV_HIVE_CELL_PAIR
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
struct _CM_CELL_REMAP_BLOCK * PCM_CELL_REMAP_BLOCK
WCHAR NTAPI RtlUpcaseUnicodeChar(_In_ WCHAR Source)
struct _CM_KEY_SECURITY_CACHE_ENTRY * PCM_KEY_SECURITY_CACHE_ENTRY
HV_HIVE_CELL_PAIR StaticArray[STATIC_CELL_PAIR_COUNT]
PCELL_DATA NTAPI CmpValueToData(IN PHHIVE Hive, IN PCM_KEY_VALUE Value, OUT PULONG Length)
NTSTATUS NTAPI CmpSetValueDataNew(IN PHHIVE Hive, IN PVOID Data, IN ULONG DataSize, IN HSTORAGE_TYPE StorageType, IN HCELL_INDEX ValueCell, OUT PHCELL_INDEX DataCell)
BOOLEAN CMAPI CmCreateRootNode(PHHIVE Hive, PCWSTR Name)
_In_ WDFCOLLECTION _In_ ULONG Index
BOOLEAN(CMAPI * PFILE_WRITE_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PULONG FileOffset, PVOID Buffer, SIZE_T BufferLength)
VOID(CMAPI * PFREE_ROUTINE)(PVOID Ptr, ULONG Quota)
BOOLEAN CMAPI HvMarkCellDirty(PHHIVE RegistryHive, HCELL_INDEX CellOffset, BOOLEAN HoldingLock)
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
NTSTATUS NTAPI CmpCopyKeyValueList(IN PHHIVE SourceHive, IN PCHILD_LIST SrcValueList, IN PHHIVE DestinationHive, IN OUT PCHILD_LIST DestValueList, IN HSTORAGE_TYPE StorageType)
BOOLEAN CMAPI HvSyncHive(PHHIVE RegistryHive)
VOID CMAPI HvFreeCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset)
BOOLEAN CMAPI HvTrackCellRef(IN OUT PHV_TRACK_CELL_REF CellRef, IN PHHIVE Hive, IN HCELL_INDEX Cell)
PCELL_DATA CMAPI HvpGetCellData(_In_ PHHIVE Hive, _In_ HCELL_INDEX CellIndex)
LONG CMAPI HvGetCellSize(PHHIVE RegistryHive, PVOID Cell)
_Out_ _Inout_ POEM_STRING _In_ PCUNICODE_STRING SourceString
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
LIST_ENTRY LRUViewListHead
struct _SECURITY_DESCRIPTOR_RELATIVE SECURITY_DESCRIPTOR_RELATIVE
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
struct _HV_TRACK_CELL_REF * PHV_TRACK_CELL_REF
LIST_ENTRY KnodeConvertListHead
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFCHILDLIST * ChildList
_Must_inspect_result_ _In_opt_ WDFKEY ParentKey
PCM_CELL_REMAP_BLOCK CellRemapArray
struct _HV_TRACK_CELL_REF HV_TRACK_CELL_REF
SECURITY_DESCRIPTOR_CONTROL Control
HCELL_INDEX NTAPI CmpFindValueByName(IN PHHIVE Hive, IN PCM_KEY_NODE KeyNode, IN PCUNICODE_STRING Name)
LONG NTAPI CmpCompareCompressedName(IN PCUNICODE_STRING SearchName, IN PWCHAR CompressedName, IN ULONG NameLength)
NTSYSAPI void WINAPI RtlSetBits(PRTL_BITMAP, ULONG, ULONG)
VOID NTAPI CmpRemoveSecurityCellList(IN PHHIVE Hive, IN HCELL_INDEX SecurityCell)
HCELL_INDEX NTAPI CmpFindSubKeyByName(IN PHHIVE Hive, IN PCM_KEY_NODE Parent, IN PCUNICODE_STRING SearchName)
PKTHREAD HiveSecurityLockOwner
LIST_ENTRY PinViewListHead
NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP)
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
static BOOLEAN CmpIsKeyValueBig(IN PHHIVE Hive, IN ULONG Length)
CM_USE_COUNT_LOG LockHiveLog
BOOLEAN NTAPI CmpMarkIndexDirty(IN PHHIVE Hive, HCELL_INDEX ParentKey, HCELL_INDEX TargetKey)
_In_ const STRING * String2
PVOID(CMAPI * PALLOCATE_ROUTINE)(SIZE_T Size, BOOLEAN Paged, ULONG Tag)
#define HSYS_WHISTLER_BETA1
PCM_KEY_SECURITY_CACHE_ENTRY SecurityCache
BOOLEAN NTAPI CmpRemoveSubKey(IN PHHIVE Hive, IN HCELL_INDEX ParentKey, IN HCELL_INDEX TargetKey)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
VOID CMAPI CmPrepareHive(PHHIVE RegistryHive)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
struct _CM_USE_COUNT_LOG CM_USE_COUNT_LOG
BOOLEAN NTAPI CmpFindNameInList(IN PHHIVE Hive, IN PCHILD_LIST ChildList, IN PCUNICODE_STRING Name, OUT PULONG ChildIndex OPTIONAL, OUT PHCELL_INDEX CellIndex)
BOOLEAN NTAPI CmpFreeValueData(IN PHHIVE Hive, IN HCELL_INDEX DataCell, IN ULONG DataLength)
struct _CM_USE_COUNT_LOG_ENTRY * PCM_USE_COUNT_LOG_ENTRY
LIST_ENTRY SecurityHash[CMP_SECURITY_HASH_LISTS]
USHORT NTAPI CmpCompressedNameSize(IN PWCHAR Name, IN ULONG Length)
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
LIST_ENTRY KcbConvertListHead
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
PHV_HIVE_CELL_PAIR CellArray
BOOLEAN CMAPI HvHiveWillShrink(IN PHHIVE RegistryHive)
BOOLEAN NTAPI CmpMarkValueDataDirty(IN PHHIVE Hive, IN PCM_KEY_VALUE Value)
PULONG MinorVersion OPTIONAL