PfSnPreallocatePrefetchHeader
NTSTATUS __stdcall PfSnPreallocatePrefetchHeader(PFSN_PREFETCH_HEADER *PrefetchHeader){
size_t v2;
VOID **PoolWithTag;
__int64 v4;
unsigned int v5;
__int64 v6;
__int64 v7;
VOID **v8;
int v9;
VOID **v10;
VOID **v11;
VOID **v12;
v2 = 68 * *(_DWORD *)(*(_QWORD *)PrefetchHeader + 88i64);
PoolWithTag = ExAllocatePoolWithTag(1ui64, v2, 1750098755i64);
if( !PoolWithTag )
return -1073741670;
v4 = *(_QWORD *)PrefetchHeader;
v5 = 0;
*((_QWORD *)PrefetchHeader + 7) = PoolWithTag;
if( *(_DWORD *)(v4 + 88) )
{
do
{
v6 = 56i64 * v5++;
v7 = *((_QWORD *)PrefetchHeader + 7) + v6;
*(_OWORD *)v7 = 0i64;
*(_OWORD *)(v7 + 16) = 0i64;
*(_QWORD *)(v7 + 24) |= 0x200000000ui64;
v4 = *(_QWORD *)PrefetchHeader;
}
while( v5 < *(_DWORD *)(*(_QWORD *)PrefetchHeader + 88i64) );
}
v8 = &PoolWithTag[7 * *(unsigned int *)(v4 + 88)];
*((_QWORD *)PrefetchHeader + 8) = v8;
*((_QWORD *)PrefetchHeader + 9) = &v8[*(unsigned int *)(v4 + 88)];
memset(PoolWithTag, 0i64, v2);
v9 = *(_DWORD *)(*(_QWORD *)PrefetchHeader + 88i64) + *(_DWORD *)(*(_QWORD *)PrefetchHeader + 120i64);
v10 = ExAllocatePoolWithTag(1ui64, (unsigned int)(24 * v9), 1750098755i64);
*((_QWORD *)PrefetchHeader + 14) = v10;
if( !v10 )
return -1073741670;
memset(v10, 0i64, 24 * v9);
PrefetchHeader[31] = v9;
v11 = ExAllocatePoolWithTag(1ui64, 0x1810ui64, 1297113923i64);
*((_QWORD *)PrefetchHeader + 10) = v11;
if( !v11 )
return -1073741670;
v12 = ExAllocatePoolWithTag(0x200ui64, 0x600ui64, 1464886083i64);
*((_QWORD *)PrefetchHeader + 11) = v12;
return v12 != 0i64 ? 0 : 0xC000009A;
}Referenced by:
PfSnAsyncPrefetchWorker