MiMapParametersInitialize
NTSTATUS __stdcall MiMapParametersInitialize(VOID *a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
_CONTROL_AREA *v8;
unsigned int v9;
unsigned int v10;
INT64 v11;
__int64 v12;
int v13;
int v15;
int v16;
INT64 v17;
v8 = MiSectionControlArea((_SECTION *)a2);
memset(a1, 0i64, 0x80u);
*((_QWORD *)a1 + 12) = KeGetCurrentThread()->ApcState.Process;
*((_QWORD *)a1 + 11) = a3;
v9 = (unsigned __int16)KeNumberNodes;
v10 = v15 & 0x7F;
*((_BYTE *)a1 + 104) = KeGetCurrentThread()->PreviousMode;
*((_DWORD *)a1 + 13) = v10;
if( v10 > v9 )
return -1073741811;
*((_DWORD *)a1 + 10) = v15 & 0xFFFFFF80;
*((_DWORD *)a1 + 11) = v16;
if( a4 )
*((_DWORD *)a1 + 18) |= 1u;
*((_QWORD *)a1 + 3) = a5;
if( (v8->u.LongFlags & 0x20) == 0 && (*((_DWORD *)a1 + 18) & 1) != 0 )
v11 = 0i64;
else
v11 = v17;
LODWORD(v12) = MiGetUserReservationHighestAddress(a3, v11);
*((_QWORD *)a1 + 1) = v12;
*((_QWORD *)a1 + 2) = 0x10000i64;
if( (v8->u.LongFlags & 0x420) == 0 )
{
if( (v13 & 0x20000000) != 0 )
{
*((_QWORD *)a1 + 2) = 0x200000i64;
}
else if( (v13 & 0x40000000) != 0 )
{
*((_QWORD *)a1 + 2) = 4096i64;
}
}
return 0;
}Referenced by:
MiMapViewOfSectionExCommon
MmMapSecureViewOfSection
MmMapViewOfSection
NtMapViewOfSection