WheapFreeDriverPacketBuffer
NTSTATUS __stdcall WheapFreeDriverPacketBuffer(PVOID BugCheckParameter2){
INT64 *ErrorSource;
unsigned __int64 v3;
__int64 v4;
__int64 v5;
volatile __int32 *v6;
ErrorSource = WheapGetErrorSource((INT64)&WheapErrorSourceTable, *((unsigned int *)BugCheckParameter2 + 3));
v3 = (unsigned __int64)(ErrorSource + 12);
v4 = -(__int64)ErrorSource;
v5 = v3 & -(__int64)(v4 != 0);
if( v5 )
{
v6 = (volatile __int32 *)*((_QWORD *)BugCheckParameter2 + 4);
*(_DWORD *)BugCheckParameter2 = 0;
if( *((_BYTE *)BugCheckParameter2 + 48) )
{
LODWORD(v4) = _InterlockedExchange(v6, 0);
}
else
{
ExFreeHeapPool((PVOID)v6);
LODWORD(v4) = ExFreeHeapPool(BugCheckParameter2);
}
_InterlockedDecrement((volatile signed __int32 *)(v5 + 152));
}
return v4;
}Referenced by:
WheaHwErrorReportAbandonDeviceDriver
WheaHwErrorReportSubmitDeviceDriver