VmPrefetchVirtualAddresses
INT64 __stdcall VmPrefetchVirtualAddresses(PVOID Src){
void(__fastcall *v1)(void *);
int v2;
unsigned int v4;
void(__fastcall *v5)(void *);
_LIST_ENTRY *v6;
volatile LONG *Flink;
WORK_QUEUE_ITEM *PoolWithTag;
WORK_QUEUE_ITEM *v9;
UINT8 *v10;
v4 = 0;
v5 = v1;
v6 = (_LIST_ENTRY *)*((_QWORD *)KeGetCurrentThread() + 23);
Flink = (volatile LONG *)v6[143].Flink;
if( Flink )
{
if( v2 )
{
return(unsigned int)VmpPrefetchVirtualAddresses(Flink);
}
else
{
PoolWithTag = (WORK_QUEUE_ITEM *)ExAllocatePoolWithTag(NonPagedPoolNx, 16i64 * ((_QWORD)v1 + 4), 0x63506D56ui64);
v9 = PoolWithTag;
if( PoolWithTag )
{
PoolWithTag->List.Blink = 0i64;
PoolWithTag[1].List.Flink = 0i64;
PoolWithTag[1].List.Blink = 0i64;
PoolWithTag[1].WorkerRoutine = 0i64;
PoolWithTag->WorkerRoutine = (void(__fastcall *)(void *))VmpPrefetchWorker;
PoolWithTag->Parameter = PoolWithTag;
PoolWithTag->List.Flink = 0i64;
ObfReferenceObject(v6);
v9[1].WorkerRoutine = v5;
v10 = (UINT8 *)(((unsigned __int64)&v9[1].Parameter + 7) & 0xFFFFFFFFFFFFFFF8ui64);
v9[1].List.Blink = (_LIST_ENTRY *)v10;
v9[1].List.Flink = v6;
memmove(v10, (UINT8 *)Src, 16i64 * (_QWORD)v5);
ExQueueWorkItem(v9, DelayedWorkQueue);
}
else
{
return(unsigned int)-1073741670;
}
}
}
else
{
return(unsigned int)-1073741667;
}
return v4;
}Referenced by:
MmInSwapWorkingSet
NtSetInformationVirtualMemory