typedef struct _CM_KEY_CONTROL_BLOCK
{
    unsigned long RefCount;
    unsigned long ExtFlags : 16;
    unsigned long PrivateAlloc : 1;
    unsigned long Delete : 1;
    unsigned long HiveUnloaded : 1;
    unsigned long Decommissioned : 1;
    unsigned long LockTablePresent : 1;
    unsigned long TotalLevels : 10;
    unsigned long DelayedDeref : 1;
    unsigned long DelayedClose : 1;
    unsigned long Parking : 1;
    union
    {
        CM_KEY_HASH KeyHash;
        struct
        {
            unsigned long ConvKey;
            CM_KEY_HASH *NextHash;
            HHIVE *KeyHive;
            unsigned long KeyCell;
        };
    };
    EX_PUSH_LOCK KcbPushlock;
    union
    {
        KTHREAD *Owner;
        long SharedCount;
    };
    unsigned long SlotHint;
    CM_KEY_CONTROL_BLOCK *ParentKcb;
    CM_NAME_CONTROL_BLOCK *NameBlock;
    CM_KEY_SECURITY_CACHE *CachedSecurity;
    CACHED_CHILD_LIST ValueCache;
    union
    {
        CM_INDEX_HINT_BLOCK *IndexHint;
        unsigned long HashKey;
        unsigned long SubKeyCount;
    };
    union
    {
        LIST_ENTRY KeyBodyListHead;
        LIST_ENTRY FreeListEntry;
    };
    CM_KEY_BODY *KeyBodyArray[4];
    LARGE_INTEGER KcbLastWriteTime;
    unsigned short KcbMaxNameLen;
    unsigned short KcbMaxValueNameLen;
    unsigned long KcbMaxValueDataLen;
    unsigned long KcbUserFlags : 4;
    unsigned long KcbVirtControlFlags : 4;
    unsigned long KcbDebug : 8;
    unsigned long Flags : 16;
    char *RealKeyName;
    LIST_ENTRY KCBUoWListHead;
    union
    {
        LIST_ENTRY DelayQueueEntry;
        volatile unsigned char *Stolen;
    };
    CM_TRANS *TransKCBOwner;
    CM_INTENT_LOCK KCBLock;
    CM_INTENT_LOCK KeyLock;
    CHILD_LIST TransValueCache;
    CM_TRANS *TransValueListOwner;
    UNICODE_STRING *FullKCBName;
} CM_KEY_CONTROL_BLOCK, *PCM_KEY_CONTROL_BLOCK;