VxD Support Within Wine

VxDs are a type of virtual driver that only exist in Windows 3.x and 9x.

VxDs live in a shared part memory that is shared will all processes. VxDs must be run with supervisory privileges as they do things like directly interact with hardware. In Intel terminology VxDs must be run in ring level 0 instead of the usual ring level 3.

VxDs are not supported by Wine because Linux, as well as most operating systems other than Windows 3.x and 9x, does not allow applications to run in supervisory mode. Also, the complex API set provided by Windows for VxDs makes VxD support difficult to implement.

One possible work around is to see if there is a Windows NT version of the application you would like to run since Windows NT does not support VxDs. If the executable you are running dynamically detects which version of Windows it is running in you can cause it to think it is running in Windows NT with:

$wine -winver nt40 yourapp

Apps that rely on VxDs to access hardware under 9x might possibly need NT device drivers under NT (direct hardware access by the application does not work under NT as well, of course); NT device drivers do not work under Wine either, for the same reasons as for VxDs.

Another possibility: if the interface between the VxD and the application is known, it would be possible to implement this interface from within Wine. In this case, the application would think it talks with the VxD, while it in fact talks with the implementation within Wine. Some interfaces provided by standard system VxDs are already implemented this way, and it's easy to add additional ones (always provided that the interface is known, of course).