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 am a fairly experienced Windows device driver developer (NDIS, PCI, USB, WDM, KMDF) but I have been away from any heavy-duty work for a few years, and I am now involved in a new project. We are currently in the requirements/design phase and I wanted to run some things by this group - lest I start diverging down a not-so-useful path! - as this forum has proved invaluable in the past. Also, there may have been some advancements in NDIS & WDF in recent years of which I may not be aware, of which I may want to take advantage.
Currently there is a proprietary protocol/data controller software module (let's call this PDC) that interfaces directly with hardware for sending/receiving packets out on network. There is an antiquated GUI application that interfaces to this PDC via socket interface over TCP/IP. The need exists to extend the functionality by implementing a virtual NIC (VNIC) that can be used by that and other network applications, and that also provides the ability to bridge different network interfaces. Network packets from/to that VNIC would then be routed to/from the PDC.
The problem is that the PDC is currently a user-mode application, and we would like to keep that in user-mode as much as possible.
Looking at similar solutions for ideas, e.g. OpenVPN and TAP driver, it seems that one way that this is accomplished is for the user mode process to send down read & write requests that are "pended", and completed once kernel component can complete them. So when the VNIC has packets to transmit, it would copy these to previously-received buffers from the PDC to complete the send request. Similarly, when the PDC received data, it would need to indicate those to VNIC (somehow?) to be returned to GUI application.
Is this the most feasible scheme for this? It seems overly-complicated for what needs to be accomplished. In essence: what is the best way to move network-type data back and forth from kernel and user mode?
Thanks in advance!
|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!|
|Writing WDF Drivers||7 Dec 2020||LIVE ONLINE|
|Internals & Software Drivers||25 Jan 2021||LIVE ONLINE|
|Developing Minifilters||8 March 2021||LIVE ONLINE|