CmpPrepareDiscardReplacePost

INT64 __fastcall CmpPrepareDiscardReplacePost(UINT64 a1, INT64 a2, INT64 a3){
  unsigned int v3; 
  NTSTATUS v6; 
  $B9512D9805578D643BEBB89DC99AC162 **v7; 
  $B9512D9805578D643BEBB89DC99AC162 *v8; 
  _CM_KEY_CONTROL_BLOCK *CloneKcb; 
  v3 = 0;
  CloneKcb = 0i64;
  CmpReferenceKeyControlBlock(a1);
  v6 = CmpCloneToUnbackedKcb((_CM_KEY_CONTROL_BLOCK *)a1, &CloneKcb);
  if( v6 >= 0 )
  {
    v7 = *($B9512D9805578D643BEBB89DC99AC162 ***)(a3 + 24);
    v8 = &CloneKcb->120;
    if( *v7 != ($B9512D9805578D643BEBB89DC99AC162 *)(a3 + 16) )
      __fastfail(3u);
    v8->KeyBodyListHead.Flink = (_LIST_ENTRY *)(a3 + 16);
    v8->KeyBodyListHead.Blink = (_LIST_ENTRY *)v7;
    *v7 = v8;
    *(_QWORD *)(a3 + 24) = v8;
    v6 = 0;
  }
  *(_DWORD *)(a3 + 8) = v6;
  LOBYTE(v3) = v6 < 0;
  return v3;
}

Referenced by:

CmpPrepareDiscardAndReplaceKcbAndUnbackedHigherLayers