Screen goes black upon receiving message from driver [using FilterGetMessage]?

Have you considered using an asynchronous messaging model? I would, for example, just build a message and stick it in a queue. KeInsertQueue works well, though I found the annotation in the WDK on Windows 8 is broken but easily fixed. Then have a thread or two that pick the messages out of the queue and send them to the user mode service. The only reason to stick with a synchronous model is if you need an answer back. FltSendMessage, however, cannot be used to send from completion routines (elevated IRQL) AND it blocks the calling thread until a UM thread picks up the message. Blocking kernel operations is best avoided when possible.

So using an asynchronous message queue, you wouldn’t be blocking things and you should be able to progress.

Tony
OSR