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