PfpOpenHandleCreate
__int64 __fastcall PfpOpenHandleCreate(
__int64 a1,
__int64 a2,
__int64 a3,
__int64 a4,
int a5,
unsigned int a6,
unsigned int a7,
__int64 a8){
unsigned int v10;
int v11;
__int64 v12;
unsigned int v13;
unsigned int v14;
int v15;
_PFP_PREFETCH_CONTEXT *v16;
unsigned int v17;
__int128 v19[10];
_LARGE_INTEGER Interval;
__int64 v21;
__int64 v22;
v22 = a4;
v21 = a3;
memset(v19, 0i64, 0x70u);
v10 = 0;
v11 = *(_DWORD *)(a2 + 68);
Interval.QuadPart = -10000i64 * *(unsigned int *)(a2 + 56);
if( (v11 & 4) != 0 )
{
return(unsigned int)-1073741431;
}
else
{
v12 = a8;
v13 = a7;
v14 = a6;
v15 = a5;
while( 1 )
{
v16 = *(_PFP_PREFETCH_CONTEXT **)(a2 + 24);
if( v16 && (unsigned int)PfpCheckPrefetchAbort(v16) )
return(unsigned int)-1073741248;
memset(v19, 0i64, 0x70u);
LODWORD(v19[1]) = 48;
*(_QWORD *)&v19[0] = a2 + 40;
*((_QWORD *)&v19[1] + 1) = v22;
*(_QWORD *)&v19[2] = v21;
DWORD2(v19[2]) = 576;
v19[3] = 0i64;
LODWORD(v19[4]) = v15;
*(_QWORD *)((char *)&v19[4] + 4) = __PAIR64__(v14, v13);
if( v12 )
*((_QWORD *)&v19[0] + 1) = *(_QWORD *)(v12 + 8);
v17 = (*(__int64(__fastcall **)(__int128 *))qword_140C50138)(v19);
if( (v17 & 0x80000000) == 0 )
{
*(_OWORD *)a1 = v19[5];
*(_QWORD *)(a1 + 16) = *(_QWORD *)&v19[6];
*(_DWORD *)(a1 + 24) = HIDWORD(v19[6]);
_InterlockedIncrement((volatile signed __int32 *)(a2 + 76));
*(_QWORD *)(a1 + 24) |= 0x400000000ui64;
return 0;
}
++*(_DWORD *)(a2 + 80);
if( DWORD2(v19[6]) == 2 )
break;
if( DWORD2(v19[6]) == 5 )
{
*(_DWORD *)(a2 + 72) = 1;
return v17;
}
if( SDWORD2(v19[6]) <= 10
|| SDWORD2(v19[6]) > 13 && DWORD2(v19[6]) != 16
|| DWORD2(v19[6]) == 16 && v10 > 1
|| *(_DWORD *)(a2 + 60) <= *(_DWORD *)(a2 + 64) )
{
return v17;
}
KeDelayExecutionThread(0, 0, &Interval);
++v10;
*(_DWORD *)(a2 + 64) += *(_DWORD *)(a2 + 56);
if( (*(_DWORD *)(a2 + 68) & 4) != 0 )
return(unsigned int)-1073741431;
}
if( v17 != -1073741790 )
*(_QWORD *)(a1 + 24) |= 0x100000000ui64;
}
return v17;
}Referenced by:
PfSnGetSectionObject
PfSnOpenVolumesForPrefetch
PfSnQueryVolumeInfo
PfpFileBuildReadSupport
PfpPrefetchDirectoryStream
PfpPrefetchEntireDirectory
PfpQueryFileExtentsRequest
PfpVolumeOpenAndVerify