MiRescanPagefileBitmaps
VOID __stdcall MiRescanPagefileBitmaps(_MMPAGING_FILE *PagingFile){
unsigned int Length;
UINT64 v3;
_MI_PAGEFILE_BITMAPS_CACHE_ENTRY *Flink;
unsigned int v5;
_MI_PAGING_FILE_SPACE_BITMAPS *Bitmaps;
unsigned int NextClearRunUlong;
_RTL_BITMAP BitMapHeader;
UINT64 StartingIndex;
_MI_PAGEFILE_BITMAPS_CACHE_ENTRY *MinLengthCacheEntryInOut;
Length = 0;
LODWORD(StartingIndex) = 0;
*(&BitMapHeader.SizeOfBitMap + 1) = 0;
MiInitializePagefileBitmapsCache(PagingFile);
Flink = (_MI_PAGEFILE_BITMAPS_CACHE_ENTRY *)PagingFile->BitmapsCacheFreeList.Flink;
v5 = 0;
BitMapHeader.SizeOfBitMap = PagingFile->Size;
Bitmaps = PagingFile->Bitmaps;
MinLengthCacheEntryInOut = Flink;
BitMapHeader.Buffer = Bitmaps->ReservationBitmap.Buffer;
while( 1 )
{
NextClearRunUlong = RtlFindNextClearRunUlong(&BitMapHeader, v5, v3, 0xFFFFFFFFui64, &StartingIndex);
if( !NextClearRunUlong )
break;
v3 = (unsigned int)StartingIndex;
v5 = StartingIndex + NextClearRunUlong;
if( NextClearRunUlong > Flink->Length )
{
MiRescanPageFileBitmapPortion(
PagingFile,
&PagingFile->Bitmaps->AllocationBitmap,
(unsigned int)StartingIndex,
NextClearRunUlong,
&MinLengthCacheEntryInOut);
Flink = MinLengthCacheEntryInOut;
}
}
if( PagingFile->BitmapsCacheFreeList.Flink == &PagingFile->BitmapsCacheFreeList )
Length = Flink->Length;
PagingFile->MaximumRunLengthInBitmaps = Length;
}Referenced by:
MiFindFreePageFileSpace