PfSnPreallocatePrefetchHeader

INT64 __fastcall PfSnPreallocatePrefetchHeader(INT64 *a1){
  VOID *PoolWithTag; 
  INT64 v3; 
  unsigned int v4; 
  __int64 v5; 
  INT64 v6; 
  INT64 v7; 
  int v8; 
  VOID *v9; 
  VOID *v10; 
  VOID *v11; 
  PoolWithTag = ExAllocatePoolWithTag(PagedPool, (unsigned int)(68 * *(_DWORD *)(*a1 + 88)), 0x68506343ui64);
  if( !PoolWithTag )
    return 3221225626i64;
  v3 = *a1;
  v4 = 0;
  a1[7] = (INT64)PoolWithTag;
  if( *(_DWORD *)(v3 + 88) )
  {
    do
    {
      v5 = 56i64 * v4++;
      v6 = a1[7] + v5;
      *(_OWORD *)v6 = 0i64;
      *(_OWORD *)(v6 + 16) = 0i64;
      *(_QWORD *)(v6 + 24) |= 0x200000000ui64;
      v3 = *a1;
    }
    while( v4 < *(_DWORD *)(*a1 + 88) );
  }
  v7 = (INT64)PoolWithTag + 56 * *(unsigned int *)(v3 + 88);
  a1[8] = v7;
  a1[9] = v7 + 8i64 * *(unsigned int *)(v3 + 88);
  memset((INT64)PoolWithTag, 0i64);
  v8 = *(_DWORD *)(*a1 + 88) + *(_DWORD *)(*a1 + 120);
  v9 = ExAllocatePoolWithTag(PagedPool, (unsigned int)(24 * v8), 0x68506343ui64);
  a1[14] = (INT64)v9;
  if( !v9 )
    return 3221225626i64;
  memset((INT64)v9, 0i64);
  *((_DWORD *)a1 + 31) = v8;
  v10 = ExAllocatePoolWithTag(PagedPool, 0x1810ui64, 0x4D506343ui64);
  a1[10] = (INT64)v10;
  if( !v10 )
    return 3221225626i64;
  v11 = ExAllocatePoolWithTag(NonPagedPoolNx, 0x600ui64, 0x57506343ui64);
  a1[11] = (INT64)v11;
  return v11 != 0i64 ? 0 : 0xC000009A;
}

Referenced by:

PfSnAsyncPrefetchWorker