MiTrimUnusedPageFileRegionsApc

VOID __stdcall MiTrimUnusedPageFileRegionsApc(
        VOID *NormalContext,
        VOID *SystemArgument1,
        VOID *SystemArgument2,
        INT64 a4,
        UINT64 a5){
  _MI_PARTITION *v5; 
  _MMPAGING_FILE *v7; 
  __int64 v8; 
  UINT64 v9; 
  unsigned int FreePageFileSpace; 
  unsigned int v11; 
  unsigned __int64 Long; 
  unsigned __int64 v13; 
  __int64 v14; 
  UINT64 Size; 
  _MMPTE PageFileInfo; 

  v5 = (_MI_PARTITION *)*((_QWORD *)NormalContext + 3);
  v7 = v5->Vp.PagingFile[*((unsigned int *)NormalContext + 8)];
  v8 = MiSwizzleInvalidPte((unsigned __int64)*((unsigned int *)NormalContext + 10) << 32);
  v9 = *((unsigned int *)NormalContext + 9);
  PageFileInfo.u.Long = ((unsigned __int64)(v7->_bf_cc & 0xF) << 12) | v8 & 0xFFFFFFFFFFFF0FFFui64;
  FreePageFileSpace = MiFindFreePageFileSpace(v5, &PageFileInfo, v9, 0xABui64);
  v11 = FreePageFileSpace;
  if( FreePageFileSpace >= *((_DWORD *)NormalContext + 9) )
  {
    Long = PageFileInfo.u.Long;
    if( *(&stru_140C4DB30 + 42) && (PageFileInfo.u.Long & 0x10) == 0 )
      Long = PageFileInfo.u.Long & ~*(&stru_140C4DB30 + 42);
    v13 = HIDWORD(Long);
    *((_DWORD *)NormalContext + 10) = v13;
    v14 = MiSwizzleInvalidPte((unsigned __int64)(FreePageFileSpace + (unsigned int)v13) << 32);
    Size = v7->Size;
    PageFileInfo.u.Long = ((unsigned __int64)(v7->_bf_cc & 0xF) << 12) | v14 & 0xFFFFFFFFFFFF0FFFui64;
    *((_DWORD *)NormalContext + 11) = v11 + MiFindFreePageFileSpace(v5, &PageFileInfo, Size, 0x6Bui64);
  }
  KeSetEvent((PRKEVENT)NormalContext, 0, 0);
}

Referenced by:

No references.