CmpTransSearchAddTransFromKeyBody

NTSTATUS __stdcall CmpTransSearchAddTransFromKeyBody(_CM_KEY_BODY *KeyBody, _CM_TRANS **CmTrans){
  _CM_TRANS_PTR v3; 
  __int64 KeyControlBlock; 
  EX_RUNDOWN_REF *v6; 
  NTSTATUS result; 
  LIST_ENTRY *Count; 
  INT64 v9; 
  INT64 v10; 
  v10 = 0i64;
  v3.0 = ($F21FB2B31E9B30A96ADF077329256E82)KeyBody->Trans;
  if( *(_OWORD *)&KeyBody->Trans.0 == 0i64 )
    return -1072103422;
  KeyControlBlock = (__int64)KeyBody->KeyControlBlock ^ 1;
  if( ((__int64)KeyBody->KeyControlBlock & 1) == 0 )
    KeyControlBlock = (__int64)KeyBody->KeyControlBlock;
  v6 = *(EX_RUNDOWN_REF **)(KeyControlBlock + 32);
  if( (*(_BYTE *)&v3.0 & 1) != 0 )
  {
    result = CmpTransSearchAddLightWeightTrans(
               (INT64)KeyBody->Trans.TransPtr,
               *(_QWORD *)(KeyControlBlock + 32),
               0i64,
               &v10);
  }
  else
  {
    Count = (LIST_ENTRY *)v6[524].Count;
    if( !Count )
      return -1072103419;
    LODWORD(v9) = 0;
    result = CmpTransSearchAddTrans((INT64)KeyBody->Trans.TransPtr, KeyBody->KtmUow, Count, v6, v9, (LIST_ENTRY **)&v10);
  }
  if( result >= 0 )
  {
    *CmTrans = (_CM_TRANS *)v10;
    return 0;
  }
  return result;
}

Referenced by:

CmDeleteValueKey
CmEnumerateKey
CmEnumerateValueKey
CmEnumerateValueKeyFromMergedView
CmQueryKey
CmQueryMultipleValueKey
CmRenameKey
CmSetKeyFlags
CmSetLastWriteTimeKey
CmSetValueKey
CmpQueryKeySecurity
CmpSetKeySecurity
NtDeleteKey