MmSetGraphicsPtes

INT64 __fastcall MmSetGraphicsPtes(UINT64 P2, UINT64 P3, UINT64 *a3, UINT64 a4, INT64 a5, INT64 a6){
  UINT64 v10; 
  _ETHREAD *CurrentThread; 
  unsigned __int64 v12; 
  int v13; 
  INT64 v14; 
  void *v15; 
  int v17; 
  unsigned int v18; 
  INT64 AwePageSizeFromVa; 
  unsigned __int64 v20; 
  unsigned __int64 v21; 
  UINT64 v22; 
  __int64 v23; 
  INT64 v24; 
  INT64 v25; 
  if( P2 >= 0xFFFF800000000000ui64 || (v10 = P2 + P3, P2 + P3 <= P2) || v10 >= 0xFFFF800000000000ui64 )
    KeBugCheckEx(0x1Au, 0xA000ui64, P2, P3, 0i64);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  LODWORD(v25) = 0;
  v12 = v10 - 1;
  v13 = 0;
  v14 = MiObtainReferencedVadEx(P2, 0, &v25);
  v15 = (void *)v14;
  if( !v14 )
    return(unsigned int)v25;
  v17 = *(_DWORD *)(v14 + 48);
  if( (v17 & 0x1100000) == 17825792 )
  {
    if( v12 > (((*(unsigned int *)(v14 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v14 + 33) << 32)) << 12) | 0xFFF) )
    {
      v18 = -1073741584;
      goto LABEL_35;
    }
    if( (v17 & 0x70) == 48 )
    {
      v13 = 1;
      MiLockAweVadsExclusive((INT64)CurrentThread);
      AwePageSizeFromVa = (INT64)MiGetAwePageSizeFromVa(P2);
      if( !AwePageSizeFromVa )
      {
        v18 = -1073741585;
        goto LABEL_34;
      }
    }
    else
    {
      if( (v17 & 0x500000) != 5242880 )
        goto LABEL_32;
      AwePageSizeFromVa = MiGetVadPageSize(v14);
    }
    if( (a6 & 0xFFFFFFFE) != 0 )
    {
      v18 = -1073741580;
      goto LABEL_33;
    }
    if( (_DWORD)a5 )
    {
      v18 = -1073741581;
      goto LABEL_33;
    }
    v20 = AwePageSizeFromVa << 12;
    if( a4 != v20 )
    {
      v18 = -1073741582;
      goto LABEL_33;
    }
    v21 = v20 - 1;
    if( ((v20 - 1) & P2) == 0 && (v21 & P3) == 0 )
    {
      if( a3 )
      {
        if( (a6 & 1) != 0 )
        {
          v22 = 1i64;
          goto LABEL_27;
        }
        v22 = P3 / v20;
        if( P3 / v20 )
        {
LABEL_27:
          v23 = 0i64;
          while( (v21 & a3[v23]) == 0 )
          {
            if( ++v23 >= v22 )
              goto LABEL_30;
          }
          v18 = -1073741583;
LABEL_33:
          if( !v13 )
            goto LABEL_35;
LABEL_34:
          MiUnlockAweVadsExclusive((__int64)CurrentThread);
          goto LABEL_35;
        }
      }
LABEL_30:
      v18 = MiSetGraphicsPtes(P2, P3, a3, a4, v24, a6);
      goto LABEL_33;
    }
LABEL_32:
    v18 = -1073741585;
    goto LABEL_33;
  }
  v18 = -1073741585;
LABEL_35:
  MiUnlockAndDereferenceVad(v15);
  return v18;
}

Referenced by:

No references.