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