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