Some services alter their behavior depending on whether the virtual machine is running in 16-bit or 32-bit protected mode. The VMM determines whether a virtual machine is in 16-bit or 32-bit protected mode by recording whether the virtual machine entered protected mode (via the DPMI services) as a 16-bit or 32-bit application. It does not check whether the current CS is a 16-bit or 32-bit code segment. This means that if a 16-bit DPMI client happens to create a 32-bit code segment and switch to it, the VMM will still treat it like a 16-bit application and use only the low word of the extended registers.
For compatibility reasons, the Windows 95 system virtual machine executes as a 16-bit DPMI client. That implies that every Win32 application is considered a 16-bit application by the VMM. As a result, Win32 applications cannot communicate with VxDs by the same means that 16-bit Windows applications can (software interrupts, callbacks, VxD services, etc). Win32 applications must use the DeviceIOControl interface to communicate with VxDs that support device I/O calls.