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
changer がボリューム タグ情報の取得をサポートしていない場合、ChangerQueryVolumeTags はSTATUS_INVALID_DEVICE_REQUESTを返します。
注釈
このルーチンは、SEND VOLUME TAGS と REQUEST VOLUME ELEMENT ADDRESS という 2 つの SCSI コマンドの機能を組み合わせたものです。 このルーチンは必須です。
ChangerQueryVolumeTags は、 指定された要素のボリューム タグ情報を取得します。 また、変更子がこれらの操作をサポートしている場合は、ボリューム タグ情報を定義またはクリアするためにも使用できます。 GET_CHANGER_PARAMETERS構造体の Features0 メンバーの CHANGER_VOLUME_IDENTIFICATION フラグは、変更子がこの機能をサポートしているかどうかを示します。
changer クラス ドライバーは、 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 を使用して 2 つ目の SRB をビルドし、前の SRB の結果を転送します。 (SCSI 変更機能の場合、ミニクラス ドライバーは SCSI コマンド REQUEST VOLUME ELEMENT ADDRESS を使用します)。
ChangerQueryVolumeTags は、ボリューム タグ情報が転送された要素の数と各要素の情報を示す Irp-AssociatedIrp.SystemBuffer> のREAD_ELEMENT_ADDRESS_INFO構造体を入力します。
システム バッファーを入力した後、 ChangerQueryVolumeTags は、I/O 状態ブロックの Information フィールドを、changer クラス ドライバーに戻る前にバッファーに書き込まれたバイト数に設定します。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | mcd.h (Mcd.h、Ntddchgr.h を含む) |
IRQL | PASSIVE_LEVEL |