CmpRebuildKcbCacheFromNode

char __fastcall CmpRebuildKcbCacheFromNode(PVOID BugCheckParameter3, __int64 a2, __int64 a3, char a4){
  int v8; 
  int v9; 
  int v10; 
  __int16 v11; 
  UINT64 v12; 

  *((_BYTE *)BugCheckParameter3 + 65) = *(_BYTE *)(a2 + 13) & 3;
  CmpCleanUpSubKeyInfo((INT64)BugCheckParameter3, 1);
  v8 = *((_DWORD *)BugCheckParameter3 + 46);
  if( (v8 & 0x400000) == 0 )
  {
    if( a4 )
    {
      CmpCleanUpKcbCachedSymlink((INT64)BugCheckParameter3, a3);
      v8 = *((_DWORD *)BugCheckParameter3 + 46);
    }
    v9 = *(_DWORD *)(a2 + 40);
    *((_DWORD *)BugCheckParameter3 + 24) = *(_DWORD *)(a2 + 36);
    *((_DWORD *)BugCheckParameter3 + 25) = v9;
  }
  *((_QWORD *)BugCheckParameter3 + 21) = *(_QWORD *)(a2 + 4);
  *((_WORD *)BugCheckParameter3 + 88) = *(_WORD *)(a2 + 52);
  *((_WORD *)BugCheckParameter3 + 89) = *(_WORD *)(a2 + 60);
  *((_DWORD *)BugCheckParameter3 + 45) = *(_DWORD *)(a2 + 64);
  v10 = v8 ^ ((unsigned __int8)v8 ^ (unsigned __int8)*(_WORD *)(a2 + 54)) & 0xF;
  *((_DWORD *)BugCheckParameter3 + 46) = v10;
  *((_DWORD *)BugCheckParameter3 + 46) = v10 ^ ((unsigned __int8)v10 ^ (unsigned __int8)*(_WORD *)(a2 + 54)) & 0xF0;
  *((_BYTE *)BugCheckParameter3 + 185) = *(_BYTE *)(a2 + 55);
  v11 = *(_WORD *)(a2 + 2);
  *((_WORD *)BugCheckParameter3 + 93) = v11;
  v12 = *(unsigned int *)(a2 + 44);
  if( (_DWORD)v12 == -1 )
    *((_QWORD *)BugCheckParameter3 + 11) = 0i64;
  else
    LOBYTE(v11) = CmpAssignSecurityToKcb((UINT64)BugCheckParameter3, v12, 0i64, 0, 0);
  return v11;
}

Referenced by:

CmDeleteLayeredKey
CmRenameKey
CmpCreateChild
CmpCreateTombstone
CmpDoParseKey
CmpFullPromoteHiveRootFromKcbStack
CmpPromoteSingleKeyFromKcbStacks
CmpPromoteSingleKeyFromParentKcbAndChildKeyNode
CmpRebuildKcbCache