Is there any robust mechanism of communicating between Windows host and Windows kernel driver working on a VM without involving such heavy mechanisms as TDI? Basically, ideal way would be to read/write some pre-mapped shared memory address. However, as far as I understand, this API is deprecated now.
So, the question is whether it is possible to communicate between VM and host without calling heavy kernel routines.
You can roll your own sockets and communicate from host to guest VM. I first did it rolling my own socket class, and then switched over to Boost::Asio sockets. I have a program that runs on the guest as a client, and my server runs on the host. The server sends commands to the client, that then initiates job tasks.
However, after some time running, VMWare seems to drop the socket connection on the client, even with KeepAlive settings set up, and me forcing heartbeat messages every so often to try to keep the socket alive. The same thing happened in my roll my own socket class, so is the reason I switched to Boost::Asio, but the same thing happens.
I'm going to now switch to VMCI to see if the socket will stay alive.