Windows System Software -- Consulting, Training, Development -- Unique Expertise, Guaranteed Results
The free OSR Learning Library has more than 50 articles on a wide variety of topics about writing and debugging device drivers and Minifilters. From introductory level to advanced. All the articles have been recently reviewed and updated, and are written using the clear and definitive style you've come to expect from OSR over the years.
Check out The OSR Learning Library at: https://www.osr.com/osr-learning-library/
I have a minifilter and a simple C++ client that connects to this minifilter over a port. The client receives and sends message to minifilter using FilterGetMessage
and FilterSendMessage
. The client receives a message from the minifilter, performs tasks foo
, updates the minifilter about the status by calling FilterSendMessage
and waits for another message. Things were working fine.
Recently, I moved the function (foo
) that calls FilterSendMessage
to a detached thread e.g. std::thread(foo, ...).detach()
. Now when foo
is called by the client, FilterSendMessage
blocks indefinitely. I also don't see the log message from MessageNotifyCallback. I am assuming that calling foo
from a detached thread has caused this but I can't be sure.
foo
communicates over the network and can have quite large latency. I don't want to wait for it to finish before calling the FilterGetMessage again. Hence, it was called from a detached thread.
So the question is, is it possible to call FilterSendMessage
from a detached thread? If not, I'd like to know the details. Docs don't mention much. If yes, then I need to debug more.
PS: I am very new to the Win32 platform. Mostly a Linux developer.
Upcoming OSR Seminars | ||
---|---|---|
OSR has suspended in-person seminars due to the Covid-19 outbreak. But, don't miss your training! Attend via the internet instead! | ||
Internals & Software Drivers | 7 February 2022 | Live, Online |
Kernel Debugging | 21 March 2022 | Live, Online |
Developing Minifilters | 23 May 2022 | Live, Online |
Writing WDF Drivers | 12 September 2022 | Live, Online |
Comments
There should be no problem calling FilterSendMessage from a thread... either attached or detached.
I'd look elsewhere for the underlying probem.
Peter
Peter Viscarola
OSR
@OSRDrivers
Thank you Peter for your reply.
If FilterSendMessage and FilterGetMessage are called from the same thread, (detached or attached), everything works fine. When each of them has their separate threads, then one one blocks indefinitely.
Found the issue.
When I changed
to
It worked fine! I think I vaguely understand what could be the issue: Capturing by value worked but capturing by reference didn't.