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