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