PfSnPrefetchSectionsCleanup
void __fastcall PfSnPrefetchSectionsCleanup(KSPIN_LOCK a1, int a2, unsigned int a3, __int64 a4){
WORK_QUEUE_ITEM *v4;
__int64 v8;
NTSTATUS PriorityThread;
_QWORD *p_WorkerRoutine;
KSPIN_LOCK SpinLock[2];
__int128 v13;
__int128 v14;
v4 = *(WORK_QUEUE_ITEM **)(a1 + 88);
v8 = a3;
memset((INT64)v4, 0i64);
*(_OWORD *)SpinLock = 0i64;
v13 = 0i64;
v14 = 0i64;
ExInitializePushLock((EX_RUNDOWN_REF *)SpinLock);
SpinLock[1] = a1;
LODWORD(v14) = a2;
*(_QWORD *)&v13 = a4;
PriorityThread = KeQueryPriorityThread(KeGetCurrentThread());
if( a3 )
{
p_WorkerRoutine = &v4->WorkerRoutine;
do
{
p_WorkerRoutine[2] = SpinLock;
*(p_WorkerRoutine - 2) = 0i64;
*p_WorkerRoutine = PfSnSectionInfoCleanupWorkItem;
p_WorkerRoutine[1] = v4;
ExAcquireRundownProtection((PEX_RUNDOWN_REF)SpinLock);
ExQueueWorkItem(v4, (WORK_QUEUE_TYPE)(PriorityThread + 32));
v4 = (WORK_QUEUE_ITEM *)((char *)v4 + 48);
p_WorkerRoutine += 6;
--v8;
}
while( v8 );
}
ExWaitForRundownProtectionRelease((EX_RUNDOWN_REF *)SpinLock);
}Referenced by:
PfSnPrefetchSections