KiEpfDrainCompletionQueue
VOID __stdcall KiEpfDrainCompletionQueue(){
LIST_ENTRY *v0;
__int64 v1;
char v2;
v0 = 0i64;
if( KiEpfCompletionQueue )
{
while( 1 )
{
KxAcquireSpinLock(&KiEpfCompletionQueueSpinLock);
v1 = *(_QWORD *)KiEpfCompletionQueue;
if( *(_QWORD *)KiEpfCompletionQueue == *(_QWORD *)(KiEpfCompletionQueue + 8) )
{
v2 = 0;
}
else
{
v0 = *(LIST_ENTRY **)(KiEpfCompletionQueue + 8 * v1 + 16);
v2 = 1;
*(_QWORD *)KiEpfCompletionQueue = (v1 + 1) % (unsigned __int64)(unsigned int)KiEpfCompletionQueueSize;
}
KxReleaseSpinLock(&KiEpfCompletionQueueSpinLock);
if( !v2 )
break;
KiEpfComplete(v0);
}
}
}Referenced by:
KeInitSystem
KeWaitPhysicalFaultCompletion
KiEpfCompletionDpcRoutine
KiEpfHandleNotification