SPB_REQUEST_SEQUENCE_POSITION列挙 (spbcx.h)
SPB_REQUEST_SEQUENCE_POSITION列挙は、I/O 転送シーケンスの転送の一覧内の I/O 要求の位置を示します。
構文
typedef enum _SPB_REQUEST_SEQUENCE_POSITION {
SpbRequestSequencePositionInvalid,
SpbRequestSequencePositionSingle,
SpbRequestSequencePositionFirst,
SpbRequestSequencePositionContinue,
SpbRequestSequencePositionLast,
SpbRequestSequencePositionMax
} SPB_REQUEST_SEQUENCE_POSITION, *PSPB_REQUEST_SEQUENCE_POSITION;
定数
SpbRequestSequencePositionInvalid 内部使用専用です。 |
SpbRequestSequencePositionSingle 単一転送 I/O 要求。 この要求は、シーケンスの一部ではない読み取りまたは書き込み (IRP_MJ_READ または IRP_MJ_WRITE) 要求であるか、単一転送で構成されるシーケンスの IOCTL_SPB_EXECUTE_SEQUENCE I/O 制御要求です。 コントローラーは、転送を実行する前にターゲットを選択し、転送の完了後にターゲットを解放する必要があります。 |
SpbRequestSequencePositionFirst シーケンス内の最初の I/O 要求。 この要求は、シーケンスの開始を通知するロック (IOCTL_SPB_LOCK_CONTROLLER) I/O 制御要求の直後にある読み取りまたは書き込み要求です。 コントローラーは、この転送を実行する前にターゲットを選択し、転送が完了した後もターゲットを選択したままにする必要があります。 |
SpbRequestSequencePositionContinue シーケンスの途中にある I/O 要求。 この要求は、シーケンス内の最初の転送も最後の転送でもない読み取りまたは書き込み要求です。 場合によっては、SPB フレームワーク拡張機能 (SpbCx) が最後の転送を識別できず、 SpbRequestSequencePositionLast ではなく SpbRequestSequencePositionContinue として最後の転送にラベル を付けることができます。 詳細については、「解説」を参照してください。 コントローラーは、この転送を開始する前にターゲットが既に選択されており、転送が完了した後もターゲットを選択したままにする必要があります。 |
SpbRequestSequencePositionLast シーケンス内の最後の I/O 要求。 この要求は、シーケンスの終了を通知するロック解除 (IOCTL_SPB_UNLOCK_CONTROLLER) I/O 制御要求の直前にある読み取りまたは書き込み要求です。 場合によっては、SpbCx は最後の転送を識別できず、最後の転送に SpbRequestSequencePositionContinue の代わりに SpbRequestSequencePositionContinue というラベルを付けます。 詳細については、「解説」を参照してください。 コントローラーは、この転送を開始する前にターゲットが既に選択されている必要があり、転送の完了後にターゲットを解放する必要があります。 |
SpbRequestSequencePositionMax 内部使用専用です。 |
注釈
SPB コントローラーのクライアント (周辺機器ドライバー) は、バス上のターゲット デバイスに一連の読み取り要求と書き込み要求を送信することで、I/O 転送シーケンスを実行できます。 系列内の各読み取りまたは書き込み要求は、シーケンスの転送の一覧内の位置を占めます。 SPB_REQUEST_SEQUENCE_POSITION列挙の値は、このリスト内の読み取り要求と書き込み要求の相対位置を示します。
SpbRequestGetParameters メソッドは、I/O 要求から SPB 固有のパラメーター値を取得し、SPB_REQUEST_PARAMETERS構造体に書き込みます。 これらのパラメーターには、 その 一部である I/O 転送シーケンス内の I/O 要求の位置を示すSPB_REQUEST_SEQUENCE_POSITION列挙値が含まれます。
シーケンスの一部ではない I/O 要求の位置値を取得するために SpbRequestGetParameters が呼び出された場合、このメソッドは適切な SPB_REQUEST_SEQUENCE_POSITION 列挙値を要求に割り当てます。
読み取り要求と書き込み要求の場合、位置の値は 、SpbRequestSequencePositionSingle、 SpbRequestSequencePositionFirst、 SpbRequestSequencePositionContinue、または SpbRequestSequencePositionLast のいずれかの値に設定されます。
クライアントがシーケンスに含まれていない単純な読み取りまたは書き込み (IRP_MJ_READ または IRP_MJ_WRITE) 要求を送信する場合、位置の値は SpbRequestSequencePositionSingle に設定されます。
クライアントがロック (IOCTL_SPB_LOCK_CONTROLLER) 要求を送信してシーケンスの開始を通知する場合、シーケンス内の最初の転送 (読み取りまたは書き込み要求) の位置値は SpbRequestSequencePositionFirst で、シーケンス内の残りの転送の位置値は SpbRequestSequencePositionContinue です。 この場合、SpbCx は、クライアントがシーケンスを終了するロック解除 (IOCTL_SPB_UNLOCK_CONTROLLER) 要求を送信するまで、クライアントが最後の読み取りまたは書き込み要求を送信したことを認識しないため、SpbRequestSequencePositionLast を最後の転送に割り当てることができません。
ロック要求の場合、位置の値は SpbRequestSequencePositionFirst に設定されます。 ロック解除要求の場合、位置の値は SpbRequestSequencePositionLast に設定されます。
一部のコントローラーでは、ターゲット デバイスとの間で同時に読み取りと書き込みを行う全二重バス転送などの特殊な操作がサポートされる場合があります。 クライアントは、コントローラーをロックし、SpbCx が SPB コントローラー ドライバーの EvtSpbControllerIoOther コールバック関数に渡す一連のカスタム I/O 要求を送信することで、カスタム シーケンス操作を実行できます。 この場合、シーケンス内の最初のカスタム I/O 要求の位置値は SpbRequestSequencePositionFirst で、シーケンス内の残りのカスタム I/O 要求の位置値は SpbRequestSequencePositionContinue です。 クライアントがコントローラーのロックを解除すると、シーケンスは終了します。 EvtSpbControllerIoOther コールバック関数がシーケンスに含まれていないカスタム I/O 要求を受け取る場合、この要求の位置の値は SpbRequestSequencePositionSingle です。
SpbRequestSequencePositionLast の位置の値の場合、ターゲットを解放する必要があり、I/O データを転送しない (または、コントローラーがクロックを実行せずにデバイスを解放できない場合に 0 バイト転送を行う必要があることを示す) ことを示すために、SPB_REQUEST_PARAMETERS構造体の Length メンバーを 0 にすることができます。
SpbRequestSequencePositionContinue と SpbRequestSequencePositionLast の位置値の場合、転送方向が以前の転送から変更されている可能性があり、SPB コントローラー ドライバーはバスでこの方向の変更を示す必要がある場合があります (たとえば、I2C コントローラーが新しい START 条件を発行します)。 転送方法の詳細については、「 SPB_TRANSFER_DIRECTION」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 以降でサポートされています。 |
Header | spbcx.h (Spb.h を含む) |