26 BaseBlock->Cluster != 1 ||
27 BaseBlock->Sequence1 != BaseBlock->Sequence2 ||
30 DPRINT1(
"Verify Hive Header failed:\n");
31 DPRINT1(
" Signature: 0x%x, expected 0x%x; Major: 0x%x, expected 0x%x\n",
33 DPRINT1(
" Minor: 0x%x expected to be >= 0x%x; Type: 0x%x, expected 0x%x\n",
35 DPRINT1(
" Format: 0x%x, expected 0x%x; Cluster: 0x%x, expected 1\n",
37 DPRINT1(
" Sequence: 0x%x, expected 0x%x; Checksum: 0x%x, expected 0x%x\n",
38 BaseBlock->Sequence1, BaseBlock->Sequence2,
98 BaseBlock = Hive->Allocate(Hive->BaseBlockAlloc, Paged,
Tag);
99 if (!BaseBlock)
return NULL;
106 Hive->Free(BaseBlock, Hive->BaseBlockAlloc);
108 if (!BaseBlock)
return NULL;
169 if (BaseBlock ==
NULL)
197 RegistryHive->BaseBlock = BaseBlock;
198 RegistryHive->Version = BaseBlock->
Minor;
239 DPRINT1(
"Registry is corrupt: ChunkSize 0x%zx < sizeof(HBASE_BLOCK) 0x%zx, " 265 DPRINT1(
"Allocating block list failed\n");
276 DPRINT1(
"Invalid bin at BlockIndex %lu, Signature 0x%x, Size 0x%x\n",
277 (
unsigned long)BlockIndex, (
unsigned)
Bin->Signature, (
unsigned)
Bin->Size);
317 sizeof(
ULONG) * 8) / 8;
388 *HiveBaseBlock =
NULL;
396 Result = Hive->FileRead(Hive,
409 *HiveBaseBlock = BaseBlock;
454 Hive->BaseBlock = BaseBlock;
455 Hive->Version = BaseBlock->
Minor;
462 Hive->Free(BaseBlock, Hive->BaseBlockAlloc);
467 Result = Hive->FileRead(Hive,
475 Hive->Free(BaseBlock, Hive->BaseBlockAlloc);
481 Hive->Free(BaseBlock, Hive->BaseBlockAlloc);
538 PHHIVE Hive = RegistryHive;
560 #if (NTDDI_VERSION < NTDDI_VISTA) 565 switch (OperationType)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define ROUND_UP(n, align)
BOOLEAN(CMAPI * PFILE_SET_SIZE_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, ULONG FileSize, ULONG OldfileSize)
ULONG CMAPI HvpHiveHeaderChecksum(PHBASE_BLOCK HiveHeader)
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
#define STATUS_REGISTRY_RECOVERED
NTSTATUS CMAPI HvpInitializeMemoryHive(PHHIVE Hive, PHBASE_BLOCK ChunkBase, IN PCUNICODE_STRING FileName OPTIONAL)
#define HV_HHIVE_SIGNATURE
#define HINIT_MEMORY_INPLACE
PALLOCATE_ROUTINE Allocate
NTSTATUS CMAPI HvpCreateHiveFreeCellList(PHHIVE Hive)
_In_opt_ PALLOCATE_FUNCTION Allocate
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
return STATUS_NOT_IMPLEMENTED
VOID CMAPI HvFree(PHHIVE RegistryHive)
_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)
_Inout_ PUCHAR _In_ PUCHAR _Out_ PUCHAR _Out_ PULONG ChunkSize
BOOLEAN(CMAPI * PFILE_FLUSH_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PLARGE_INTEGER FileOffset, ULONG Length)
static __inline PHBASE_BLOCK HvpAllocBaseBlockAligned(IN PHHIVE Hive, IN BOOLEAN Paged, IN ULONG Tag)
union Alignment_ Alignment
_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
DUAL Storage[HTYPE_COUNT]
#define STATUS_REGISTRY_CORRUPT
NTSTATUS CMAPI HvpCreateHive(IN OUT PHHIVE RegistryHive, IN PCUNICODE_STRING FileName OPTIONAL)
PFILE_SET_SIZE_ROUTINE FileSetSize
BOOLEAN CMAPI HvpVerifyHiveHeader(IN PHBASE_BLOCK BaseBlock)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
BOOLEAN(CMAPI * PFILE_WRITE_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PULONG FileOffset, PVOID Buffer, SIZE_T BufferLength)
#define HV_HBIN_SIGNATURE
VOID(CMAPI * PFREE_ROUTINE)(PVOID Ptr, ULONG Quota)
static ULONG BitmapBuffer[(XMS_BLOCKS+31)/32]
NTSTATUS CMAPI HvpInitializeFlatHive(PHHIVE Hive, PHBASE_BLOCK ChunkBase)
#define HIVE_FILENAME_MAXLEN
PFILE_WRITE_ROUTINE FileWrite
static VOID HvpInitFileName(IN OUT PHBASE_BLOCK BaseBlock, IN PCUNICODE_STRING FileName OPTIONAL)
VOID CMAPI CmPrepareHive(PHHIVE RegistryHive)
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
SECURITY_INTEGER TimeStamp
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)
_In_ ULONG _In_ ULONG Offset
#define HBASE_FORMAT_MEMORY
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
#define HFILE_TYPE_PRIMARY
PFILE_FLUSH_ROUTINE FileFlush
VOID CMAPI HvpFreeHiveBins(PHHIVE Hive)
NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP)
PVOID(CMAPI * PALLOCATE_ROUTINE)(SIZE_T Size, BOOLEAN Paged, ULONG Tag)
NTSTATUS CMAPI HvLoadHive(IN PHHIVE Hive, IN PCUNICODE_STRING FileName OPTIONAL)
#define HV_HBLOCK_SIGNATURE
#define RtlZeroMemory(Destination, Length)
struct _HBASE_BLOCK HBASE_BLOCK
#define RtlCopyMemory(Destination, Source, Length)
RESULT CMAPI HvpGetHiveHeader(IN PHHIVE Hive, IN PHBASE_BLOCK *HiveBaseBlock, IN PLARGE_INTEGER TimeStamp)
#define STATUS_NOT_REGISTRY_FILE
PFILE_READ_ROUTINE FileRead
PULONG MinorVersion OPTIONAL