SYMPTOMS
When you install certain multimedia devices that use the Swenum.sys driver as their bus driver and as their enumerator, the multimedia devices may not start or may not operate correctly. The following problems may occur:
- The device may not appear in Multimedia Control Panel.
- The problem may occur if you right-click the .inf device information file, and then you click Install.
This problem does not occur if you use
Add Hardware in Control Panel to install the device.
CAUSE
The problems may occur because of the different ways that you can perform the installation. You can perform the installation in the following ways:
- If you right-click the .inf device information file, and then you click Install, the Swenum.sys driver is used as the bus driver and as the enumerator.
- If you use Add Hardware in Control Panel, the device becomes a root-enumerated device, and the Swenum.sys driver is not used as the enumerator.
A race condition exists between the Portcls.sys port class system driver and the Swenum.sys driver. That is why the problem occurs.
The Portcls.sys port class system driver receives the
IRP_MN_START_DEVICE request and then synchronously sends the
IRP_MN_START_DEVICE request to the Swenum.sys driver. The
START IRP request must return before the Portcls.sys port class system driver marks the device as "started." When the Swenum.sys driver receives the
IRP_MN_START_DEVICE request, the Swenum.sys driver finishes any pending I/O. This causes the Portcls.sys port class system driver to receive at least one
IRP_MJ_CREATE IRP request. On receipt of the
IRP_MJ_CREATE IRP request, the Portcls.sys port class system driver determines that the device is not yet started because the
START IRP request has not yet completed. Therefore, the
IRP_MJ_CREATE request fails.