PiDmaGuardQueueFlush
void __fastcall PiDmaGuardQueueFlush(__int64 a1, __int64 a2, INT64 a3){
_ETHREAD *CurrentThread;
__int64 *v5;
__int64 v6;
__int64 **v7;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite((UINT64)&PipDgqListLock, 1, a3);
while( 1 )
{
v5 = *(__int64 **)((char *)&KdDebuggerEnabled + 7);
if( *(PBOOLEAN *)((char *)&KdDebuggerEnabled + 7) == (PBOOLEAN)((char *)&KdDebuggerEnabled + 7) )
break;
if( (*(PBOOLEAN ***)((char *)&KdDebuggerEnabled + 7))[1] != (PBOOLEAN *)((char *)&KdDebuggerEnabled + 7)
|| (v6 = **(_QWORD **)((char *)&KdDebuggerEnabled + 7),
*(PBOOLEAN *)(**(_QWORD **)((char *)&KdDebuggerEnabled + 7) + 8i64) != *(PBOOLEAN *)((char *)&KdDebuggerEnabled
+ 7))
|| (*(PBOOLEAN *)((char *)&KdDebuggerEnabled + 7) = **(PBOOLEAN **)((char *)&KdDebuggerEnabled + 7),
*(_QWORD *)(v6 + 8) = (char *)&KdDebuggerEnabled + 7,
v7 = *(__int64 ***)(a1 + 8),
*v7 != (__int64 *)a1) )
{
__fastfail(3u);
}
*v5 = a1;
v5[1] = (__int64)v7;
*v7 = v5;
*(_QWORD *)(a1 + 8) = v5;
}
ExReleaseResourceLite(&PipDgqListLock);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}Referenced by:
PipDmgFlushQueueAndRestartDevices