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 的指针。

返回值

如果 changer 支持检索卷标记信息, 则 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 之前,changer 类驱动程序检查 I/O 堆栈位置中的输入和输出缓冲区长度。 Irp-SystemBuffer> 指向CHANGER_SEND_VOLUME_TAG_INFORMATION结构,该结构指示元素、要执行的操作,以及指定要搜索或设置的卷 ID 的模板。

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

另请参阅

、GET_CHANGER_PARAMETERS

CHANGER_ELEMENT

CHANGER_ELEMENT_STATUS

CHANGER_SEND_VOLUME_TAG_INFORMATION

ChangerGetElementStatus

READ_ELEMENT_ADDRESS_INFO