MiSetPagesModified

INT64 __stdcall MiSetPagesModified(
        in6_addr *Address,
        UINT64 ScopeId,
        UINT16 Port,
        INT8 *AddressString,
        UINT64 *AddressStringLength){
  int v5; 
  _MI_PARTITION *v7; 
  UINT64 v8; 
  CHAR v9; 
  INT64 v10; 
  unsigned __int64 v12; 
  unsigned int v13; 
  NTSTATUS v14; 
  INT64 v15; 
  unsigned __int64 v16; 
  __int64 v17; 
  INT64 i; 
  _MMPTE *v19; 
  char *v20; 
  UNICODE_STRING *v21; 
  UINT8 v22; 
  PWCHAR v23; 
  int v24; 
  INT64 v25; 
  UINT64 v26; 
  __int64 v27; 
  INT64 CommittedPages; 
  UINT64 v29; 
  UINT64 v30; 
  _ETHREAD *v31; 
  volatile INT64 *v32; 
  INT64 v33; 
  INT64 v34; 
  UINT64 v35; 
  INT64 v36; 
  INT64 v37; 
  in6_addr *v38; 
  UINT64 SpinCount; 
  INT64 v40; 
  INT64 v41; 
  INT64 v42; 
  __int64 v43; 
  UINT64 v44; 
  _MI_PARTITION *Partition; 
  _MI_PARTITION *v46; 
  unsigned __int64 v47; 
  unsigned __int64 v48; 
  INT64 v49; 
  __int64 v50; 
  unsigned __int64 v51; 
  INT64 *v52; 
  INT64 v53; 
  UINT64 v54; 
  _ETHREAD *CurrentThread; 
  INT64 v56[10]; 
  v5 = ScopeId;
  v38 = Address;
  v52 = 0i64;
  memset((INT64)v56, 0i64);
  v7 = *(_MI_PARTITION **)(qword_140C4E388 + 8i64 * (Address[3].u.Word[6] & 0x3FF));
  v46 = v7;
  Partition = v7;
  v50 = *(_QWORD *)Address->u.Byte;
  v43 = v50;
  v8 = *(unsigned int *)(v50 + 8);
  v44 = v8;
  if( !(unsigned int)MiChargeCommit(v7, (unsigned int)v8, 0i64) )
    return 3221225773i64;
  v12 = *(_QWORD *)&Address[8].u.Word[4];
  v47 = v12;
  v51 = v12 + 8 * v8;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  MiGetEffectivePagePriorityThread(CurrentThread, v9, v10);
  if( v13 > 5 )
    v13 = 5;
  LODWORD(v35) = v5;
  LODWORD(v33) = 0;
  MiPrefetchControlArea((INT64)Address, RtlpInterceptorRoutines, 0i64, v13, v33, v35);
  v14 = MiMapImageInSystemSpace((__int64)Address, 3, (__int64)v56);
  if( v14 >= 0 )
  {
    v40 = v56[3];
    v15 = v56[0];
    v42 = v56[0];
    v16 = (unsigned __int64)MmGetPteBase() + (((unsigned __int64)v56[0] >> 9) & 0x7FFFFFFFF8i64);
    v17 = 0i64;
    v41 = 0i64;
    HIDWORD(v37) = 0;
    while( 1 )
    {
      v49 = v15;
      v48 = v16;
      if( v12 >= v51 )
        break;
      if( MI_READ_PTE_LOCK_FREE(v12) )
      {
        for( i = v40; ; MiUnlockWorkingSetShared(i, v37) )
        {
          LOBYTE(v37) = MiLockWorkingSetShared(i);
          v19 = MiLockLowestValidPageTable(i, (INT64 *)v16, &v52);
          v54 = (UINT64)v19;
          if( v19 == (_MMPTE *)((char *)MmGetPteBase() + ((v16 >> 9) & 0x7FFFFFFFF8i64)) && (*(_BYTE *)v16 & 1) != 0 )
            break;
          MiUnlockPageTableInternal(i, (UINT64)v19);
        }
        v41 = ++v17;
        v53 = MI_READ_PTE_LOCK_FREE(v16);
        v20 = (char *)MmGetPfnDb()
            + 48 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v53) >> 12) & 0xFFFFFFFFFi64);
        LOBYTE(v24) = MI_PFN_IS_PROTO((UNICODE_STRING *)v20, v21, v22, v23);
        if( v24 )
        {
          v26 = 0i64;
          LODWORD(SpinCount) = 0;
          while( _interlockedbittestandset64((volatile signed __int32 *)v20 + 6, 0x3Fui64) )
          {
            do
              KeYieldProcessorEx(&SpinCount);
            while( *((__int64 *)v20 + 3) < 0 );
          }
          if( (*((_DWORD *)v20 + 4) & 0x400i64) == 0 && (v20[34] & 8) == 0 )
            v26 = MiCapturePageFileInfoInline((UINT64 *)v20 + 2, 1i64, 0i64);
          v20[34] |= 0x10u;
          _InterlockedAnd64((volatile signed __int64 *)v20 + 3, 0x7FFFFFFFFFFFFFFFui64);
          if( v26 )
            MiReleasePageFileInfo(
              *(_QWORD *)(qword_140C4E388 + 8 * ((*((_QWORD *)v20 + 5) >> 39) & 0x3FFi64)),
              v26,
              1,
              v25,
              v34,
              v36,
              v37,
              (INT64)v38,
              SpinCount,
              v40,
              v41,
              v42);
          v15 = v42;
        }
        MiUnlockPageTableInternal(v40, v54);
        MiUnlockWorkingSetShared(v40, v37);
        v7 = v46;
      }
      v12 += 8i64;
      v47 = v12;
      v16 += 8i64;
      v15 += 4096i64;
      v42 = v15;
    }
    v27 = v50;
    MiUnmapImageInSystemSpace((INT64)v56);
    CommittedPages = MiGetCommittedPages(v38);
    v29 = CommittedPages - v17 + v8;
    if( v29 )
      MiReturnCommit(v7, v29);
    v30 = v17 - CommittedPages;
    if( v30 )
    {
      v31 = CurrentThread;
      --*((_WORD *)CurrentThread + 243);
      v32 = (volatile INT64 *)(v27 + 40);
      ExAcquirePushLockExclusiveEx((UINT64)v32, 0i64);
      MiUpdateControlAreaCommitCount((INT64)v38, v30);
      if( (_InterlockedExchangeAdd64(v32, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock(v32);
      KeAbPostRelease((PVOID)v32);
      KiLeaveGuardedRegionUnsafe((__int64)v31);
    }
    MiDeleteFileExtents((INT64)v38);
    return 0i64;
  }
  else
  {
    MiReturnCommit(v7, v8);
    return(unsigned int)v14;
  }
}

Referenced by:

No references.