CmpStartKcbStackForTopLayerKcb

INT64 __fastcall CmpStartKcbStackForTopLayerKcb(INT64 a1, INT64 a2){
  int v2; 
  VOID *v3; 
  __int16 v6; 
  __int64 i; 
  __int64 v9; 
  __int16 v10; 
  VOID *TransientPoolWithTag; 

  v2 = *(__int16 *)(a2 + 66);
  v3 = 0i64;
  if( v2 >= 2 )
  {
    TransientPoolWithTag = CmpAllocateTransientPoolWithTag(1ui64, 8i64 * (unsigned int)(v2 - 1));
    v3 = TransientPoolWithTag;
    if( !TransientPoolWithTag )
      return 3221225626i64;
    memset(TransientPoolWithTag, 0i64, 8 * (v2 - 1));
  }
  *(_WORD *)a1 = v2;
  *(_WORD *)(a1 + 2) = -1;
  *(_QWORD *)(a1 + 24) = v3;
  *(_WORD *)(a1 + 2) = *(_WORD *)(a2 + 66);
  v6 = *(_WORD *)(a2 + 66);
  if( v6 )
  {
    for( i = *(_QWORD *)(a2 + 192); i; v6 = v10 - 1 )
    {
      CmpSetKcbAtLayerHeight(a1, v6, *(_QWORD *)(i + 16));
      i = *(_QWORD *)(v9 + 24);
    }
  }
  else
  {
    *(_QWORD *)(a1 + 8) = a2;
  }
  return 0i64;
}

Referenced by:

CmCallbackGetKeyObjectID
CmCallbackGetKeyObjectIDEx
CmDeleteLayeredKey
CmDeleteValueKey
CmEnumerateValueFromLayeredKey
CmQueryLayeredKey
CmQueryMultipleValueForLayeredKey
CmRenameKey
CmSaveKey
CmSetKeyFlags
CmSetLastWriteTimeKey
CmSetValueKey
CmpAssignKeySecurity
CmpCheckKeyBodyAccess
CmpCheckOpenAccessOnKeyBody
CmpDoBuildVirtualStack
CmpDoParseKey
CmpDoWritethroughReparse
CmpEnumerateLayeredKey
CmpGetSymbolicLinkTarget
CmpPerformUnloadKey
CmpQueryKeySecurity
CmpReportNotify
CmpSetKeySecurity
CmpStartSiloRegistryNamespace