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