BOOLEAN BalloonInterruptIsr( IN WDFINTERRUPT WdfInterrupt, IN ULONG MessageID ) { PDEVICE_CONTEXT devCtx = NULL; WDFDEVICE Device; UNREFERENCED_PARAMETER( MessageID ); TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INTERRUPT, "--> %s\n", __FUNCTION__); Device = WdfInterruptGetDevice(WdfInterrupt); devCtx = GetDeviceContext(Device); if (VirtIOWdfGetISRStatus(&devCtx->VDevice) > 0) { WdfInterruptQueueDpcForIsr( WdfInterrupt ); return TRUE; } return FALSE; }
BOOLEAN VioCryptInterruptIsr(IN WDFINTERRUPT Interrupt, IN ULONG MessageId) { PDEVICE_CONTEXT context = GetDeviceContext( WdfInterruptGetDevice(Interrupt)); WDF_INTERRUPT_INFO info; BOOLEAN processed; WDF_INTERRUPT_INFO_INIT(&info); WdfInterruptGetInfo(context->WdfInterrupt, &info); processed = ((info.MessageSignaled && (MessageId == 0)) || VirtIOWdfGetISRStatus(&context->VDevice)); if (processed) { WdfInterruptQueueDpcForIsr(Interrupt); } Trace(TRACE_LEVEL_VERBOSE, "[%s] %sprocessed", __FUNCTION__, processed ? "" : "not "); return processed; }