MiAttemptPageFileExtension
unsigned __int64 __fastcall MiAttemptPageFileExtension(__int64 a1, __int64 a2, unsigned __int64 a3){
_MI_PARTITION *v3;
__int64 v5;
unsigned __int64 i;
__int64 v9;
bool v10;
__int64 v11;
__int64 v12;
unsigned __int64 v13;
unsigned __int64 v14;
unsigned __int64 v15;
int v16;
FILE_OBJECT *v17;
UINT64 ReturnedLength;
__int64 Information[2];
__int64 v21;
__int64 FileInformation[3];
unsigned int v23;
int v24;
v3 = *(_MI_PARTITION **)(a2 + 248);
v24 = 0;
v21 = 0i64;
v5 = *(_QWORD *)(a2 + 8);
*(_OWORD *)Information = 0i64;
if( *(_QWORD *)a2 != v5
&& (int)IopQueryXxxInformation(*(FILE_OBJECT **)(a2 + 56), 3ui64, 0x18ui64, 0, Information, &ReturnedLength, 0) >= 0 )
{
for( i = 0x4000i64; ; i = 4096i64 )
{
v9 = *(_QWORD *)(a2 + 8);
v10 = a3 < i;
v11 = *(_QWORD *)a2;
v12 = i;
if( a3 >= i )
i = a3;
if( !v10 )
v12 = 4096i64;
v13 = v9 - v11;
if( i <= v9 - v11 )
v13 = i;
v14 = Information[1] * (unsigned int)(v21 * HIDWORD(v21));
if( v14 <= 0x10000000 )
break;
v15 = (v14 - 0x10000000) >> 12;
if( v15 <= v13 )
v13 = v15;
if( (*(_BYTE *)(a2 + 204) & 0x10) != 0 && v13 < a3 )
break;
FileInformation[0] = (v13 + v11) << 12;
v16 = ~*(_BYTE *)(a1 + 79) & 0x20;
FileInformation[2] = v9 << 12;
FileInformation[1] = v11 << 12;
v17 = *(FILE_OBJECT **)(a2 + 56);
v23 = (v16 | 8u) >> 3;
if( !(unsigned int)IoSetInformation(v17, FileEndOfFileInformation, 0x20ui64, FileInformation) )
{
MiFinishPageFileExtension(v3, (_MMPAGING_FILE *)a2, v13);
return v13;
}
if( v12 == 4096 )
return 0i64;
}
}
return 0i64;
}Referenced by:
MiExtendPagingFiles