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)
563 Hive->
HiveFlags = HiveFlags & ~HIVE_NOLAZYFLUSH;
570 switch (OperationType)
ULONG CMAPI HvpHiveHeaderChecksum(PHBASE_BLOCK HiveHeader)
PCELL_DATA CMAPI HvpGetCellData(_In_ PHHIVE Hive, _In_ HCELL_INDEX CellIndex)
NTSTATUS CMAPI HvpCreateHiveFreeCellList(PHHIVE Hive)
#define NT_SUCCESS(StatCode)
#define ROUND_UP(n, align)
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
union Alignment_ Alignment
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
static ULONG BitmapBuffer[(XMS_BLOCKS+31)/32]
BOOLEAN(CMAPI * PFILE_READ_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PULONG FileOffset, PVOID Buffer, SIZE_T BufferLength)
#define HV_HBIN_SIGNATURE
#define HV_HHIVE_SIGNATURE
#define HV_HBLOCK_SIGNATURE
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)
#define HFILE_TYPE_PRIMARY
struct _HBASE_BLOCK HBASE_BLOCK
#define HIVE_FILENAME_MAXLEN
BOOLEAN(CMAPI * PFILE_FLUSH_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PLARGE_INTEGER FileOffset, ULONG Length)
PVOID(CMAPI * PALLOCATE_ROUTINE)(SIZE_T Size, BOOLEAN Paged, ULONG Tag)
#define HINIT_MEMORY_INPLACE
#define HBASE_FORMAT_MEMORY
BOOLEAN(CMAPI * PFILE_SET_SIZE_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, ULONG FileSize, ULONG OldfileSize)
RESULT CMAPI HvpGetHiveHeader(IN PHHIVE Hive, IN PHBASE_BLOCK *HiveBaseBlock, IN PLARGE_INTEGER TimeStamp)
NTSTATUS CMAPI HvpInitializeFlatHive(PHHIVE Hive, PHBASE_BLOCK ChunkBase)
static VOID HvpInitFileName(IN OUT PHBASE_BLOCK BaseBlock, IN PCUNICODE_STRING FileName OPTIONAL)
BOOLEAN CMAPI HvpVerifyHiveHeader(IN PHBASE_BLOCK BaseBlock)
NTSTATUS CMAPI HvLoadHive(IN PHHIVE Hive, IN PCUNICODE_STRING FileName OPTIONAL)
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)
VOID CMAPI HvpFreeHiveBins(PHHIVE Hive)
NTSTATUS CMAPI HvpCreateHive(IN OUT PHHIVE RegistryHive, IN PCUNICODE_STRING FileName OPTIONAL)
NTSTATUS CMAPI HvpInitializeMemoryHive(PHHIVE Hive, PHBASE_BLOCK ChunkBase, IN PCUNICODE_STRING FileName OPTIONAL)
static __inline PHBASE_BLOCK HvpAllocBaseBlockAligned(IN PHHIVE Hive, IN BOOLEAN Paged, IN ULONG Tag)
VOID CMAPI HvFree(PHHIVE RegistryHive)
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP)
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define STATUS_REGISTRY_RECOVERED
#define STATUS_NOT_REGISTRY_FILE
#define STATUS_NOT_IMPLEMENTED
#define STATUS_REGISTRY_CORRUPT
SECURITY_INTEGER TimeStamp
VOID CMAPI CmPrepareHive(PHHIVE RegistryHive)
PULONG MinorVersion OPTIONAL
PFILE_FLUSH_ROUTINE FileFlush
PFILE_SET_SIZE_ROUTINE FileSetSize
PFILE_WRITE_ROUTINE FileWrite
PALLOCATE_ROUTINE Allocate
PFILE_READ_ROUTINE FileRead
PGET_CELL_ROUTINE GetCellRoutine
DUAL Storage[HTYPE_COUNT]
PRELEASE_CELL_ROUTINE ReleaseCellRoutine
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_In_ WDFDEVICE _In_ WDF_SPECIAL_FILE_TYPE FileType
_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
_In_opt_ PALLOCATE_FUNCTION Allocate
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
_Inout_ PUCHAR _In_ PUCHAR _Out_ PUCHAR _Out_ PULONG ChunkSize