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