MiMapExParametersInitialize
__int64 __fastcall MiMapExParametersInitialize(__int64 a1, __int64 a2, __int64 a3){
_CONTROL_AREA *v5;
unsigned __int64 *v6;
__int64 v7;
unsigned int v8;
_CONTROL_AREA *v9;
unsigned __int64 v10;
unsigned __int64 v11;
unsigned __int64 v12;
unsigned __int64 v13;
int v14;
unsigned int v15;
v5 = MiSectionControlArea(*(_SECTION **)(a2 + 32));
v8 = 0;
v9 = v5;
if( v6[2] )
return(unsigned int)-1073741811;
if( (*(_DWORD *)(v7 + 40) & 0x4000) != 0 )
{
if( *v6 || v6[1] )
return(unsigned int)-1073741811;
*(_DWORD *)(v7 + 60) |= 0x4000000u;
*(_DWORD *)(v7 + 72) |= 2u;
*(_QWORD *)(v7 + 16) = 4096i64;
}
v10 = *v6;
if( ((*(_QWORD *)(v7 + 16) - 1i64) & *v6) != 0 || *(_QWORD *)a2 && (v10 || v6[1] || v6[2]) )
return(unsigned int)-1073741811;
v11 = v6[1];
if( v11 )
{
if( v11 <= 0x7FFFFFFEFFFFi64 && (((_WORD)v11 + 1) & 0xFFF) == 0 )
goto LABEL_7;
return(unsigned int)-1073741811;
}
LODWORD(v12) = MiGetUserReservationHighestAddress(*(_QWORD *)(a2 + 40), 0i64);
v11 = v12;
*(_QWORD *)(a3 + 8) = v12;
LABEL_7:
if( v10 >= v11 )
return(unsigned int)-1073741811;
v13 = *(_QWORD *)(a2 + 8);
if( v13 )
{
if( v11 - v10 + 1 < v13 )
return(unsigned int)-1073741811;
}
v14 = *(_DWORD *)(v7 + 40);
if( (v14 & 0x7F) != 0 )
return(unsigned int)-1073741811;
if( *(_DWORD *)(v7 + 52) != v8 )
return(unsigned int)-1073741811;
v15 = *(_DWORD *)(a3 + 32);
if( v15 > (unsigned __int16)KeNumberNodes || (v14 & 0x40000000) != 0 && (v9->u.LongFlags & 0x420) != 0 )
return(unsigned int)-1073741811;
if( (v14 & 0x20000000) != 0 && (v9->u.LongFlags & 0x20) != 0 && (*(_DWORD *)(v7 + 72) & 1) != 0 )
return(unsigned int)-1073741811;
if( (*(_BYTE *)(a3 + 56) & 0x20) != 0 )
{
*(_DWORD *)(v7 + 60) |= 2u;
v15 = *(_DWORD *)(a3 + 32);
}
*(_DWORD *)(v7 + 52) = v15;
*(_QWORD *)v7 = *(_QWORD *)a3;
*(_QWORD *)(v7 + 8) = *(_QWORD *)(a3 + 8);
*(_DWORD *)(v7 + 40) = v14 & 0xFFFFBFFF;
return v8;
}Referenced by:
MiMapViewOfSectionExCommon