MiMapImageForEnclaveUse

NTSTATUS __fastcall MiMapImageForEnclaveUse(VOID *a1, INT64 a2, KPROCESSOR_MODE a3, INT64 *a4, INT64 *a5){
  NTSTATUS result; 
  _LOADER_PARAMETER_BLOCK *v7; 
  _CONTROL_AREA *v8; 
  __int64 v9; 
  NTSTATUS v10; 
  _FILE_OBJECT *v11; 
  PVOID Object[2]; 
  _KAPC_STATE ApcState; 
  Object[0] = 0i64;
  memset(&ApcState, 0, sizeof(ApcState));
  result = ObReferenceObjectByHandle(a1, 4u, MmSectionObjectType, a3, Object, 0i64);
  if( result >= 0 )
  {
    v7 = (_LOADER_PARAMETER_BLOCK *)Object[0];
    v8 = MiSectionControlArea((_SECTION *)Object[0]);
    v9 = (__int64)v8;
    if( (*((_DWORD *)v7 + 14) & 0x20) != 0 )
    {
      if( (*((_DWORD *)v8 + 23) & 0xC0000) != 0 )
        goto LABEL_9;
      if( (*(_QWORD *)(*((_QWORD *)v8 + 12) + 40i64) & 0xFFFFFFFFFFFFFFF8ui64) <= 8 )
      {
        v11 = MiReferenceControlAreaFile(v8);
        v10 = MiValidateSectionCreate((ULONG_PTR)v11, v9, -1, a2, 0x40000000, 4, 0);
        MiDereferenceControlAreaFile(v9, (unsigned __int64)v11);
        if( v10 < 0 )
          goto LABEL_10;
        if( (*(_DWORD *)(v9 + 92) & 0xC0000) != 0 )
        {
LABEL_9:
          KiStackAttachProcess((_KPROCESS *)PsSecureSystemProcess, 0i64, &ApcState);
          Object[1] = 0i64;
          Object[0] = 0i64;
          v10 = MmMapViewOfSection(v7, PsSecureSystemProcess);
          KiUnstackDetachProcess(&ApcState, 0i64);
          *a5 = v9;
          goto LABEL_10;
        }
      }
      v10 = -1073740760;
    }
    else
    {
      v10 = -1073741751;
    }
LABEL_10:
    HalPutDmaAdapter((PADAPTER_OBJECT)v7);
    return v10;
  }
  return result;
}

Referenced by:

MiInitializeVsmEnclave
MiLoadSectionIntoVsmEnclave