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