PfSnPrefetchSectionsCleanup
VOID __stdcall PfSnPrefetchSectionsCleanup(
_PFSN_PREFETCH_HEADER *PrefetchHeader,
UINT64 NumReadLists,
UINT64 NumWorkItems,
_EPROCESS *Process){
_WORK_QUEUE_ITEM *v4;
int v5;
int v6;
__int64 v8;
int v10;
int v11;
_QWORD *p_WorkerRoutine;
unsigned __int64 PushLock[2];
__int128 v14;
__int128 v15;
v4 = (_WORK_QUEUE_ITEM *)*((_QWORD *)PrefetchHeader + 11);
v5 = NumReadLists;
v6 = NumWorkItems;
v8 = (unsigned int)NumWorkItems;
memset(v4, 0i64, 48 * NumWorkItems);
*(_OWORD *)PushLock = 0i64;
v14 = 0i64;
v15 = 0i64;
ExInitializePushLock(PushLock);
PushLock[1] = (unsigned __int64)PrefetchHeader;
LODWORD(v15) = v5;
*(_QWORD *)&v14 = Process;
KeQueryPriorityThread((_ETHREAD *)KeGetCurrentThread());
v11 = v10;
if( v6 )
{
p_WorkerRoutine = &v4->WorkerRoutine;
do
{
p_WorkerRoutine[2] = PushLock;
*(p_WorkerRoutine - 2) = 0i64;
*p_WorkerRoutine = PfSnSectionInfoCleanupWorkItem;
p_WorkerRoutine[1] = v4;
ExAcquireRundownProtection((_EX_RUNDOWN_REF *)PushLock);
ExQueueWorkItem(v4, (_WORK_QUEUE_TYPE)(v11 + 32));
v4 = (_WORK_QUEUE_ITEM *)((char *)v4 + 48);
p_WorkerRoutine += 6;
--v8;
}
while( v8 );
}
ExWaitForRundownProtectionRelease((_EX_RUNDOWN_REF *)PushLock);
}Referenced by:
PfSnPrefetchSections