VslpIumPhase0Initialize
INT64 __fastcall VslpIumPhase0Initialize(INT64 rcx0){
INT64 v1;
__int64 v3;
void *v4;
int v5;
NTSTATUS v6;
__int64 v7;
int a3;
unsigned int a1;
int v10;
int v11;
INT64 result;
int v13;
int v14;
PHYSICAL_ADDRESS PhysicalAddress;
ULONG_PTR v16;
ULONG_PTR v17;
PHYSICAL_ADDRESS v18;
char v19[8];
PHYSICAL_ADDRESS v20;
v1 = *(_QWORD *)(rcx0 + 240);
a1 = 0;
a3 = 0;
if( (*(_DWORD *)(v1 + 132) & 0x200) != 0 )
{
if( !HvlQueryVsmConnection(0i64) )
KeBugCheckEx(0x6Fu, 0xFFFFFFFFC0000001ui64, 0i64, 0i64, v3 & v7);
memset((INT64)&result, 0i64);
v13 = 167772168;
PhysicalAddress = MmGetPhysicalAddress(&KUSER_SHARED_DATA);
VslpIumPhase0InitializeNtKd(rcx0, (INT64)&result);
v4 = (void *)*((_QWORD *)KeGetPcr() + 7);
v18 = MmGetPhysicalAddress(*(PVOID *)KeGetPcr());
v20 = MmGetPhysicalAddress(v4);
MmSetPageProtection(v4, 0x1000ui64, 2ui64);
((void(__fastcall *)(__int64, __int64, char *, int *))off_140C00A68[0])(45i64, 8i64, v19, &a3);
KUSER_SHARED_DATA.EnclaveFeatureMask[0] |= 0x100u;
if( KiKvaShadowMode )
v14 |= 1u;
KeQueryKvaShadowInformation(&a1, 4ui64, &a3);
v5 = v14;
if( ((a1 >> 4) & 1) != 0 )
{
v5 = v14 | 2;
v14 |= 2u;
}
if( BBTBuffer )
{
v5 |= 4u;
v14 = v5;
}
if( ((a1 >> 4) & 1) != 0 && KiImplementedPhysicalBits > 0 )
{
v5 |= 8u;
v14 = v5;
}
if( KiDisableTsx )
v14 = v5 | 0x10;
v11 = VslpNestedPageProtectionFlags & 2;
v16 = KeFeatureBits;
v17 = KeFeatureBits2;
v6 = VslpEnterIumSecureMode(2u, 208, 0i64, (INT64)&result);
if( v6 < 0 )
KeBugCheckEx(0x6Fu, v6, 0i64, 1ui64, 0i64);
if( PhysicalAddress.LowPart != 167772168 )
KeBugCheckEx(0x6Fu, 0xFFFFFFFFC0000059ui64, 0i64, 2ui64, 0i64);
v10 = 0;
VslpIumThreadSemaphore.Header.WaitListHead.Blink = &VslpIumThreadSemaphore.Header.WaitListHead;
VslpIumThreadSemaphore.Header.WaitListHead.Flink = &VslpIumThreadSemaphore.Header.WaitListHead;
VslpIumThreadSemaphore.Header.SignalState = PhysicalAddress.HighPart;
VslpIumThreadSemaphore.Limit = PhysicalAddress.HighPart;
VslpIumThreadSemaphore.Header.Type = 5;
VslpIumThreadSemaphore.Header.Size = 8;
VslVsmEnabled = 1;
((void(__fastcall *)(__int64, __int64, int *))off_140C00A70[0])(16i64, 4i64, &v10);
return((__int64(__fastcall *)(__int64, __int64, int *))off_140C00A70[0])(18i64, 4i64, &v11);
}
return v1;
}Referenced by:
HvlPhase1Initialize