MiInitializeEnclave
NTSTATUS __fastcall MiInitializeEnclave(PEPROCESS Process, UINT64 a2, VOID *SignatureInfo, INT64 a4){
int v6;
INT64 v7;
VOID *v8;
INT64 v9;
int v11;
int v12;
__int64 v13[3];
LODWORD(v13[0]) = 0;
v6 = a4;
LODWORD(v7) = MiObtainReferencedVadEx(a2, 0, v13);
v9 = v7;
if( !v7 )
return v13[0];
if( (*(_DWORD *)(v7 + 48) & 0x3100000) == 34603008 )
{
v12 = *(_DWORD *)(v7 + 64);
if( (v12 & 2) != 0 )
{
v11 = -1073740528;
}
else if( (v12 & 1) != 0 )
{
if( v6 == 4096 )
{
v11 = KeInitializeEnclave(
(VOID *)((__int64)((*(_QWORD *)(v9 + 80) << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16),
SignatureInfo,
v8,
(UINT64 *)SignatureInfo + 256);
if( v11 >= 0 )
{
MiReturnReservedEnclavePages(v9, -1i64);
*(_DWORD *)(v9 + 64) |= 2u;
v11 = 0;
}
}
else
{
v11 = -1073741820;
}
}
else
{
v11 = MiInitializeVsmEnclave(Process);
}
}
else
{
v11 = -1073741800;
}
MiUnlockAndDereferenceVad((_MMVAD_SHORT *)v9);
return v11;
}Referenced by:
NtInitializeEnclave