드라이버가 IEEE 1394 가상 디바이스를 관리하는 방법

상위 수준 드라이버 및 사용자 모드 서비스는 가상 1394 디바이스를 관리하는 IOCTL_IEEE1394_API_REQUEST 보냅니다.

드라이버는 IEEE1394_VDEV_PNP_REQUEST 구조에서 디바이스 ID 및 인스턴스 ID를 제공합니다.

1394 버스에 가상 디바이스를 노출하기 위해 에뮬레이션 드라이버는 다음 단계를 사용합니다.

  1. 시스템의 IEEE 1394 구성 ROM에 단위 디렉터리를 추가하기 위해 IRB의 u.SetLocalHostProperties.nLevel 멤버가 SET_LOCAL_HOST_PROPERTIES_MODIFY_CROM 설정된 버스 드라이버에 REQUEST_SET_LOCAL_HOST_PROPERTIES 요청을 보냅니다. 또한 이 요청은 에뮬레이트된 디바이스 기능을 노출하기 위해 다른 필요한 구성 데이터를 구성 ROM에 추가합니다. 에뮬레이션 드라이버가 연결된 가상 PDO를 사용하여 요청을 보내야 합니다.

  2. 버스 재설정을 실행하여 버스에 있는 1394개 노드에 시스템 구성 ROM이 변경되었음을 알릴 수 있습니다.

디바이스 제거

가상 디바이스의 PDO(물리적 디바이스 개체)를 제거하는 방법에는 두 가지가 있습니다.

  1. 디바이스를 제거하는 표준 PnP(플러그 앤 플레이) 방법입니다. 드라이버는 가상 디바이스에 IRP_MN_REMOVE_DEVICE 요청을 보냅니다.

    I/O 스택에는 다음 값이 포함되어야 합니다.

    • MajorFunction = IRP_MJ_PNP
    • MinorFunction = IRP_MN_REMOVE_DEVICE
  2. 형식의 IRP(I/O 요청 패킷) IOCTL_IEEE1394_API_REQUEST: 드라이버는 가상 디바이스에 IRP_MJ_DEVICE_CONTROL 요청을 보냅니다.

    I/O 스택에는 다음 값이 포함되어야 합니다.

    IRP에는 다음 값이 포함되어야 합니다.

첫 번째 방법(IRP_MN_REMOVE_DEVICE)은 디바이스를 제거하지만 디바이스가 영구적이면 다음에 컴퓨터가 시작될 때 복원됩니다. 두 번째 메서드(IEEE1394_API_REMOVE_VIRTUAL_DEVICE)는 디바이스를 완전히 제거하므로 다시 부팅할 때 더 이상 유지되지 않습니다. 다음에 컴퓨터가 시작될 때 디바이스는 복원되지 않습니다.

상위 수준 드라이버 또는 사용자 모드 서비스는 가상 디바이스가 있는 일반적인 PnP 메커니즘을 통해 확인할 수 있습니다. 이 메커니즘은 가상 드라이버의 INF 파일에 제공된 클래스 GUID를 사용합니다.