VslConnectSwInterrupt
NTSTATUS __stdcall VslConnectSwInterrupt(PVOID BugCheckParameter2, PVOID BugCheckParameter3){
int v5;
VOID *Pool2;
__int64 v7;
int v8;
ULONG_PTR BugCheckParameter4;
UINT64 ProcessorNumber;
unsigned __int16 *v11[2];
__int16 v12;
int v13;
__int16 v14;
INT64 result[10];
INT64 a4[3];
int v17;
__int64 *v18;
VOID *v19;
v13 = 0;
v14 = 0;
LODWORD(ProcessorNumber) = 0;
memset((INT64)result, 0i64);
if( !HvlQueryVsmConnection(0i64) )
return -1070268386;
if( (unsigned __int64)BugCheckParameter3 > 0x1FA000 )
KeBugCheckEx(0x13Du, 0xFFFFFFFFui64, (ULONG_PTR)BugCheckParameter2, (ULONG_PTR)BugCheckParameter3, 0x1FA000ui64);
if( BugCheckParameter2 )
{
v5 = VslpLockPagesForTransfer((INT64)result, (INT64)BugCheckParameter2, (unsigned int)BugCheckParameter3, 0i64, 0);
if( v5 < 0 )
KeBugCheckEx(0x13Du, 0xFFFFFFFEui64, (ULONG_PTR)BugCheckParameter2, (ULONG_PTR)BugCheckParameter3, v5);
}
memset((INT64)a4, 0i64);
a4[1] = result[0];
a4[2] = result[7];
v18 = VslpTraceLog;
if( KiAreCodePatchesAllowed() )
{
Pool2 = VslpHotpatchLog;
if( !VslpHotpatchLog )
{
Pool2 = ExAllocatePool2((unsigned int)((_DWORD)VslpHotpatchLog + 64), 0x50008ui64, 0x676F4C48ui64);
VslpHotpatchLog = Pool2;
}
v19 = Pool2;
}
v11[1] = (unsigned __int16 *)KeActiveProcessors.Bitmap[0];
v11[0] = (unsigned __int16 *)&KeActiveProcessors;
v12 = 0;
while( !(unsigned int)KeEnumerateNextProcessor(&ProcessorNumber, v11) )
{
KeGetPrcb((unsigned int)ProcessorNumber);
if( ((*(_QWORD *)(v7 + 33880) - 1i64) & *(_QWORD *)(v7 + 33880)) != 0 )
{
v17 |= 1u;
break;
}
}
if( HvlIsCoreSharingPossible() )
v17 = v8 | 1;
BugCheckParameter4 = VslpEnterIumSecureMode(2u, 51, 0i64, (INT64)a4);
if( BugCheckParameter2 )
VslpUnlockPagesForTransfer((INT64 **)result);
if( (BugCheckParameter4 & 0x80000000) != 0i64 )
KeBugCheckEx(
0x13Du,
0xFFFFFFFDui64,
(ULONG_PTR)BugCheckParameter2,
(ULONG_PTR)BugCheckParameter3,
BugCheckParameter4);
return BugCheckParameter4;
}Referenced by:
KiConnectSwInterrupt
PsNotifyCoreDriversInitialized