MiMapViewOfSectionCommon
NTSTATUS __fastcall MiMapViewOfSectionCommon(
INT64 a1,
VOID *a2,
INT64 a3,
INT64 *a4,
UINT64 a5,
UINT64 a6,
UINT64 a7,
CHAR a8,
KPROCESSOR_MODE a9,
INT64 *a10){
int v11;
UINT64 v13;
int ProtectionMask;
int v15;
void *v16;
PVOID *v17;
NTSTATUS result;
ACCESS_MASK v19;
int v20;
__int64 v21;
INT64 *v22;
UINT64 v23;
UINT64 v24;
INT64 v25;
unsigned __int64 v26;
PVOID v27;
v11 = a3;
*(_OWORD *)a10 = 0i64;
*((_OWORD *)a10 + 1) = 0i64;
*((_OWORD *)a10 + 2) = 0i64;
v13 = (unsigned int)a7;
LODWORD(v13) = a7 & 0xBFFFFFFF;
ProtectionMask = MiMakeProtectionMask(v13);
*((_DWORD *)a10 + 6) = ProtectionMask;
if( ProtectionMask == -1 )
return -1073741755;
*((_DWORD *)a10 + 6) = ProtectionMask & 7;
v17 = (PVOID *)(a10 + 5);
if( v15 )
{
*v17 = v16;
a10[4] = (INT64)a2;
}
else
{
result = ObReferenceObjectByHandleWithTag(
v16,
v11 + 8,
(POBJECT_TYPE)PsProcessType,
a9,
0x77566D4Du,
(PVOID *)a10 + 5,
0i64);
if( result < 0 )
return result;
v19 = *((_DWORD *)MmMakeSectionAccess + *((unsigned int *)a10 + 6));
v27 = 0i64;
v20 = ObReferenceObjectByHandle(a2, v19, MmSectionObjectType, a9, &v27, 0i64);
a10[4] = (INT64)v27;
if( v20 < 0 )
{
ObfDereferenceObjectWithTag(*v17, 0x77566D4Dui64);
return v20;
}
}
if( a9 )
{
v21 = (__int64)a4;
if( (unsigned __int64)a4 >= 0x7FFFFFFF0000i64 )
v21 = 0x7FFFFFFF0000i64;
*(_QWORD *)v21 = *(_QWORD *)v21;
v22 = (INT64 *)a5;
v23 = a5;
if( a5 >= 0x7FFFFFFF0000i64 )
v23 = 0x7FFFFFFF0000i64;
*(_QWORD *)v23 = *(_QWORD *)v23;
}
else
{
v22 = (INT64 *)a5;
}
*a10 = *a4;
a10[1] = *v22;
if( a6 )
{
if( a9 )
{
v24 = a6;
if( (a6 & 3) != 0 )
ExRaiseDatatypeMisalignment();
if( a6 >= 0x7FFFFFFF0000i64 )
v24 = 0x7FFFFFFF0000i64;
*(_BYTE *)v24 = *(_BYTE *)v24;
*(_BYTE *)(v24 + 7) = *(_BYTE *)(v24 + 7);
}
a10[2] = *(_QWORD *)a6;
}
else
{
a10[2] = 0i64;
}
v25 = *a10;
if( (unsigned __int64)*a10 <= 0x7FFFFFFEFFFFi64 )
{
v26 = a10[1];
if( v26 <= 0x7FFFFFFF0000i64 - v25 && v25 + v26 <= 0xFFFFFFFFFFFFFFFFui64 >> a8 )
return 0;
}
if( !v11 )
{
HalPutDmaAdapter((PADAPTER_OBJECT)a10[4]);
ObfDereferenceObjectWithTag((PVOID)a10[5], 0x77566D4Dui64);
}
return -1073741811;
}Referenced by:
MiMapViewOfSectionExCommon
NtMapViewOfSection