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.