Windows 95 COM Enumerator

The COM enumerator does not call VCOMM to detect COM devices, rather it writes directly to the port. When called to enumerate a device on a COM port, COMENUM calls ACQUIRE_RESOURCE with ACQUIRE_NO_STEAL, so that it does not inadvertently interfere with another program using the port.

The COM enumerator always returns TRUE for RESOURCE_STEAL_REQUEST.

When it receives a RESOURCE_RETURN_NOTIFY, the enumerator resumes its watch COM device attach/detach on the port.

The COM enumerator never calls RELEASE_RESOURCE.

Windows 95 COM Driver (SERIAL.VXD)

SERIAL.VXD calls ACQUIRE_RESOURCE with ACQUIRE_STEAL. This will steal ports owned by VMs, if allowed by the user in Control Panel.

When it receives a RESOURCE_STEAL_REQUEST notification, SERIAL.VXD saves the state of the COM port and returns TRUE.

Unlike LPT.VXD, SERIAL.VXD does not periodically attempt to steal back the port by calling STEAL_RESOURCE. Rather, it does this in response to a call from VCOMM on behalf of the device's client. This still enables it to share a port with a VM.

MS-DOS Communications Applications

In Windows 3.1, it is common practice for users to share a modem between an MS-DOS application and Windows. For example, Terminal and ProComm/Plus can use a modem simultaneously, with VCD switching control silently back and forth based on an idle timeout on the VM.

Windows 95 continues to support this capability. When SERIAL.VXD is using a port and a VM attempts to access it, VCD sends RESOURCE_STEAL_REQUEST to SERIAL.VXD, which returns TRUE. The VM will use the port and then go idle on it. After this, the next call from Windows to use the port will cause SERIAL.VXD to call STEAL_RESOURCE, which succeeds because the VM has gone idle on the port.