IEEE 1394 드라이버 스택
다음 다이어그램에서는 새로운 1394 버스 드라이버와 Microsoft에서 지원하는 1394 클라이언트 드라이버가 있는 IEEE 1394 드라이버 스택을 보여 줍니다.
IEEE 1394 버스 드라이버에 연결하는 디바이스의 클라이언트 드라이버는 IEEE 1394 드라이버 스택 위에 있습니다. 버스 드라이버는 IEEE 1394 버스에 하드웨어 독립적 인터페이스를 제공합니다. 디바이스 드라이버는 IEEE 1394 버스 드라이버에서 처리하는 IRP를 전송하여 디바이스와 통신합니다. Windows 7 이전에는 버스 드라이버가 포트 드라이버(1394bus.sys)와 마더보드의 호스트 컨트롤러(ochi1394.sys)를 위한 기본 미니포트 드라이버의 조합이었습니다. Windows 7 이상 버전에서는 레거시 포트/미니포트 버스 드라이버가 KMDF(커널 모드 드라이버 프레임워크)를 사용하여 구현되는 모놀리식 IEEE 1394 버스 드라이버인 1394ohci.sys 대체됩니다. 1394ohci.sys 버스 드라이버는 레거시 1394 버스 드라이버와 완전히 이전 버전과 호환됩니다. 새 버스 드라이버와 레거시 1394 버스 드라이버 간의 동작에서 알려진 몇 가지 차이점에 대한 자세한 내용은 Windows 7의 IEEE 1394 버스 드라이버를 참조하세요.
다음 그림에서는 레거시와 새로운 1394 버스 드라이버 간의 관계를 보여 줍니다.
버스에 연결된 디바이스에 명령을 실행하려면 드라이버가 제어 코드IOCTL_1394_CLASS 있는 IRP_MJ_DEVICE_CONTROL IRP를 실행합니다. 드라이버는 IEEE 1394 IRB(I/O 요청 블록)에서 매개 변수를 패키지하고 IRP의 Parameters.Others.Argument1 멤버에 포인터를 전달합니다. IRB의 FunctionNumber 멤버는 작업 유형을 결정하고 u 멤버는 작업을 설명합니다. 버스 드라이버는 IOCTL_1394_CLASS IRP를 사용하여 버스와 호스트 컨트롤러 모두에 인터페이스를 제공합니다.
IRB 구조에는 각 버스 요청 및 요청별 매개 변수에 적용되는 매개 변수가 포함되어 있습니다. IRB의 u 멤버에는 요청 유형당 하나씩 데이터 구조의 공용 구조에 요청별 매개 변수가 포함됩니다.
정상 작동 중에 드라이버는 일반 I/O 요청(예: IRP_MJ_READ)을 받고, 적절한 IEEE 1394 작업으로 변환하고, IOCTL_1394_CLASS 통해 해당 작업을 디바이스로 디스패치합니다.