Avc.sys 사용
Windows 가Avc.sys로드하고 초기화한 후 Avc.sys 표준 AV/C 단위 및 하위 단위 명령을 사용하여 IEEE 1394 버스에 연결된 모든 AV/C 디바이스(컴퓨터가 가상 AV/C 단위인 경우 가상 하위 단위 포함)에서 활성 하위 단위를 검색합니다. 그런 다음Avc.sys 모든 활성 하위 단위에 대한 디바이스 ID(식별자)를 생성합니다. 다음으로 ,Avc.sys PnP(표준 플러그 앤 플레이) 메커니즘을 사용하여 각 하위 단위에 적절한 하위 단위 드라이버를 로드합니다. 로드할 하위 단위 드라이버는Avc.sys생성되고 AV/C 디바이스 ID에 설명된 대로 하위 단위 드라이버를 설치하는 INF 파일 및 하위 단위의 디바이스 식별자를 기반으로 선택됩니다. 디바이스 식별자는 하위 단위의 SubunitType 및 SubunitID 필드와 함께 AV/C 디바이스의 단위 정보에서 생성됩니다. 하위 단위를 지원하는 드라이버는 공급업체별 드라이버이거나 하위 단위 유형에 대한 제네릭일 수 있습니다. 예를 들어 대부분의 DV 캠코더에 대한 하위 단위 드라이버는 Microsoft에서 제공하는 Msdv.sys입니다.
하위 단위 드라이버는 WDM 아키텍처를 기반으로 하는 모든 드라이버에서 사용하는 표준 IRP 기반 메커니즘 을 통해Avc.sys 통신합니다. 하위 단위 드라이버는 AV/C 프로토콜 드라이버에 IRP를 할당하고 AV/C 프로토콜 드라이버로 전송하여 AV/C 하위 구성 요소와 통신합니다 .Avc.sys. I/O 요청을 하려면 Microsoft WDK(Windows 드라이버 키트)와 함께 제공되는 헤더 파일 Avc.h를 포함합니다.
하위 단위 드라이버는 Avc.sys처리할 IRP를 할당하고 초기화합니다. 하위 단위 드라이버는 IRP의 Parameters.DeviceIoControl.IoControlCode 멤버를 원하는 AV/C 작업에 해당하는 IOCTL로 설정합니다.
Avc.sys 지원하도록 로드된 하위 단위 드라이버 스택(피어 또는 가상)에 따라 두 디바이스 인터페이스 중 하나를 등록합니다. 이러한 인터페이스는 하위 단위 드라이버, 기타 드라이버 및 애플리케이션에서 사용할 Avc.sys 내보내는 기능을 정의합니다. 그런 다음Avc.sys 드라이버의 PnP 상태에 따라 인터페이스의 상태를 사용하거나 사용하지 않도록 변경합니다.
Avc.sys 외부 AV/C 하위 단위(피어 스택)에 대한 지원을 제공하기 위해 로드된 경우 GUID_AVC_CLASS 새 instance 등록합니다. 이 인터페이스는 다음 IOCTL(I/O 컨트롤) 코드만 지원합니다.
IOCTL_AVC_CLASS 차례로 여러 함수 코드를 지원합니다. 피어 하위 단위를 지원하는 Avc.sys 인스턴스의 자식 드라이버는 부모 디바이스 개체를 통해 이 인터페이스에 액세스할 수 있도록 보장됩니다.
GUID_AVC_CLASS 인터페이스는 모든 IOCTL_AVC_CLASS 함수 코드를 지원하지만, 일부는 각 함수에 대한 참조 페이지에 설명된 대로 사용 제한이 있습니다.
Avc.sys 가상 AV/C 하위 단위(가상 스택)에 대한 지원을 제공하기 위해 GUID_VIRTUAL_AVC_CLASS 새 instance 등록합니다. 이 인터페이스는 4개의 IOCTL(I/O 컨트롤) 코드를 지원합니다.
GUID_VIRTUAL_AVC_CLASS 인터페이스는 모든 IOCTL_AVC_CLASS 함수 코드를 지원하지 않습니다. 각 개별 함수 코드에 대한 참조 페이지는 Avc.sys의 GUID_VIRTUAL_AVC_CLASS 인스턴스에 대해 지원되는지 여부를 지정합니다.
IOCTL_AVC_CLASS IRP는 IRP_MJ_INTERNAL_DEVICE_CONTROL 통해 커널 모드(일반적으로 드라이버 간 통신용)에서만 지원됩니다. 따라서 애플리케이션은 IOCTL_AVC_CLASS IOCTL 코드에서 제공하는 함수에 직접 액세스할 수 없습니다.
마지막 세 개의 IOCTL 코드는 IRP_MJ_DEVICE_CONTROL 통해 커널 모드와 사용자 모드 모두에서 지원됩니다. 즉, 애플리케이션은 이러한 IOCTL을 Avc.sys직접 보낼 수 있습니다.
IOCTL_AVC_CLASS IOCTL 코드는 항상 수행할 AV/C 작업을 자세히 설명하는 IRB(I/O 요청 블록)를 동반해야 합니다. IRB 헤더에는 나머지 IRB의 구조를 결정하는 함수 번호가 포함되어 있습니다. IRB 구조와 크기는 함수에 따라 달라집니다. Avc.sys 두 개의 사용자 지정 IRB를 사용합니다.
하위 단위 드라이버에서 사용해야 하는 IRB 선택은 원하는 함수에 따라 달라집니다. Avc.sys 지원하는 IOCTL_AVC_CLASS 함수 코드에 대한 자세한 내용은 AV/C 프로토콜 드라이버 함수 코드를 참조하세요.
하위 단위 드라이버에서 사용하는 기본 AV/C 함수는 AVC_COMMAND_IRB 구조를 사용하는 AVC_FUNCTION_COMMAND. AVC_FUNCTION_COMMAND AV/C 요청을 보내고 해당 AV/C 응답을 받습니다. AV/C 명령 빌드에 대한 세부 정보는 Avc.sys에서 처리되지만 하위 단위 드라이버는 각 명령의 AV/C opcode 및 피연산자를 제공해야 합니다.