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