VslConnectSwInterrupt

NTSTATUS __stdcall VslConnectSwInterrupt(
        ULONG_PTR BugCheckParameter2,
        ULONG_PTR BugCheckParameter3,
        INT64 a3,
        INT64 a4,
        ULONG_PTR a5){
  void *v5; 
  void *v6; 
  NTSTATUS v8; 
  int v9; 
  VOID *Pool2; 
  int v11; 
  _KPRCB *Prcb; 
  int v13; 
  void *BugCheckParameter4; 
  UINT64 ProcIndex; 
  _KAFFINITY_ENUMERATION_CONTEXT Context; 
  INT64 v17[10]; 
  INT64 v18[14]; 

  v5 = *(void **)&BugCheckParameter3;
  v6 = *(void **)&BugCheckParameter2;
  *(_DWORD *)(&Context.CurrentIndex + 1) = 0;
  *(&Context.CurrentIndex + 3) = 0;
  LODWORD(ProcIndex) = 0;
  memset(v17, 0i64, 0x48u);
  if( !HvlQueryVsmConnection(0i64) )
    return -1070268386;
  if( (unsigned __int64)v5 > 0x1FA000 )
    KeBugCheckEx(0x13Du, (PVOID)0xFFFFFFFFi64, v6, v5, (PVOID)0x1FA000);
  if( v6 )
  {
    v8 = VslpLockPagesForTransfer((INT64)v17, (INT64)v6, (unsigned int)v5, 0i64, 0);
    if( v8 < 0 )
      KeBugCheckEx(0x13Du, (PVOID)0xFFFFFFFEi64, v6, v5, (PVOID)v8);
  }
  memset(v18, 0i64, 0x68u);
  v18[1] = v17[0];
  v18[2] = v17[7];
  v18[4] = (INT64)&VslpTraceLog;
  LOBYTE(v9) = KiAreCodePatchesAllowed();
  if( v9 )
  {
    Pool2 = VslpHotpatchLog;
    if( !VslpHotpatchLog )
    {
      Pool2 = ExAllocatePool2((unsigned int)((_DWORD)VslpHotpatchLog + 64), 0x50008ui64, 0x676F4C48ui64);
      VslpHotpatchLog = Pool2;
    }
    v18[5] = (INT64)Pool2;
  }
  Context.CurrentMask = KeActiveProcessors.Bitmap[0];
  Context.Affinity = &KeActiveProcessors;
  Context.CurrentIndex = 0;
  while( 1 )
  {
    KeEnumerateNextProcessor(&ProcIndex, &Context);
    if( v11 )
      break;
    Prcb = KeGetPrcb((unsigned int)ProcIndex);
    if( ((Prcb->CoreProcessorSet - 1) & Prcb->CoreProcessorSet) != 0 )
    {
      LODWORD(v18[3]) |= 1u;
      break;
    }
  }
  if( HvlIsCoreSharingPossible() )
    LODWORD(v18[3]) = v13 | 1;
  BugCheckParameter4 = (void *)VslpEnterIumSecureMode(2u, 51, 0i64, (INT64)v18);
  if( v6 )
    VslpUnlockPagesForTransfer((INT64 **)v17);
  if( (int)BugCheckParameter4 < 0 )
    KeBugCheckEx(0x13Du, (PVOID)0xFFFFFFFDi64, v6, v5, BugCheckParameter4);
  return(int)BugCheckParameter4;
}

Referenced by:

KiConnectSwInterrupt
PsNotifyCoreDriversInitialized