ChangerQueryVolumeTags 使用 IOCTL_CHANGER_QUERY_VOLUME_TAGSIOCTL 程式代碼處理裝置控制 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旗標會指出變更器是否支援這項功能。
changer 類別驅動程式會先檢查 I/O 堆疊位置中的輸入和輸出緩衝區長度,再呼叫 ChangerQueryVolumeTags。 Irp->SystemBuffer 指向 CHANGER_SEND_VOLUME_TAG_INFORMATION 結構,指出元素、要執行的作業,以及指定要搜尋或設定之磁碟區標識符的範本。
ChangerQueryVolumeTags 會先檢查動作程式代碼是否有不支援的作業,並針對不支援的作業傳回STATUS_INVALID_DEVICE_REQUEST。 接下來,它會使用CDB建置 SRB,以指出起始元素的裝置特定位址,並將它傳送至系統埠驅動程式,並將磁碟區標識符範本傳遞為參數。 (若為 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 狀態區塊中 資訊 欄位設定為寫入緩衝區的位元組數,然後再返回 changer 類別驅動程式。
要求
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | mcd.h (包括 Mcd.h、 Ntddchgr.h) |
IRQL | PASSIVE_LEVEL |