PipDmgFlushQueueAndRestartDevices
INT64 *__stdcall PipDmgFlushQueueAndRestartDevices(){
__int64 v0;
INT64 v1;
PVOID *v2;
PVOID v3;
INT64 *result;
_QWORD *v5;
PVOID P[2];
if( !PipDmaGuardPolicy || PipDmaGuardPolicy == 3 )
KeBugCheckEx(0xCAu, (PVOID)0x11, 0i64, 0i64, 0i64);
P[1] = P;
P[0] = P;
PiDmaGuardQueueFlush((__int64)P, v0, v1);
v2 = (PVOID *)P[0];
if( P[0] == P )
goto LABEL_6;
do
{
v3 = v2[2];
v2 = (PVOID *)*v2;
PipDmgRequestRestartOnBlockedDevice(v3);
}
while( v2 != P );
while( 1 )
{
v2 = (PVOID *)P[0];
LABEL_6:
result = (INT64 *)P;
if( v2 == P )
break;
if( v2[1] != P || (v5 = *v2, *((PVOID **)*v2 + 1) != v2) )
__fastfail(3u);
P[0] = *v2;
v5[1] = P;
PipDgqFreeEntry(v2);
}
return result;
}Referenced by:
PipDmgConsoleUnlockCallback
PipDmgReevaluateQueue