typedef struct _CMHIVE                                                          // 76 / 83 elements; 0x0C00 / 0x12F8 Bytes
{
    HHIVE                       Hive;                                           // 0x0000 / 0x0000; 0x0400 / 0x0600 Bytes
    PVOID                       FileHandles[6];                                 // 0x0400 / 0x0600; 0x0018 / 0x0030 Bytes
    LIST_ENTRY                  NotifyList;                                     // 0x0418 / 0x0630; 0x0008 / 0x0010 Bytes
    LIST_ENTRY                  HiveList;                                       // 0x0420 / 0x0640; 0x0008 / 0x0010 Bytes
    LIST_ENTRY                  PreloadedHiveList;                              // 0x0428 / 0x0650; 0x0008 / 0x0010 Bytes
    EX_RUNDOWN_REF              HiveRundown;                                    // 0x0430 / 0x0660; 0x0004 / 0x0008 Bytes
    PCM_KEY_HASH_TABLE_ENTRY    KcbCacheTable;                                  // 0x0434 / 0x0668; 0x0004 / 0x0008 Bytes
    ULONG32                     KcbCacheTableSize;                              // 0x0438 / 0x0670; 0x0004 / 0x0004 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING0_[4];                                  // ------ / 0x0674; ------ / 0x0004 Bytes
#endif                                                                          // #if defined(_M_X64)
    PCM_KEY_HASH_TABLE_ENTRY    DeletedKcbTable;                                // 0x043C / 0x0678; 0x0004 / 0x0008 Bytes
    ULONG32                     DeletedKcbTableSize;                            // 0x0440 / 0x0680; 0x0004 / 0x0004 Bytes
    ULONG32                     Identity;                                       // 0x0444 / 0x0684; 0x0004 / 0x0004 Bytes
    CMSI_RW_LOCK                HiveLock;                                       // 0x0448 / 0x0688; 0x0004 / 0x0008 Bytes
    RTL_BITMAP                  FlushDirtyVector;                               // 0x044C / 0x0690; 0x0008 / 0x0010 Bytes
    ULONG32                     FlushDirtyVectorSize;                           // 0x0454 / 0x06A0; 0x0004 / 0x0004 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING1_[4];                                  // ------ / 0x06A4; ------ / 0x0004 Bytes
#endif                                                                          // #if defined(_M_X64)
    PUINT8                      FlushLogEntry;                                  // 0x0458 / 0x06A8; 0x0004 / 0x0008 Bytes
    ULONG32                     FlushLogEntrySize;                              // 0x045C / 0x06B0; 0x0004 / 0x0004 Bytes
    ULONG32                     FlushHiveTruncated;                             // 0x0460 / 0x06B4; 0x0004 / 0x0004 Bytes
    UINT8                       FlushBaseBlockDirty;                            // 0x0464 / 0x06B8; 0x0001 / 0x0001 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING2_[7];                                  // ------ / 0x06B9; ------ / 0x0007 Bytes
#else                                                                           // #if defined(_M_X64)
    UINT8                       _PADDING0_[3];                                  // 0x0465 / ------; 0x0003 / ------ Bytes
#endif                                                                          // #if defined(_M_X64)
    RTL_BITMAP                  CapturedUnreconciledVector;                     // 0x0468 / 0x06C0; 0x0008 / 0x0010 Bytes
    ULONG32                     CapturedUnreconciledVectorSize;                 // 0x0470 / 0x06D0; 0x0004 / 0x0004 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING3_[4];                                  // ------ / 0x06D4; ------ / 0x0004 Bytes
#endif                                                                          // #if defined(_M_X64)
    struct CMP_OFFSET_ARRAY *   UnreconciledOffsetArray;                        // 0x0474 / 0x06D8; 0x0004 / 0x0008 Bytes
    ULONG32                     UnreconciledOffsetArrayCount;                   // 0x0478 / 0x06E0; 0x0004 / 0x0004 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING4_[4];                                  // ------ / 0x06E4; ------ / 0x0004 Bytes
#endif                                                                          // #if defined(_M_X64)
    PHBASE_BLOCK                UnreconciledBaseBlock;                          // 0x047C / 0x06E8; 0x0004 / 0x0008 Bytes
    EX_PUSH_LOCK                SecurityLock;                                   // 0x0480 / 0x06F0; 0x0004 / 0x0008 Bytes
    ULONG32                     LastShrinkHiveSize;                             // 0x0484 / 0x06F8; 0x0004 / 0x0004 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING5_[4];                                  // ------ / 0x06FC; ------ / 0x0004 Bytes
#endif                                                                          // #if defined(_M_X64)
    LARGE_INTEGER               ActualFileSize;                                 // 0x0488 / 0x0700; 0x0008 / 0x0008 Bytes
    LARGE_INTEGER               LogFileSizes[2];                                // 0x0490 / 0x0708; 0x0010 / 0x0010 Bytes
    UNICODE_STRING              FileFullPath;                                   // 0x04A0 / 0x0718; 0x0008 / 0x0010 Bytes
    UNICODE_STRING              FileUserName;                                   // 0x04A8 / 0x0728; 0x0008 / 0x0010 Bytes
    UNICODE_STRING              HiveRootPath;                                   // 0x04B0 / 0x0738; 0x0008 / 0x0010 Bytes
    ULONG32                     SecurityCount;                                  // 0x04B8 / 0x0748; 0x0004 / 0x0004 Bytes
    ULONG32                     SecurityCacheSize;                              // 0x04BC / 0x074C; 0x0004 / 0x0004 Bytes
    LONG32                      SecurityHitHint;                                // 0x04C0 / 0x0750; 0x0004 / 0x0004 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING6_[4];                                  // ------ / 0x0754; ------ / 0x0004 Bytes
#endif                                                                          // #if defined(_M_X64)
    PCM_KEY_SECURITY_CACHE_ENTRY 
                                SecurityCache;                                  // 0x04C4 / 0x0758; 0x0004 / 0x0008 Bytes
    LIST_ENTRY                  SecurityHash[64];                               // 0x04C8 / 0x0760; 0x0200 / 0x0400 Bytes
    ULONG32                     UnloadEventCount;                               // 0x06C8 / 0x0B60; 0x0004 / 0x0004 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING7_[4];                                  // ------ / 0x0B64; ------ / 0x0004 Bytes
#endif                                                                          // #if defined(_M_X64)
    PKEVENT *                   UnloadEventArray;                               // 0x06CC / 0x0B68; 0x0004 / 0x0008 Bytes
    PCM_KEY_CONTROL_BLOCK       RootKcb;                                        // 0x06D0 / 0x0B70; 0x0004 / 0x0008 Bytes
    UINT8                       Frozen;                                         // 0x06D4 / 0x0B78; 0x0001 / 0x0001 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING8_[7];                                  // ------ / 0x0B79; ------ / 0x0007 Bytes
#else                                                                           // #if defined(_M_X64)
    UINT8                       _PADDING1_[3];                                  // 0x06D5 / ------; 0x0003 / ------ Bytes
#endif                                                                          // #if defined(_M_X64)
    PCM_WORKITEM                UnloadWorkItem;                                 // 0x06D8 / 0x0B80; 0x0004 / 0x0008 Bytes
    CM_WORKITEM                 UnloadWorkItemHolder;                           // 0x06DC / 0x0B88; 0x0014 / 0x0028 Bytes
    CM_DIRTY_VECTOR_LOG         DirtyVectorLog;                                 // 0x06F0 / 0x0BB0; 0x0288 / 0x0488 Bytes
    ULONG32                     Flags;                                          // 0x0978 / 0x1038; 0x0004 / 0x0004 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING9_[4];                                  // ------ / 0x103C; ------ / 0x0004 Bytes
#endif                                                                          // #if defined(_M_X64)
    LIST_ENTRY                  TrustClassEntry;                                // 0x097C / 0x1040; 0x0008 / 0x0010 Bytes
#if !defined(_M_X64)
    UINT8                       _PADDING2_[4];                                  // 0x0984 / ------; 0x0004 / ------ Bytes
#endif                                                                          // #if !defined(_M_X64)
    UINT64                      DirtyTime;                                      // 0x0988 / 0x1050; 0x0008 / 0x0008 Bytes
    UINT64                      UnreconciledTime;                               // 0x0990 / 0x1058; 0x0008 / 0x0008 Bytes
    PCM_RM                      CmRm;                                           // 0x0998 / 0x1060; 0x0004 / 0x0008 Bytes
    ULONG32                     CmRmInitFailPoint;                              // 0x099C / 0x1068; 0x0004 / 0x0004 Bytes
    LONG32                      CmRmInitFailStatus;                             // 0x09A0 / 0x106C; 0x0004 / 0x0004 Bytes
    PKTHREAD                    CreatorOwner;                                   // 0x09A4 / 0x1070; 0x0004 / 0x0008 Bytes
    PKTHREAD                    RundownThread;                                  // 0x09A8 / 0x1078; 0x0004 / 0x0008 Bytes
#if !defined(_M_X64)
    UINT8                       _PADDING3_[4];                                  // 0x09AC / ------; 0x0004 / ------ Bytes
#endif                                                                          // #if !defined(_M_X64)
    LARGE_INTEGER               LastWriteTime;                                  // 0x09B0 / 0x1080; 0x0008 / 0x0008 Bytes
    HIVE_WRITE_WAIT_QUEUE       FlushQueue;                                     // 0x09B8 / 0x1088; 0x000C / 0x0018 Bytes
    HIVE_WRITE_WAIT_QUEUE       ReconcileQueue;                                 // 0x09C4 / 0x10A0; 0x000C / 0x0018 Bytes
    union                                                                       // 2 / 2 elements; 0x0004 / 0x0004 Bytes
    {
        ULONG32                 FlushFlags;                                     // 0x09D0 / 0x10B8; 0x0004 / 0x0004 Bytes
        struct                                                                  // 4 / 4 elements; 0x0004 / 0x0004 Bytes
        {
            ULONG32             FlushActive                                : 1; // 0x09D0 / 0x10B8; Bit:   0
            ULONG32             ReconcileActive                            : 1; // 0x09D0 / 0x10B8; Bit:   1
            ULONG32             PrimaryFilePurged                          : 1; // 0x09D0 / 0x10B8; Bit:   2
            ULONG32             DiskFileBad                                : 1; // 0x09D0 / 0x10B8; Bit:   3
        };
    };
    ULONG32                     PrimaryFileSizeBeforeLastFlush;                 // 0x09D4 / 0x10BC; 0x0004 / 0x0004 Bytes
    LONG32                      ReferenceCount;                                 // 0x09D8 / 0x10C0; 0x0004 / 0x0004 Bytes
    LONG32                      UnloadHistoryIndex;                             // 0x09DC / 0x10C4; 0x0004 / 0x0004 Bytes
    ULONG32                     UnloadHistory[128];                             // 0x09E0 / 0x10C8; 0x0200 / 0x0200 Bytes
    ULONG32                     BootStart;                                      // 0x0BE0 / 0x12C8; 0x0004 / 0x0004 Bytes
    ULONG32                     UnaccessedStart;                                // 0x0BE4 / 0x12CC; 0x0004 / 0x0004 Bytes
    ULONG32                     UnaccessedEnd;                                  // 0x0BE8 / 0x12D0; 0x0004 / 0x0004 Bytes
    ULONG32                     LoadedKeyCount;                                 // 0x0BEC / 0x12D4; 0x0004 / 0x0004 Bytes
    ULONG32                     HandleClosePending;                             // 0x0BF0 / 0x12D8; 0x0004 / 0x0004 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING10_[4];                                 // ------ / 0x12DC; ------ / 0x0004 Bytes
#endif                                                                          // #if defined(_M_X64)
    EX_PUSH_LOCK                HandleClosePendingEvent;                        // 0x0BF4 / 0x12E0; 0x0004 / 0x0008 Bytes
    UINT8                       FinalFlushSucceeded;                            // 0x0BF8 / 0x12E8; 0x0001 / 0x0001 Bytes
#if defined(_M_X64)
    UINT8                       _PADDING11_[7];                                 // ------ / 0x12E9; ------ / 0x0007 Bytes
#else                                                                           // #if defined(_M_X64)
    UINT8                       _PADDING4_[3];                                  // 0x0BF9 / ------; 0x0003 / ------ Bytes
#endif                                                                          // #if defined(_M_X64)
    PCMP_VOLUME_CONTEXT         VolumeContext;                                  // 0x0BFC / 0x12F0; 0x0004 / 0x0008 Bytes
} CMHIVE, * PCMHIVE;

Return to OS-specific structures/unions/enums list.
Return to OS version list.