使用方法
VOID NTAPI KeInitializeInterrupt(
IN PKINTERRUPT Interrupt,
IN PKSERVICE_ROUTINE ServiceRoutine,
IN PVOID MessageServiceRoutine,
IN PVOID ServiceContext,
IN ULONG MessageIndex,
IN PKSPIN_LOCK SpinLock,
IN ULONG Vector,
IN KIRQL Irql,
IN KIRQL SynchronizeIrql,
IN KINTERRUPT_MODE InterruptMode,
IN BOOLEAN ShareVector,
IN KAFFINITY ProcessorNumber
);
PVOID NTAPI KeConnectInterruptForHal(
IN PKINTERRUPT Interrupt);
VOID HalpCreateInterrupt()
{
NTSTATUS status = STATUS_SUCCESS;
KAFFINITY affnift = 1 << vpidxmax;
PKINTERRUPT InterruptObject = (PKINTERRUPT)ExAllocatePool2(POOL_FLAG_NON_PAGED, VSM_PAGE_SIZE, HARNESS_POOL_TAG);
KeInitializeInterrupt(InterruptObject, ProcessSynicChannelMsg, nullptr, pDeviceObject,0, nullptr, HYPERVISOR_CALLBACK_VECTOR, PASSIVE_LEVEL, DISPATCH_LEVEL, Latched, true, affnift);
PVOID ret = KeConnectInterruptForHal(InterruptObject);
DbgPrintEx(DPFLTR_IHVDRIVER_ID, DEBUG_LEVEL, "KHV: vpidx %08x KeCon