MiDeletePagefile
VOID __stdcall MiDeletePagefile(_MMPAGING_FILE *PagingFile, UINT64 FreePagefilePool){
__int64 v2;
int i;
_MMMOD_WRITER_MDL_ENTRY **Entry;
_PRIVILEGE_SET *Bitmaps;
unsigned int *PageHash;
__int16 bf_cc;
void *FileHandle;
_FILE_OBJECT *File;
wchar_t *Buffer;
_MI_PAGEFILE_BITMAPS_CACHE_ENTRY *BitmapsCacheEntries;
v2 = 0i64;
for( i = FreePagefilePool; (unsigned int)v2 < PagingFile->NumberOfModWriterEntries; v2 = (unsigned int)(v2 + 1) )
MiFreeModWriterEntry(PagingFile->Entry[v2], 0i64);
Entry = PagingFile->Entry;
if( Entry )
ExFreePoolWithTag(Entry, 0);
Bitmaps = (_PRIVILEGE_SET *)PagingFile->Bitmaps;
if( Bitmaps )
CmSiFreeMemory(Bitmaps);
PageHash = PagingFile->PageHash;
if( PageHash )
MiReleasePageHash((UINT64 *)PageHash, LODWORD(PagingFile->MaximumSize));
MiFreePageFileHashPfns(PagingFile->Partition);
bf_cc = PagingFile->_bf_cc;
if( (bf_cc & 0x100) != 0 )
{
MiUpdatePageFileList(PagingFile, 0i64);
bf_cc = PagingFile->_bf_cc;
}
if( (bf_cc & 0x200) != 0 )
PiPagePathSetState(PagingFile->File, 0);
FileHandle = PagingFile->FileHandle;
if( FileHandle )
ObCloseHandle(FileHandle, 0);
File = PagingFile->File;
if( File )
HalPutDmaAdapter((PADAPTER_OBJECT)File);
Buffer = PagingFile->PageFileName.Buffer;
if( Buffer )
ExFreePoolWithTag(Buffer, 0);
BitmapsCacheEntries = PagingFile->BitmapsCacheEntries;
if( BitmapsCacheEntries )
ExFreePoolWithTag(BitmapsCacheEntries, 0);
if( i )
ExFreePoolWithTag(PagingFile, 0);
}Referenced by:
MiCreatePagingFile
MiDeletePagingFiles
MmStoreRegister