MiEliminateStaleExtents
VOID __stdcall MiEliminateStaleExtents(MMPTE *ProtoPtes, UINT64 *FilesystemPages, UINT64 NumberOfFilesystemPages){
unsigned int v3;
__int64 v4;
UINT64 v8;
_MMPFN *v9;
UINT64 v10;
_MMPFN *v11;
UINT8 PageIrql;
if( NumberOfFilesystemPages )
{
v3 = 0;
PageIrql = 17;
v4 = 0i64;
do
{
while( 1 )
{
v9 = MiLockProtoPoolPage(ProtoPtes, &PageIrql);
if( v9 )
break;
MmAccessFault(2ui64, ProtoPtes, 0, 0i64);
}
do
{
v10 = FilesystemPages[v4];
if( v10 != 0x8000000000000000ui64 )
{
v11 = MiLockLeafPage(ProtoPtes, 0i64);
if( v11 )
{
_InterlockedAnd64((volatile signed __int64 *)v11 + 3, 0x7FFFFFFFFFFFFFFFui64);
FilesystemPages[v4] = v10 | 0x4000000000000000i64;
}
}
++v3;
ProtoPtes = (MMPTE *)((char *)ProtoPtes + 8);
v4 = v3;
}
while( v3 < NumberOfFilesystemPages && ((unsigned __int16)ProtoPtes & 0xFFF) != 0 );
LOBYTE(v8) = PageIrql;
MiUnlockProtoPoolPage(v9, v8);
}
while( v3 < NumberOfFilesystemPages );
}
}Referenced by:
MiAllocateFileExtents