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