DbgkQueueUserExceptionReport

INT64 __stdcall DbgkQueueUserExceptionReport(PADAPTER_OBJECT DmaAdapter){
  unsigned int v1; 
  __int64 v2; 
  __int64 v3; 
  char v4; 
  char v5; 
  __int64 v6; 
  __int64 v9; 
  char *PoolWithTag; 
  _OWORD *v11; 
  char v12; 
  _KPROCESS *v13; 
  _ETHREAD *CurrentThread; 
  int v15; 
  _KAPC_STATE ApcState; 
  v3 = v1;
  v4 = 0;
  v5 = 0;
  v6 = v2;
  memset(&ApcState, 0, sizeof(ApcState));
  if( !DbgkEnableWerUserReporting )
    return 3221226326i64;
  if( (*(_DWORD *)(&DmaAdapter[7].Size + 1) & 0x400) != 0 )
    return 3221225659i64;
  IoThreadToProcess((_ETHREAD *)DmaAdapter);
  if( (*(_DWORD *)(v9 + 2172) & 1) != 0 )
    return 3221225659i64;
  if( _interlockedbittestandset((volatile signed __int32 *)&DmaAdapter[81], 0x15u) )
    return 3221227268i64;
  PoolWithTag = (char *)ExAllocatePoolWithTag(NonPagedPoolNx, 0xD0ui64, 0x4B474244ui64);
  if( !PoolWithTag )
    return 3221225626i64;
  ObfReferenceObject(DmaAdapter);
  *(_QWORD *)PoolWithTag = DmaAdapter;
  v11 = PoolWithTag + 24;
  *((_QWORD *)PoolWithTag + 1) = v3;
  if( v6 )
  {
    *v11 = *(_OWORD *)v6;
    *(_OWORD *)(PoolWithTag + 40) = *(_OWORD *)(v6 + 16);
    *(_OWORD *)(PoolWithTag + 56) = *(_OWORD *)(v6 + 32);
    *(_OWORD *)(PoolWithTag + 72) = *(_OWORD *)(v6 + 48);
    *(_OWORD *)(PoolWithTag + 88) = *(_OWORD *)(v6 + 64);
    *(_OWORD *)(PoolWithTag + 104) = *(_OWORD *)(v6 + 80);
    *(_OWORD *)(PoolWithTag + 120) = *(_OWORD *)(v6 + 96);
    *(_OWORD *)(PoolWithTag + 136) = *(_OWORD *)(v6 + 112);
    *(_OWORD *)(PoolWithTag + 152) = *(_OWORD *)(v6 + 128);
    *((_QWORD *)PoolWithTag + 21) = *(_QWORD *)(v6 + 144);
    v12 = 1;
  }
  else
  {
    memset((INT64)v11, 0i64);
    v12 = 0;
  }
  PoolWithTag[16] = v12;
  *((_QWORD *)PoolWithTag + 22) = 0i64;
  *((_QWORD *)PoolWithTag + 24) = DbgkUserReportWorkRoutine;
  *((_QWORD *)PoolWithTag + 25) = PoolWithTag;
  IoThreadToProcess((_ETHREAD *)DmaAdapter);
  if( v13 != *((_EPROCESS **)KeGetCurrentThread() + 23) )
  {
    KiStackAttachProcess((_KPROCESS *)v13, 0i64, &ApcState);
    v5 = 1;
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  v15 = PsSuspendThread((__int64)DmaAdapter, 0i64);
  if( v15 >= 0 )
  {
    v4 = 1;
    ExQueueWorkItem((WORK_QUEUE_ITEM *)(PoolWithTag + 176), DelayedWorkQueue);
  }
  KeLeaveCriticalRegion();
  if( v15 < 0 )
  {
    ExFreePoolWithTag(PoolWithTag, 0x4B474244u);
    _InterlockedAnd((volatile signed __int32 *)&DmaAdapter[81], 0xFFDFFFFF);
    if( v4 )
      PsResumeThread((__int64)DmaAdapter, 0i64);
    HalPutDmaAdapter(DmaAdapter);
  }
  if( v5 )
    KiUnstackDetachProcess(&ApcState, 0i64);
  return(unsigned int)v15;
}

Referenced by:

MiForceCrashForInvalidAccess
SepLogLpacAccessFailure