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