MiMapMemoryDumpMdl

CHAR __stdcall MiMapMemoryDumpMdl(UINT64 a1, INT64 a2, INT64 a3, CHAR a4){
  __int64 v6; 
  __int64 v7; 
  char *v8; 
  _XSTATE_CONFIGURATION *v9; 
  __int64 v10; 
  __int64 v11; 
  _XSTATE_CONFIGURATION *v12; 
  __int64 v13; 
  unsigned int v14; 
  unsigned __int64 CurrentThread; 
  __int64 v16; 
  UINT64 v17; 
  INT64 v18; 
  int v19; 
  unsigned __int64 v20; 
  unsigned __int64 v21; 
  int v22; 
  bool v23; 
  _XSTATE_CONFIGURATION *v26; 
  _MI_TB_FLUSH_LIST TbFlushList[48]; 

  memset(TbFlushList, 0i64, 0xB8u);
  v6 = *(unsigned int *)(a3 + 44);
  v7 = ((unsigned int)(v6 + *(_DWORD *)(a3 + 40)) >> 12) + ((((_DWORD)v6 + *(_DWORD *)(a3 + 40)) & 0xFFF) != 0);
  TbFlushList[2] = 20;
  v26 = (_XSTATE_CONFIGURATION *)((char *)MmGetPteBase() + ((a1 >> 9) & 0x7FFFFFFFF8i64));
  *(_QWORD *)(a3 + 24) = a1 + v6;
  v8 = (char *)(a1 & 0xFFFFFFFFFFFFF000ui64);
  LOBYTE(TbFlushList[1]) = 3;
  *(_QWORD *)&TbFlushList[6] = 0i64;
  v9 = v26;
  do
  {
    LODWORD(v10) = MI_READ_PTE_LOCK_FREE((INT64)v9);
    v11 = v10;
    if( (v10 & 1) != 0 )
      MiInsertTbFlushEntry(TbFlushList, v8, 1ui64, 0i64);
    if( v11 )
    {
      MiPteInShadowRange((UINT64)v9);
      v9->EnabledFeatures = 0i64;
    }
    v9 = (_XSTATE_CONFIGURATION *)((char *)v9 + 8);
    v8 += 4096;
    --v7;
  }
  while( v7 );
  v12 = v26;
  if( TbFlushList[3] )
    MiFlushTbList(TbFlushList);
  v13 = *(unsigned int *)(a3 + 44);
  v14 = v13 + *(_DWORD *)(a3 + 40);
  CurrentThread = (v14 & 0xFFF) != 0;
  *(_QWORD *)(a3 + 24) = a1 + v13;
  v16 = (v14 >> 12) + (unsigned int)CurrentThread;
  if( (a4 & 2) != 0 )
  {
    *(_WORD *)(a3 + 10) &= 0xFFDEu;
    return CurrentThread;
  }
  v17 = a3 - ((a1 >> 9) & 0x7FFFFFFFF8i64) - (_QWORD)MmGetPteBase();
  do
  {
    v18 = *(INT64 *)((char *)&v12->Features[3] + v17);
    v19 = 4;
    if( (a4 & 1) == 0 )
      MiMakeProtectionPfnCompatible((_BYTE *)4, &MmGetPfnDb()[v18]);
    LODWORD(v20) = MiMakeValidPte(v12, v18, v19 | 0xA0000000);
    v21 = v20;
    v22 = 0;
    LOBYTE(CurrentThread) = MiPteInShadowRange((UINT64)v12);
    if( (_DWORD)CurrentThread )
    {
      LODWORD(CurrentThread) = MiPteHasShadow();
      if( (_DWORD)CurrentThread )
      {
        v22 = 1;
        if( *(&stru_140C4DB30 + 537) )
          goto LABEL_14;
        v23 = (v21 & 1) == 0;
      }
      else
      {
        CurrentThread = (unsigned __int64)KeGetCurrentThread();
        if( (*(_DWORD *)(*(_QWORD *)(CurrentThread + 184) + 2172i64) & 0x1000) == 0 )
          goto LABEL_14;
        v23 = (v21 & 1) == 0;
      }
      if( !v23 )
        v21 |= 0x8000000000000000ui64;
    }
LABEL_14:
    v12->EnabledFeatures = v21;
    if( v22 )
      LOBYTE(CurrentThread) = MiWritePteShadow();
    v12 = (_XSTATE_CONFIGURATION *)((char *)v12 + 8);
    --v16;
  }
  while( v16 );
  *(_WORD *)(a3 + 10) |= 0x11u;
  return CurrentThread;
}

Referenced by:

MmMapMemoryDumpMdl
MmMapMemoryDumpMdlEx
MmMapMemoryDumpMdlEx2