WheapFreeDriverPacketBuffer
NTSTATUS __stdcall WheapFreeDriverPacketBuffer(ULONG_PTR BugCheckParameter2){
INT64 v1;
UINT64 v2;
_BYTE *v3;
_WHEAP_ERROR_SOURCE *ErrorSource;
_WHEA_ERROR_SOURCE_DESCRIPTOR *p_Descriptor;
__int64 v6;
__int64 v7;
volatile __int32 *v8;
v3 = *(_BYTE **)&BugCheckParameter2;
ErrorSource = WheapGetErrorSource(
(_WHEAP_ERROR_SOURCE_TABLE *)&WheapErrorSourceTable,
*(unsigned int *)(*(_QWORD *)&BugCheckParameter2 + 12i64),
v1,
v2);
p_Descriptor = &ErrorSource->Descriptor;
v6 = -(__int64)ErrorSource;
v7 = (unsigned __int64)p_Descriptor & -(__int64)(v6 != 0);
if( v7 )
{
v8 = (volatile __int32 *)*((_QWORD *)v3 + 4);
*(_DWORD *)v3 = 0;
if( v3[48] )
{
LODWORD(v6) = _InterlockedExchange(v8, 0);
}
else
{
ExFreeHeapPool((PVOID)v8);
LODWORD(v6) = ExFreeHeapPool(v3);
}
_InterlockedDecrement((volatile signed __int32 *)(v7 + 152));
}
return v6;
}Referenced by:
WheaHwErrorReportAbandonDeviceDriver
WheaHwErrorReportSubmitDeviceDriver