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