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