The IEEE 1394 Driver Stack
The following diagram illustrates the IEEE 1394 driver stack with the new 1394 bus driver and the Microsoft-supported 1394 client drivers.
A client driver for a device that connects to the IEEE 1394 bus driver sits on top of the IEEE 1394 driver stack. The bus driver provides a hardware-independent interface to the IEEE 1394 bus. The device driver communicates with the device by sending IRPs, which are processed by the IEEE 1394 bus driver. Before Windows 7, the bus driver was a combination of a port driver (1394bus.sys) and a primary miniport driver for the motherboard's host controller (ochi1394.sys). In Windows 7 and later versions, the legacy port/miniport bus drivers are replaced by 1394ohci.sys, a monolithic IEEE 1394 bus driver that is implemented by using the kernel-mode driver framework (KMDF). The 1394ohci.sys bus driver is fully backward compatible with the legacy 1394 bus drivers. For more information about some known differences in behavior between the new bus driver and the legacy 1394 bus drivers, see IEEE 1394 Bus Driver in Windows 7.
The following illustration shows the relationship between the legacy and the new 1394 bus drivers.
To issue commands to devices connected to the bus, drivers issue the IRP_MJ_DEVICE_CONTROL IRP, with control code IOCTL_1394_CLASS. The driver packages the parameters in an IEEE 1394 I/O request block (IRB), and passes a pointer to it in the Parameters.Others.Argument1 member of the IRP. The FunctionNumber member of the IRB determines the type of operation, and the u member describes the operation. The bus driver uses the IOCTL_1394_CLASS IRP to present an interface to both the bus and the host controller.
The IRB structure contains parameters that apply to each bus request and request-specific parameters. The u member of the IRB contains the request-specific parameters, in a union of data structures, one per request type.
During normal operation, drivers receive ordinary I/O requests (such as IRP_MJ_READ), convert them to the appropriate IEEE 1394 operation, and dispatch that operation to the device through IOCTL_1394_CLASS.