MiSetGraphicsPtes

INT64 __fastcall MiSetGraphicsPtes(UINT64 a1, INT64 a2, UINT64 *a3, UINT64 a4, INT64 a5, UINT8 a6){
  _MMPTE *PteBase; 
  unsigned int v8; 
  INT64 *v9; 
  UINT8 v10; 
  unsigned __int64 v11; 
  UINT64 v12; 
  INT64 v13; 
  UINT8 v14; 
  UINT64 v15; 
  int v16; 
  unsigned __int64 v17; 
  _MMPTE *v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  INT64 *v22; 
  INT64 *v23; 
  UINT64 v24; 
  unsigned __int64 v25; 
  UINT64 v26; 
  v26 = a4;
  PteBase = MmGetPteBase();
  v8 = 0;
  v9 = (INT64 *)((char *)PteBase + ((a1 >> 9) & 0x7FFFFFFFF8i64));
  v22 = v9;
  v10 = a6;
  v11 = (unsigned __int64)PteBase + (((a2 + a1) >> 9) & 0x7FFFFFFFF8i64) - 8;
  v24 = 0i64;
  v25 = v11;
  LODWORD(a5) = a6 & 1;
  if( (a6 & 1) != 0 && a3 )
  {
    v12 = *a3;
    a3 = &v24;
    v24 = v12;
  }
  v13 = *((_QWORD *)KeGetCurrentThread() + 23) + 1664i64;
  v14 = MiLockWorkingSetShared(v13);
  v15 = v24;
  a6 = v14;
  v16 = (v10 & 2) == 0;
  while( 1 )
  {
    v17 = (unsigned __int64)v9;
    if( (unsigned __int64)v9 <= v11 )
      break;
LABEL_24:
    if( (unsigned int)++v16 >= 2 )
      goto LABEL_27;
  }
  while( 1 )
  {
    if( (v17 & 0xFFFFFFFFFFFFF000ui64) + 4088 <= v25 )
      v11 = (v17 & 0xFFFFFFFFFFFFF000ui64) + 4088;
    v18 = MiLockLowestValidPageTable(v13, (INT64 *)v17, &v23);
    v24 = (UINT64)v18;
    if( v18 == (_MMPTE *)((char *)MmGetPteBase() + ((v17 >> 9) & 0x7FFFFFFFF8i64)) )
      break;
LABEL_14:
    if( v16 )
    {
LABEL_15:
      v20 = (((__int64)(v11 - v17) >> 3) + 1) / (v26 >> 12);
      if( (_DWORD)a5 )
      {
        v15 += v26 * v20;
      }
      else if( a3 )
      {
        a3 += v20;
      }
    }
LABEL_19:
    MiUnlockPageTableInternal(v13, (UINT64)v18);
    if( MiWorkingSetIsContended(v13) || KeShouldYieldProcessor() )
    {
      MiUnlockWorkingSetShared(v13, a6);
      MiLockWorkingSetShared(v13);
    }
    v17 = v11 + 8;
    v11 = v25;
    if( v17 > v25 )
    {
      v9 = v22;
      goto LABEL_24;
    }
  }
  if( v16 )
    goto LABEL_15;
  v19 = v17;
  if( v17 > v11 )
    goto LABEL_19;
  while( !MI_READ_PTE_LOCK_FREE(v19) )
  {
    v19 += 8i64;
    if( v19 > v11 )
    {
      v18 = (_MMPTE *)v24;
      goto LABEL_14;
    }
  }
  v8 = -1073741800;
  MiUnlockPageTableInternal(v13, v24);
LABEL_27:
  MiUnlockWorkingSetShared(v13, a6);
  return v8;
}

Referenced by:

MmSetGraphicsPtes