TAPE_PROCESS_COMMAND_ROUTINEコールバック関数 (minitape.h)
TAPE_PROCESS_COMMAND_ROUTINE は、IOCTL 要求のデバイス固有の側面を処理します。
構文
TAPE_PROCESS_COMMAND_ROUTINE TapeProcessCommandRoutine;
TAPE_STATUS TapeProcessCommandRoutine(
[in, out] PVOID MinitapeExtension,
[in, out] PVOID CommandExtension,
[in, out] PVOID CommandParameters,
[in, out] PSCSI_REQUEST_BLOCK Srb,
[in] ULONG CallNumber,
[in, optional] TAPE_STATUS StatusOfLastCommand,
[in, out] PULONG RetryFlags
)
{...}
パラメーター
[in, out] MinitapeExtension
ドライバー固有のミニテープ拡張機能へのポインター。 これは、ミニクラス ドライバーが初期化時にミニテープ拡張機能を要求しなかった場合、null されます。
[in, out] CommandExtension
コマンド拡張機能へのポインター。 これは、ミニクラス ドライバーが初期化時にコマンド拡張機能を要求しなかった場合、null されます。
[in, out] CommandParameters
TAPE_CREATE_PARTITION 構造体を含む呼び出し元によって割り当てられたバッファーへのポインター。
[in, out] Srb
テープ クラス ドライバーによって割り当てられ、部分的に入力された SRB へのポインター。 TAPE_PROCESS_COMMAND_ROUTINE は、SRB の CDB に入力する必要があります。
- Cdb - コマンドの SCSI CDB へのポインター。 TapeClassZeroMemory を使用して CDB をクリアしてから入力します。
- CdbLength - CDB 内のバイト数を指定します。
- DataBuffer - 転送するデータ バッファーへのポインター。 TapeClassAllocateSrbBuffer を使用して、DataTransferLength 以上の長さの DataBuffer割り当てます。
- DataTransferLength - SRB で転送するバイト数を指定します。 このメンバーは、TapeClassAllocateSrbBuffer によって設定されます。
- TimeOutValue - このコマンドのタイムアウト値を指定し、テープ クラス ドライバーのデバイス拡張機能の既定のタイムアウト値をオーバーライドします。
- SrbFlags - このコマンドのフラグを指定します。 SRB がテープ ドライブにデータを送信する場合、テープ ミニクラス ドライバーはSRB_FLAGS_DATA_OUT設定する必要があります。 SRB がテープ・ドライブからデータを要求している場合、またはコマンドによってデータが転送されていない場合、このメンバーはゼロにすることができます。
[in] CallNumber
特定のテープ コマンドを処理するために TAPE_PROCESS_COMMAND_ROUTINE が呼び出された回数を指定します。 CallNumber は、このルーチンが初めて呼び出されるときに 0 になり、その後の呼び出しごとにインクリメントされ、ミニクラス ドライバーがコマンドが完了したことを示す TAPE_STATUS 値が返されます。
[in, optional] StatusOfLastCommand
最後のコマンドの状態を指定します。 特定の要求を処理する TAPE_PROCESS_COMMAND_ROUTINE の最初の呼び出しでは、StatusOfLastCommand TAPE_STATUS_SUCCESS。 後続の呼び出しでは、StatusOfLastCommand はTAPE_STATUS_SUCCESSか、エラーが発生し、前の呼び出しで RetryFlags でテープ ミニクラス ドライバー セットがRETURN_ERRORS場合はエラー状態になります。
[in, out] RetryFlags
テープ デバイスがエラーを報告するときにテープ クラス ドライバーが実行する必要があるアクションを指定する変数へのポインター。
下位ワードは、SCSI コマンド障害が発生した場合に実行する再試行回数を指定します。 既定値は 0 (再試行なし) です。
高次ワードには、エラーが発生した場合にテープ クラス ドライバーが制御を返す方法を指定するフラグが含まれています。
- RETURN_ERRORSとIGNORE_ERRORSがクリア (既定値) の場合、テープ クラス ドライバーは元の要求元にエラー状態を返します。
- ミニクラス ドライバーがRETURN_ERRORSを設定する場合、テープ クラス ドライバーは、StatusOfLastCommand エラー状態に設定された TAPE_PROCESS_COMMAND_ROUTINE を呼び出します。
- ミニクラス ドライバーがIGNORE_ERRORSを設定する場合、テープ クラス ドライバーは失敗の状態を成功に変換し、StatusOfLastCommand 成功に設定された TAPE_PROCESS_COMMAND_ROUTINE を呼び出します。
戻り値
リターン コード | 形容 |
---|---|
|
SRB が入力され、ターゲット デバイスに送信する準備ができていることをテープ クラス ドライバーに示します。 既定では、テープ クラス ドライバーは、SRB が成功した場合にのみ TAPE_PROCESS_COMMAND_ROUTINE 再び呼び出します。 ミニクラス ドライバーは、TAPE_PROCESS_COMMAND_ROUTINEから戻る前 RetryFlags を設定することで、既定の動作を変更できます。 |
|
テープ デバイスに SRB を送信せずに、CallNumber インクリメントし、TAPE_PROCESS_COMMAND_ROUTINE を再度呼び出すようテープ クラス ドライバーに指示します。 |
|
テープ クラス ドライバーに、TEST UNIT READY コマンドの SRB を入力し、SRB をデバイスに送信するように指示します。 |
|
その他のリターン コードは、コマンドが完了したことをテープ クラス ドライバーに示し、成功、失敗、または警告を示します。 このルーチンに指定できる完了戻り値は次のとおりですが、これらに限定されません。
|
備考
このコールバック プレースホルダーには、次の関数を割り当てることができます。
CreatePartition の
CreatePartition 、IOCTL_TAPE_CREATE_PARTITION 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 CreatePartition は、テープ クラス ドライバーによって渡された SRB 内の CDB を埋めることで、テープ上にパーティションを作成します。 通常、パーティションを作成するには、操作を完了するために一連の SRB が必要です。 CreatePartition 指定された SRB を入力して返した後、テープ クラス ドライバーは SRB をターゲット デバイスに送信し、SRB の結果と RetryFlags の値に応じて、TapeMiniCreatePartition 再度呼び出します。CreatePartition は、テープ クラス ドライバーに戻る前に、SRB で次のメンバーを入力する必要があります。
テープ ミニクラス ドライバーがミニテープ拡張機能にパーティション情報を格納する場合は、CreatePartition 、TAPE_STATUS_SUCCESSを使用してテープ クラス ドライバーに戻る前に拡張機能を更新します。
消去
消去 は、IOCTL_TAPE_ERASE 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 消去 は、テープ クラス ドライバーによって渡された SRB の CDB に入力してテープを消去します。 テープを消去するには、通常、操作を完了するために 1 つの SRB が必要です。 Erase が SRB に入力されて返されると、テープ クラス ドライバーは SRB をデバイスに送信し、SRB の結果と RetryFlags の値に応じて、Erase を再度呼び出します。 消去 TAPE_STATUS_SUCCESSを返します。GetDriveParameters の
GetDriveParameters は、IOCTL_TAPE_GET_DRIVE_PARAMS 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 GetDriveParameters は、テープ クラス ドライバーによって渡された SRB の CDB に入力することで、テープ ドライブのパラメーターを取得します。 通常、ドライブ パラメーターを取得するには、操作を完了するために一連の SRB が必要です。 GetDriveParameters が特定の SRB に入力して戻ると、テープ クラス ドライバーは SRB をターゲット デバイスに送信し、SRB の結果と RetryFlags の値に応じて、GetDriveParameters を再度呼び出します。GetMediaParameters の
GetMediaParameters は、IOCTL_TAPE_GET_MEDIA_PARAMS 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 GetMediaParameters は、テープ クラス ドライバーによって渡された SRB 内の CDB に入力することで、テープ メディア パラメーターを取得します。 通常、メディア パラメーターを取得するには、操作を完了するために複数の SRB が必要です。最初にテープ クラス ドライバーがルーチンを呼び出TAPE_STATUS_CHECK_TEST_UNIT_READY返すことによって、ミニクラス ドライバーが要求するテスト ユニットから始まります。GetMediaParameters 特定の SRB を入力して返した後、テープ クラス ドライバーは SRB をデバイスに送信し、SRB の結果と RetryFlags の値応じて、GetMediaParameters をもう一度呼び出します。
GetMediaTypes の
GetMediaTypes は、IOCTL_STORAGE_GET_MEDIA_TYPES_EX 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 GetMediaTypes は、テープ クラス ドライバーによって渡された SRB の CDB に入力することで、テープ デバイスでサポートされているメディアの種類に関する情報を取得します。 通常、メディアの種類を取得するには、操作を完了するために複数の SRB が必要です。最初にテープ クラス ドライバーがルーチンを呼び出す際に、ミニクラス ドライバーがTAPE_STATUS_CHECK_TEST_UNIT_READY返して要求するテスト ユニットから始まります。getPosition の
GetPosition は、IOCTL_TAPE_GET_POSITION 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 GetPosition は、テープ クラス ドライバーによって渡された SRB 内の CDB を埋めることで、テープの位置を読み取ります。 通常、テープの位置を読み取るには、操作を完了するために複数の SRB が必要です。多くの場合、最初にテープ クラス ドライバーがルーチンを呼び出TAPE_STATUS_CHECK_TEST_UNIT_READY返すことによってミニクラス ドライバーが要求するテスト ユニットから始まります。GetStatus の
GetStatus は、IOCTL_TAPE_GET_STATUS 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 GetStatus は、テープ デバイスの状態を読み取ります。通常は、テープ クラス ドライバーにテスト ユニットの準備完了コマンドを発行するように指示します。デバイスが (ミニクラス ドライバーが TapeMiniTapeError ルーチンで処理するエラーとしてクリーニングの必要性を報告するのではなく ) ドライブが意味のあるデータをクリーニングする必要があるかどうかを示す場合、GetStatus は、テープ クラス ドライバーによって渡された SRB 内の CDB を埋めて、感覚データを取得します。 必要に応じて、TAPE_STATUS_REQUIRES_CLEANINGを返します。
準備
準備 は、IOCTL_TAPE_PREPARE 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 Prepare は、テープ クラス ドライバーによって渡された SRB 内の CDB を入力してテープを準備します。 デバイスが要求された操作をサポートしている場合、テープを準備するには通常、1 つの SRB が必要です。 準備 が SRB に入力されて返された後、テープ クラス ドライバーは SRB をデバイスに送信し、SRB の結果と RetryFlags の値に応じて、準備 を再度呼び出します。SetDriveParameters
SetDriveParameters は、IOCTL_TAPE_SET_DRIVE_PARAMS 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 SetDriveParameters は、テープ クラス ドライバーによって渡された SRB 内の CDB を埋めることで、テープ デバイスのパラメーターを設定します。 通常、パラメーターの設定には、操作を完了するための一連の SRB が含まれます。 SetDriveParameters 指定された SRB を入力して返した後、テープ クラス ドライバーは SRB をデバイスに送信し、SRB の結果と RetryFlags の値に応じて、SetDriveParameters を再度呼び出します。SetMediaParameters の
SetMediaParameters は、IOCTL_TAPE_SET_MEDIA_PARAMS 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 SetMediaParameters は、テープ クラス ドライバーによって渡された SRB の CDB を埋めることで、テープのブロック サイズを設定します。 通常、ブロック サイズを設定するには、複数の SRB が操作を完了する必要があります。最初にテープ クラス ドライバーがルーチンを呼び出す際に、ミニクラス ドライバーがTAPE_STATUS_CHECK_TEST_UNIT_READY返して要求するテスト ユニットから開始します。SetMediaParameters 指定された SRB を入力して返した後、テープ クラス ドライバーは SRB をデバイスに送信し、SRB の結果と RetryFlags の値に応じて、SetMediaParameters を再度呼び出。
SetPosition
SetPosition は、IOCTL_TAPE_SET_POSITION 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 SetPosition は、テープ クラス ドライバーによって渡された SRB 内の CDB を埋めることで、テープの位置を設定します。 通常、位置を設定するには 1 つの SRB が必要です。 SetPosition が SRB に入力されて返されると、テープ クラス ドライバーは SRB をデバイスに送信し、SRB の結果と RetryFlags の値に応じて、SetPosition 再度呼び出します。 SetPosition TAPE_STATUS_SUCCESSを返します。WriteMarks
WriteMarks は、IOCTL_TAPE_WRITE_MARKS 要求のデバイス固有の側面を処理します。 このルーチンは必須です。 WriteMarks は、テープ クラス ドライバーによって渡された SRB 内の CDB を埋めることで、テープにマークを書き込みます。 通常、マークを書き込むには、操作を完了するために 1 つの SRB が必要です。 WriteMarks が SRB に入力されて返されると、テープ クラス ドライバーは SRB をデバイスに送信し、SRB の結果と RetryFlags の値に応じて、WriteMarks を再度呼び出します。 WriteMarks TAPE_STATUS_SUCCESSを返します。PreProcessReadWrite の
PreProcessReadWrite は、読み取りおよび書き込み操作の前に必要なデバイス固有の操作を実行する、省略可能な特殊な目的のルーチンです。 ほとんどのテープ ミニクラス ドライバーでは、このルーチンは必要ありません。 PreProcessReadWrite ルーチンのアクティビティは、デバイス固有です。 このルーチンは、クラス ドライバーによって渡される情報を使用して、読み取りと書き込みの特別な前処理を実装できます。 ドライブの機能が制限されている場合、ドライバーは、たとえば、コヒーレントな状態を維持するために、このルーチンが必要な場合があります。テープ ミニクラス ドライバーは、DriverEntry ルーチンから TapeClassInitialize に渡すTAPE_INIT_DATA_EX構造体で、このルーチンの非NULL エントリ ポイントを設定する場合、テープ クラス ドライバーは、テープ デバイスでの各読み取りおよび書き込み操作の前にそれを呼び出します。 クラス ドライバーは、このルーチンから情報を返す必要はありません。
WMIOperations
WMIOperations は、テープ クラス ドライバーからのすべての WMI 呼び出しの共通エントリ ポイントです。 WMI をサポートするミニドライバーは、ミニドライバーの TAPE_PROCESS_COMMAND_ROUTINE ルーチンを指すように構造体TAPE_INIT_DATA_EXで、WMIOperations 関数ポインター メンバーを設定する必要があります。 ミニドライバーは、TapeClassInitializeを呼び出す前に、DriverEntry ルーチンでこれを行う必要があります。 ミニドライバーが WMI 操作をサポートしていない場合は、TapeWMIOperations フィールドを NULL 設定する必要があります。テープ クラス ドライバーは、TAPE_WMI_OPERATIONS構造体のメンバーに値を割り当て、CommandParameters パラメーターでミニドライバーの WMIOperations ルーチンにこの構造体を渡します。 他のミニドライバー ルーチンと同様に、WMIOperations は、指定された WMI メソッドを実装するために必要な SCSI 要求ブロック (SRB) とコマンド記述子ブロック (CDB) を塗りつぶし、作成、初期化し、テープ クラス ドライバーに制御を返します。 その後、テープ クラス ドライバーはポート ドライバーを呼び出して要求を実行します。
ミニドライバーは、TAPE_WMI_OPERATIONS構造体の DataBuffer メンバーが指すバッファー内の WMI データを返します。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | minitape.h (Minitape.h を含む) |
関連項目
TapeClassAllocateSrbBuffer の
TapeClassZeroMemory の