PfSnPrefetchFileMetadata

__int64 __fastcall PfSnPrefetchFileMetadata(
        __int64 a1,
        void *a2,
        __int64 a3,
        unsigned int a4,
        int a5,
        HANDLE EventHandle){
  unsigned int v6; 
  unsigned int v10; 
  unsigned int v11; 
  char *v13; 
  unsigned int v14; 
  UINT8 *v15; 
  int v16; 
  int v17; 
  UINT64 v18; 
  size_t Size; 
  SIZE_T Length; 
  __int64 v21; 
  __int128 v22; 
  v6 = 0;
  v22 = 0i64;
  if( a5 )
  {
    v10 = *(_DWORD *)(a3 + 4);
    if( v10 <= a4 || v10 - a4 < a5 )
    {
      return(unsigned int)-1073741701;
    }
    else
    {
      v11 = *(_DWORD *)(a1 + 96) & 7 | (8 * (*(_DWORD *)(a1 + 100) & 7 | 8));
      if( a4 || (unsigned int)a5 > 0x300 )
      {
        v13 = *(char **)(a1 + 80);
        v14 = 0;
        *((_DWORD *)v13 + 1) = 0;
        *(_DWORD *)v13 = 3;
        *((_QWORD *)v13 + 1) = v11;
        v15 = (UINT8 *)(v13 + 16);
        do
        {
          v16 = 768;
          if( a5 - v14 < 0x300 )
            v16 = a5 - v14;
          *((_DWORD *)v13 + 1) = v16;
          memmove(v15, (UINT8 *)(a3 + 16 + 8i64 * (v14 + a4)), (unsigned int)(8 * v16));
          v17 = 8 * *((_DWORD *)v13 + 1) + 16;
          NtResetEvent(EventHandle, 0i64);
          LOBYTE(v21) = 0;
          LODWORD(Length) = 0;
          LODWORD(Size) = v17;
          LODWORD(v18) = 590112;
          v6 = IopXxxControlFile(a2, EventHandle, 0i64, 0i64, (__int64)&v22, v18, v13, Size, 0i64, Length, v21);
          if( v6 == 259 )
          {
            NtWaitForSingleObject(EventHandle, 0, 0i64);
            v6 = v22;
          }
          if( (v6 & 0xC0000000) == -1073741824 )
            break;
          v14 += v16;
          v15 = (UINT8 *)(v13 + 16);
        }
        while( v14 < a5 );
      }
      else
      {
        *(_QWORD *)(a3 + 8) = v11;
        *(_DWORD *)(a3 + 4) = a5;
        NtResetEvent(EventHandle, 0i64);
        LODWORD(v18) = 590112;
        v6 = IopXxxControlFile(
               a2,
               EventHandle,
               0i64,
               0i64,
               (__int64)&v22,
               v18,
               (void *)a3,
               8 * a5 + 16,
               0i64,
               a4 & Length,
               a4);
        if( v6 == 259 )
        {
          NtWaitForSingleObject(EventHandle, 0, 0i64);
          v6 = v22;
        }
        *(_DWORD *)(a3 + 4) = v10;
      }
    }
  }
  return v6;
}

Referenced by:

PfSnGetSectionObject
PfSnPrefetchMetadata