MiInitializeVsmEnclave
NTSTATUS __stdcall MiInitializeVsmEnclave(PEPROCESS Process){
_MMVAD_SHORT *v1;
__int64 v2;
unsigned int v3;
__int64 ExtraCreateInfo;
unsigned int v5;
__int64 v6;
_MMVAD_SHORT *v7;
VOID **v9;
_ETHREAD *CurrentThread;
NTSTATUS v11;
VOID *v12;
_ADAPTER_OBJECT *v13;
_KPROCESSOR_MODE v14;
_ADAPTER_OBJECT *v15;
__int64 v17[2];
INT64 v18;
ExtraCreateInfo = (__int64)v1[1].ExtraCreateInfo;
v17[0] = 0i64;
v5 = v3;
v18 = 0i64;
v6 = v2;
v7 = v1;
v9 = 0i64;
if( _InterlockedIncrement64((volatile signed __int64 *)(ExtraCreateInfo + 16)) <= 1 )
__fastfail(0xEu);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
MiUnlockVad(CurrentThread, v1);
if( *(_BYTE *)(ExtraCreateInfo + 76) )
{
if( v5 < 0x38 )
{
v11 = -1073741820;
goto LABEL_10;
}
v12 = *(VOID **)(v6 + 48);
if( v12 )
{
v13 = (_ADAPTER_OBJECT *)PsReferencePrimaryToken(Process);
LOBYTE(v14) = CurrentThread->Tcb.PreviousMode;
v15 = v13;
v11 = MiMapImageForEnclaveUse(v12, (INT64)v13, v14, &v18, v17);
HalPutDmaAdapter(v15);
if( v11 < 0 )
goto LABEL_10;
v9 = *(VOID ***)(*(_QWORD *)(v17[0] + 96) + 56i64);
}
}
v11 = PsInitializeVsmEnclave(ExtraCreateInfo, (_DWORD *)v6, v5, v9, (UINT64 *)v18);
LABEL_10:
PsDereferenceVsmEnclave((PVOID)ExtraCreateInfo);
if( v18 )
MiUnmapImageForEnclaveUse((VOID *)v18);
MiLockVad(CurrentThread, v7);
return v11;
}Referenced by:
MiInitializeEnclave