MiInitializeCacheFlushing

VOID __stdcall MiInitializeCacheFlushing(){
  int v0; 
  UINT64 v1; 
  UINT64 v2; 
  unsigned __int64 v3; 
  _MMPFN *v4; 
  unsigned __int8 CurrentIrql; 
  __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  __int64 v9; 
  unsigned int v10; 
  VOID *Pool; 
  size_t v12; 
  __int64 v13; 
  unsigned __int64 v14; 
  unsigned __int64 v15; 
  signed __int32 v16[8]; 
  UINT64 SpinCount; 
  size_t Size[2]; 
  __int128 v19; 
  __int128 v20; 

  v19 = 0i64;
  v20 = 0i64;
  ZwQuerySystemInformation();
  if( v0 >= 0 && (BYTE8(v19) & 1) != 0 )
    *(&stru_140C4DB30 + 248) = 1;
  LODWORD(v1) = MiGetPage((ULONG_PTR *)&Irp.Core.PartitionId, 0i64, 0i64);
  v2 = v1;
  if( v1 != -1i64 )
  {
    v3 = 0i64;
    v4 = &MmGetPfnDb()[v1];
    MiFinalizePageAttribute(v4, MiCached, 0i64);
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    v6 = 4i64;
    do
    {
      MiZeroPhysicalPage(v2, 1ui64, MiNonCached);
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)&v4->u2, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( v4->u2._bf_0 < 0 );
      }
      *((_BYTE *)&v4->u3 + 2) &= 0x3Fu;
      _InterlockedAnd64(&v4->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      *(_QWORD *)Size = __rdtsc();
      _InterlockedOr(v16, 0);
      MiFlushCacheForAttributeChange(v2, 1ui64, MiNonCached);
      _InterlockedOr(v16, 0);
      HIDWORD(SpinCount) = 0;
      v7 = __rdtsc();
      while( _interlockedbittestandset64((volatile signed __int32 *)&v4->u2, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx((UINT64 *)((char *)&SpinCount + 4));
        while( v4->u2._bf_0 < 0 );
      }
      *((_BYTE *)&v4->u3 + 2) = *(_BYTE *)(&v4->u3 + 1) & 0x3F | 0x40;
      _InterlockedAnd64(&v4->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      MiFlushEntireTbDueToAttributeChange();
      v3 += v7 - *(_QWORD *)Size;
      --v6;
    }
    while( v6 );
    v8 = v3 >> 2;
    v9 = 0i64;
    if( v8 )
    {
      v10 = *(&stru_140C4DB30 + 58);
      if( !*(&stru_140C4DB30 + 58) )
        v10 = 256;
      *(_QWORD *)Size = 3 * (v10 >> 2);
      Pool = MiAllocatePool(64i64, *(UINT64 *)Size, 0x20206D4Dui64);
      if( Pool )
      {
        v12 = Size[0];
        v13 = 2i64;
        do
        {
          memset(Pool, 0i64, v12);
          v14 = __rdtsc();
          _InterlockedOr(v16, 0);
          ++*(&stru_140C4DB30 + 69);
          KeInvalidateAllCaches();
          _InterlockedOr(v16, 0);
          v15 = __rdtsc();
          _InterlockedOr(v16, 0);
          v9 += (((unsigned __int64)HIDWORD(v15) << 32) | (unsigned int)v15) - v14;
          --v13;
        }
        while( v13 );
        ExFreePoolWithTag(Pool, 0);
        *(&stru_140C4DB30 + 71) = (v9 & 0xFFFFFFFFFFFFFFFEui64) / v8;
      }
    }
    __writecr8(CurrentIrql);
    MiReleaseFreshPage(v4);
  }
}

Referenced by:

MiInitSystem