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之前,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 生成第二个 SRB,其中包含 CDB 以传输上一 SRB 的结果。 (对于 SCSI 更改程序,微型类驱动程序使用 SCSI 命令 REQUEST VOLUME ELEMENT ADDRESS。)

ChangerQueryVolumeTags 然后在 Irp填充 READ_ELEMENT_ADDRESS_INFO 结构 ->AssociatedIrp.SystemBuffer,指示传输卷标记信息的元素数以及每个元素的信息。

填充系统缓冲区后,ChangerQueryVolumeTags 将 I/O 状态块中的 信息 字段设置为返回到 changer 类驱动程序之前写入缓冲区的字节数。

要求

要求 价值
目标平台 桌面
标头 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