MiInitializeCacheFlushing

INT64 __stdcall MiInitializeCacheFlushing(){
  INT64 result; 
  INT64 v1; 
  unsigned __int64 v2; 
  char *v3; 
  unsigned __int8 CurrentIrql; 
  __int64 v5; 
  INT64 v6; 
  unsigned __int64 v7; 
  _BYTE *v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  unsigned int v12; 
  void *v13; 
  void *v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  unsigned __int64 v17; 
  signed __int32 v18[8]; 
  UINT64 SpinCount; 
  size_t Size; 
  __int128 v21; 
  __int128 v22; 
  v21 = 0i64;
  v22 = 0i64;
  if( (int)ZwQuerySystemInformation() >= 0 && (BYTE8(v21) & 1) != 0 )
    byte_140C4DC28 = 1;
  result = MiGetPage((_MI_PARTITION *)&MiSystemPartition, 0i64, 0i64);
  v1 = result;
  if( result != -1 )
  {
    v2 = 0i64;
    v3 = (char *)MmGetPfnDb() + 48 * result;
    MiFinalizePageAttribute((_MMPFN *)v3, MiCached, 0i64);
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    v5 = 4i64;
    do
    {
      MiZeroPhysicalPage(v1, 1ui64, MiNonCached);
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)v3 + 6, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( *((__int64 *)v3 + 3) < 0 );
      }
      v3[34] &= 0x3Fu;
      _InterlockedAnd64((volatile signed __int64 *)v3 + 3, 0x7FFFFFFFFFFFFFFFui64);
      Size = __rdtsc();
      _InterlockedOr(v18, 0);
      MiFlushCacheForAttributeChange(v1, 1i64, 0i64);
      _InterlockedOr(v18, 0);
      v7 = __rdtsc();
      v8 = (_BYTE *)((unsigned __int64)HIDWORD(v7) << 32);
      HIDWORD(SpinCount) = 0;
      v9 = v7;
      while( _interlockedbittestandset64((volatile signed __int32 *)v3 + 6, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx((UINT64 *)((char *)&SpinCount + 4));
        while( *((__int64 *)v3 + 3) < 0 );
      }
      v3[34] = v3[34] & 0x3F | 0x40;
      _InterlockedAnd64((volatile signed __int64 *)v3 + 3, 0x7FFFFFFFFFFFFFFFui64);
      MiFlushEntireTbDueToAttributeChange(v6, v8);
      v2 += v9 - Size;
      --v5;
    }
    while( v5 );
    v10 = v2 >> 2;
    v11 = 0i64;
    if( v10 )
    {
      v12 = dword_140C4DC18;
      if( !dword_140C4DC18 )
        v12 = 256;
      Size = 3 * (v12 >> 2);
      LODWORD(v13) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
      v14 = v13;
      if( v13 )
      {
        v15 = 2i64;
        do
        {
          memset((INT64)v14, 0i64);
          v16 = __rdtsc();
          _InterlockedOr(v18, 0);
          ++dword_140C4DC44;
          KeInvalidateAllCaches();
          _InterlockedOr(v18, 0);
          v17 = __rdtsc();
          _InterlockedOr(v18, 0);
          v11 += (((unsigned __int64)HIDWORD(v17) << 32) | (unsigned int)v17) - v16;
          --v15;
        }
        while( v15 );
        ExFreePoolWithTag(v14, 0);
        dword_140C4DC4C = (v11 & 0xFFFFFFFFFFFFFFFEui64) / v10;
      }
    }
    __writecr8(CurrentIrql);
    MiReleaseFreshPage((_MMPFN *)v3);
  }
  return result;
}

Referenced by:

MiInitSystem