ChangerQueryVolumeTags 함수(mcd.h)
ChangerQueryVolumeTags 는 IOCTL_CHANGER_QUERY_VOLUME_TAGS IOCTL 코드를 사용하여 디바이스 제어 IRP 의 디바이스별 측면을 처리합니다.
구문
NTSTATUS ChangerQueryVolumeTags(
[in] PDEVICE_OBJECT DeviceObject,
[in] PIRP Irp
);
매개 변수
[in] DeviceObject
변경자를 나타내는 디바이스 개체에 대한 포인터입니다.
[in] Irp
IRP에 대한 포인터입니다.
반환 값
변경기가 볼륨 태그 정보 검색을 지원하는 경우 ChangerQueryVolumeTags 는 시스템 포트 드라이버에서 반환하는 STATUS_XXX 값 또는 다음 값 중 하나를 반환합니다.
STATUS_SUCCESS
STATUS_INVALID_ELEMENT_ADDRESS
STATUS_INSUFFICIENT_RESOURCES
변경기가 볼륨 태그 정보 검색을 지원하지 않는 경우 ChangerQueryVolumeTags는 STATUS_INVALID_DEVICE_REQUEST 반환합니다.
설명
이 루틴은 두 SCSI 명령의 기능인 SEND VOLUME TAGS 및 REQUEST VOLUME ELEMENT ADDRESS를 결합합니다. 이 루틴은 필수입니다.
ChangerQueryVolumeTags는 지정된 요소에 대한 볼륨 태그 정보를 검색합니다. 또한 변경기가 이러한 작업을 지원하는 경우 볼륨 태그 정보를 정의하거나 지우는 데 사용할 수 있습니다. GET_CHANGER_PARAMETERS 구조체의 Features0 멤버에 있는 CHANGER_VOLUME_IDENTIFICATION 플래그는 변경기가 이 기능을 지원하는지 여부를 나타냅니다.
ChangerQueryVolumeTags를 호출하기 전에 변경자 클래스 드라이버는 I/O 스택 위치에서 입력 및 출력 버퍼 길이를 확인합니다. Irp-SystemBuffer>는 요소, 수행할 작업 및 검색하거나 설정할 볼륨 ID를 지정하는 템플릿을 나타내는 CHANGER_SEND_VOLUME_TAG_INFORMATION 구조를 가리킵니다.
ChangerQueryVolumeTags 는 먼저 지원되지 않는 작업에 대한 작업 코드를 확인하고 지원하지 않는 작업에 대한 STATUS_INVALID_DEVICE_REQUEST 반환합니다. 다음으로 시작 요소의 디바이스별 주소를 나타내기 위해 CDB를 사용하여 SRB를 빌드하고 시스템 포트 드라이버로 전송하여 볼륨 ID 템플릿을 매개 변수로 전달합니다. (SCSI 체인저의 경우 미니클래스 드라이버는 SCSI 명령 SEND VOLUME TAG를 사용합니다.)
첫 번째 SRB가 성공하면 ChangerQueryVolumeTags 는 CDB를 사용하여 두 번째 SRB를 빌드하여 이전 SRB의 결과를 전송합니다. (SCSI 체인저의 경우 미니클래스 드라이버는 SCSI 명령 REQUEST VOLUME ELEMENT ADDRESS를 사용합니다.)
그런 다음 ChangerQueryVolumeTags는 볼륨 태그 정보가 전송된 요소의 수와 각 요소에 대한 정보를 나타내는 Irp-AssociatedIrp.SystemBuffer>의 READ_ELEMENT_ADDRESS_INFO 구조를 채웁니다.
시스템 버퍼를 채운 후 ChangerQueryVolumeTags는 I/O 상태 블록의 정보 필드를 변경자 클래스 드라이버로 돌아가기 전에 버퍼에 기록된 바이트 수로 설정합니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 데스크톱 |
머리글 | mcd.h(Mcd.h, Ntddchgr.h 포함) |
IRQL | PASSIVE_LEVEL |