Inverted Call Model implementation for a minifilter, or a possible alternative?

Hi all,
I need it for Kernel-User signalling reason and not for data transfer, while my design needs Kernel-user data transfer as well but that is a different part.

I’ve read about and used communication ports. but that was for data transfer. I think I can’t use it for signaling user mode like Inverted Call does.

Is inverted Call Model compatible with minifilters. should I use it to signal a user mode application from kernel mode? probably the way that cdo sample is implemented?

other possible solutions:

Which one works? which one is better to use?

Filter Manager ports are actually just an implementation of inverted call in any case.

Mini-filters can use inverted call model; I’ve done so in the past successfully.

The choice of which one is really dependent upon what you wish to accomplish and how. I’d be surprised to find some problem that either of these two mechanisms can’t both be used to solve.

Tony
OSR

Thanks for the reply tony,

I want the both sides(kernel and user) to be able to initiate the communication. But the issue I’m asking about here is how the kernel can be the initiator.

Filter Manager ports are actually just an implementation of inverted call in any case.

As I understand from reading Inverted method call, it is a way to allow the kernel to “signal user” or “initiate a communication”(that’s why it is called inverted. because the direction of communication is made inverted). But as I see communication ports, the user mode will be the initiator of the communication and I don’t know if I can pend a message like what was done in inverted call model or not to make the direction of the communication inverted and let the kernel be the initiator.

Mini-filters can use inverted call model; I’ve done so in the past successfully.

I’m really not that much experienced with kernel mode drivers and just started digging into minifilters. I thought there might be some conflicts between filter manager and the sample code provider for inverted model, specially where they declare the IO request processing queue(WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE) and set an event processing callback(queueConfig.EvtIoDeviceControl = InvertedEvtIoDeviceControl;) Can these two really live together?

In case you want to know what is the reason I want this type of communication let me explain it a bit.
I want to send some sort of calculation and logic which can be done in user mode out of kernel, so the minifilter needs to be able to ask user-mode for some service.