96 DPRINT1(
"CmpFileSetSize() unimplemented\n");
122 DPRINT(
"Hive 0x%p\n", Hive);
179 Node->Security = SecurityCell;
189 Security->
Flink = Security->
Blink = SecurityCell;
234 if (NewKeyCell ==
NULL)
243 NewKeyCell->
Parent = ParentKeyCellOffset;
292 *pNKBOffset = NKBOffset;
316 if (!
CmpAddSubKey(&RegistryHive->Hive, ParentKeyCellOffset, NKBOffset))
343 *pBlockOffset = NKBOffset;
374 if (NewValueCell ==
NULL)
376 HvFreeCell(&RegistryHive->Hive, NewValueCellOffset);
394 NewValueCell->
Flags = 0;
397 NewValueCell->
Type = 0;
404 if (
Parent->ValueList.Count)
427 *pValueCell = NewValueCell;
428 *pValueCellOffset = NewValueCellOffset;
#define KeQuerySystemTime(t)
#define CM_KEY_VALUE_SIGNATURE
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
WCHAR Name[ANYSIZE_ARRAY]
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
BOOLEAN NTAPI CmpAddSubKey(IN PHHIVE Hive, IN HCELL_INDEX Parent, IN HCELL_INDEX Child)
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ PNDIS_STRING SubKeyName
static BOOLEAN NTAPI CmpFileRead(IN PHHIVE RegistryHive, IN ULONG FileType, IN PULONG FileOffset, OUT PVOID Buffer, IN SIZE_T BufferLength)
#define CM_KEY_SECURITY_SIGNATURE
#define CM_KEY_NODE_SIGNATURE
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)
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
LIST_ENTRY CmiHiveListHead
#define HvReleaseCell(h, c)
#define VERIFY_KEY_CELL(key)
static NTSTATUS CmiCreateSubKey(IN PCMHIVE RegistryHive, IN HCELL_INDEX ParentKeyCellOffset, IN PCUNICODE_STRING SubKeyName, IN BOOLEAN VolatileKey, OUT HCELL_INDEX *pNKBOffset)
SECURITY_DESCRIPTOR_RELATIVE Descriptor
IN PVOID IN PVOID IN USHORT IN USHORT Size
HCELL_INDEX CMAPI HvAllocateCell(PHHIVE RegistryHive, ULONG Size, HSTORAGE_TYPE Storage, IN HCELL_INDEX Vicinity)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical 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 InsertTailList(ListHead, Entry)
_Check_return_opt_ _CRTIMP size_t __cdecl fwrite(_In_reads_bytes_(_Size *_Count) const void *_Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE *_File)
NTSTATUS NTAPI CmpAddValueToList(IN PHHIVE Hive, IN HCELL_INDEX ValueCell, IN ULONG Index, IN HSTORAGE_TYPE StorageType, IN OUT PCHILD_LIST ChildList)
#define RtlMoveMemory(Destination, Source, Length)
struct _CM_KEY_SECURITY * PCM_KEY_SECURITY
BOOLEAN NTAPI CmpFreeValue(IN PHHIVE Hive, IN HCELL_INDEX Cell)
NTSTATUS CmiAddValueKey(IN PCMHIVE RegistryHive, IN PCM_KEY_NODE Parent, IN ULONG ChildIndex, IN PCUNICODE_STRING ValueName, OUT PCM_KEY_VALUE *pValueCell, OUT HCELL_INDEX *pValueCellOffset)
_Check_return_opt_ _CRTIMP size_t __cdecl fread(_Out_writes_bytes_(_ElementSize *_Count) void *_DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE *_File)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_In_ WDFDEVICE _In_ WDF_SPECIAL_FILE_TYPE FileType
NTSTATUS CmiCreateSecurityKey(IN PHHIVE Hive, IN HCELL_INDEX Cell, IN PUCHAR Descriptor, IN ULONG DescriptorLength)
#define OBJ_NAME_PATH_SEPARATOR
PVOID CMAPI HvGetCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset)
static BOOLEAN NTAPI CmpFileFlush(IN PHHIVE RegistryHive, IN ULONG FileType, PLARGE_INTEGER FileOffset, ULONG Length)
WCHAR Name[ANYSIZE_ARRAY]
HANDLE FileHandles[HFILE_TYPE_MAX]
HCELL_INDEX SubKeyLists[HTYPE_COUNT]
struct _CM_KEY_NODE * PCM_KEY_NODE
_Check_return_opt_ _CRTIMP int __cdecl fseek(_Inout_ FILE *_File, _In_ long _Offset, _In_ int _Origin)
VOID CMAPI HvFree(PHHIVE RegistryHive)
BOOLEAN CMAPI CmCreateRootNode(PHHIVE Hive, PCWSTR Name)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
USHORT NTAPI CmpCopyName(IN PHHIVE Hive, OUT PWCHAR Destination, IN PUNICODE_STRING Source)
#define NT_SUCCESS(StatCode)
ULONG SubKeyCounts[HTYPE_COUNT]
VOID NTAPI CmpFree(IN PVOID Ptr, IN ULONG Quota)
BOOLEAN CMAPI HvMarkCellDirty(PHHIVE RegistryHive, HCELL_INDEX CellOffset, BOOLEAN HoldingLock)
#define STATUS_UNSUCCESSFUL
VOID CMAPI HvFreeCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
USHORT NTAPI CmpNameSize(IN PHHIVE Hive, IN PUNICODE_STRING Name)
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
LARGE_INTEGER LastWriteTime
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
static BOOLEAN NTAPI CmpFileSetSize(IN PHHIVE RegistryHive, IN ULONG FileType, IN ULONG FileSize, IN ULONG OldFileSize)
static BOOLEAN NTAPI CmpFileWrite(IN PHHIVE RegistryHive, IN ULONG FileType, IN PULONG FileOffset, IN PVOID Buffer, IN SIZE_T BufferLength)
#define HFILE_TYPE_PRIMARY
_Check_return_opt_ _CRTIMP int __cdecl fflush(_Inout_opt_ FILE *_File)
struct _CM_KEY_VALUE * PCM_KEY_VALUE
_In_ PFCB _In_ LONGLONG FileOffset
#define FIELD_OFFSET(t, f)
NTSTATUS CmiInitializeHive(IN OUT PCMHIVE Hive, IN PCWSTR Name)
#define RtlZeroMemory(Destination, Length)
NTSTATUS CmiAddSubKey(IN PCMHIVE RegistryHive, IN HCELL_INDEX ParentKeyCellOffset, IN PCUNICODE_STRING SubKeyName, IN BOOLEAN VolatileKey, OUT HCELL_INDEX *pBlockOffset)
PVOID NTAPI CmpAllocate(IN SIZE_T Size, IN BOOLEAN Paged, IN ULONG Tag)