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