PfSnInitializePrefetcher

NTSTATUS __stdcall PfSnInitializePrefetcher(){
  VOID **PoolWithTag; 
  _UNICODE_STRING DestinationString; 

  FastMutex.Count = 1;
  qword_140C50190 = 0i64;
  qword_140C50188 = &qword_140C50180;
  qword_140C50180 = &qword_140C50180;
  FastMutex.Owner = 0i64;
  qword_140C501A0 = &qword_140C50198;
  qword_140C50198 = &qword_140C50198;
  *(_QWORD *)&FastMutex.gap14[20] = &FastMutex.gap14[12];
  *(_QWORD *)&FastMutex.gap14[12] = &FastMutex.gap14[12];
  DestinationString = 0i64;
  FastMutex.Contention = 0;
  *(_WORD *)&FastMutex.gap14[4] = 1;
  FastMutex.gap14[6] = 6;
  *(_DWORD *)&FastMutex.gap14[8] = 0;
  dword_140C501E4 = 0;
  RtlInitUnicodeString(&DestinationString, L"\\KernelObjects\\PrefetchTracesReady");
  PfpCreateEvent(&DestinationString, SynchronizationEvent, (PVOID *)&qword_140C501E8);
  PfSnPrefetchCacheCtxInitialize((__int64)&unk_140C501F8);
  qword_140C50288 = 0i64;
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0xA0ui64, 1716544323i64);
  if( PoolWithTag )
  {
    *PoolWithTag = 0i64;
    PoolWithTag[2] = PoolWithTag + 1;
    PoolWithTag[1] = PoolWithTag + 1;
    *(_BYTE *)PoolWithTag = 8;
    PoolWithTag[3] = 0i64;
    *((_DWORD *)PoolWithTag + 15) = 0;
    *((_WORD *)PoolWithTag + 28) = 0;
    PoolWithTag[11] = PfSnTracingStateDpcRoutine;
    *((_DWORD *)PoolWithTag + 16) = 275;
    PoolWithTag[12] = PoolWithTag;
    PoolWithTag[15] = 0i64;
    PoolWithTag[10] = 0i64;
    PoolWithTag[18] = PfSnTracingStateExWorkerRoutine;
    PoolWithTag[19] = PoolWithTag;
    PoolWithTag[16] = 0i64;
    KiSetTimerEx((_KTIMER *)PoolWithTag, (_LARGE_INTEGER)-6000000000i64, 0i64, 0, (_KDPC *)PoolWithTag + 1);
  }
  return 0;
}

Referenced by:

PfInitializeSuperfetch