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