HalpMemoryErrorDeferredRecovery

NTSTATUS __stdcall HalpMemoryErrorDeferredRecovery(
        INT64 a1,
        INT64 a2,
        INT64 a3,
        INT64 a4,
        _MMINPAGE_SUPPORT *InPageSupport,
        _MI_PARTITION *Partition,
        INT64 a7,
        INT64 a8){
  int v9; 
  char v11; 
  PSLIST_ENTRY v12; 
  NTSTATUS v13; 
  NTSTATUS v14; 

  v9 = a4;
  v11 = a2;
  v12 = RtlpInterlockedPopEntrySList(&WheapDrsPoolList);
  if( v12 )
  {
    if( !byte_140C4A110 )
    {
LABEL_12:
      WORD1(v12[4].Next) = (_WORD)InPageSupport;
      BYTE4(v12[4].Next) = (_BYTE)Partition;
      BYTE5(v12[4].Next) = a7;
      *((_QWORD *)&v12[3].Next + 1) = a1;
      BYTE6(v12[4].Next) = a8 & 1;
      LOBYTE(v12[4].Next) = v11;
      *((_QWORD *)&v12[4].Next + 1) = a3;
      LODWORD(v12[5].Next) = v9;
      HIDWORD(v12[5].Next) = 1;
      if( WheaRequestDeferredRecovery((INT64)&v12[1], (INT64)(&v12[3].Next + 1)) )
        return 0;
      RtlpInterlockedPushEntrySList(&WheapDrsPoolList, v12);
      return -1073741757;
    }
    if( a3 )
    {
      if( !qword_140C4A1C0 )
      {
        v13 = -1073741823;
        goto LABEL_10;
      }
      v14 = qword_140C4A1C0(a3);
    }
    else
    {
      v14 = HalpHvSetMachineCheckRecoveryState(1i64);
    }
    v13 = v14;
LABEL_10:
    if( v13 < 0 )
    {
      RtlpInterlockedPushEntrySList(&WheapDrsPoolList, v12);
      return v13;
    }
    goto LABEL_12;
  }
  return -1073741757;
}

Referenced by:

HalpGhesMemoryErrorHandler
HalpHvMceConsumedMemoryErrorRecovery
HalpMceRecoveryNotRequiredAmd
HalpMceRecoveryNotRequiredIntel