HalpPmemErrorDeferredRecovery

NTSTATUS __stdcall HalpPmemErrorDeferredRecovery(PVOID Src){
  NTSTATUS v2; 
  PSLIST_ENTRY v3; 
  size_t v4; 
  VOID **PoolWithTag; 
  VOID **v6; 

  v2 = 0;
  v3 = RtlpInterlockedPopEntrySList(&WheapDrsPoolList);
  if( !v3 )
    return -1073741757;
  v4 = 24 * *((_DWORD *)Src + 21) + 88;
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v4, 543973704i64);
  v6 = PoolWithTag;
  if( !PoolWithTag )
    return -1073741670;
  memset(PoolWithTag, 0i64, v4);
  memmove(v6, Src, v4);
  *((_QWORD *)&v3[3].Next + 1) = v6;
  *((_QWORD *)&v3[4].Next + 1) = 0i64;
  LODWORD(v3[5].Next) = 0;
  HIDWORD(v3[5].Next) = 2;
  if( !WheaRequestDeferredRecovery((INT64)&v3[1], (INT64)(&v3[3].Next + 1)) )
  {
    RtlpInterlockedPushEntrySList(&WheapDrsPoolList, v3);
    v2 = -1073741757;
    ExFreePoolWithTag(v6, 0x206C6148u);
  }
  return v2;
}

Referenced by:

HalpGenericErrorSourceRecovery