AVCSTRM_READ
AVCSTRM_READ 関数コードは、指定したストリームのデータが格納されたデータ バッファー avcstrm.sys を送信するために使用されます。
I/O ステータス ブロック
成功した場合、avcstrm.sys は Irp->IoStatus.Status を STATUS_SUCCESSに設定します。
指定できる値は以下の通りです。
エラーの状態 | 説明 |
---|---|
STATUS_DEVICE_REMOVED | AVCSTRM_READ 操作に対応するデバイスが存在しなくなりました。 |
STATUS_CANCELLED | 要求を完了できませんでした。 |
STATUS_INVALID_PARAMETER | IRP で指定されたパラメーターが正しくありません。 |
STATUS_INSUFFICIENT_RESOURCES | 要求を完了するのに十分なシステム リソースが不足していました。 |
STATUS_PENDING | 要求は受信されましたが、さらに処理が必要です。 I/O 完了ルーチンは、最終的な応答を処理します。 |
AVC_STREAM_REQUEST_BLOCK 入力
SizeOfThisBlock、バージョン、関数
これらのメンバーを初期化するには、 INIT_AVCSTRM_HEADER マクロを使用します。 マクロの Request 引数に AVCSTRM_READ を渡します。
AVCStreamContext
読み取り操作のデータ ソースである以前 のAVCSTRM_OPEN 呼び出しによって返されるストリーム コンテキスト (ハンドル) を指定します。
BufferStruct
読み取り操作でデータを配置するバッファーを指定します。
サブユニット ドライバーは、最初に IRP と AVC_STREAM_REQUEST_BLOCK 構造体を割り当てる必要があります。
次に、INIT_AVCSTRM_HEADER マクロを使用して AVC_STREAM_REQUEST_BLOCK 構造体を初期化し、AVCSTRM_READ を Request 引数としてマクロに渡す必要があります。
次に、サブユニット ドライバーは、読み取るデータを提供するストリームのストリーム コンテキスト (ハンドル) に AVCStreamContext メンバーを設定します。 最後に、サブユニット ドライバーは、読み取り操作でデータを配置するバッファーを記述する CommandData 共用体の BufferStruct メンバーを設定します。
この要求を送信するには、サブユニットは、IOCTL_AVCSTRM_CLASS に設定された IRP の IoControlCode メンバーと、実行する読み取り操作を記述する AVC_STREAM_REQUEST_BLOCK 構造体に設定された IRP の Argument1 メンバーを持つ IRP_MJ_INTERNAL_DEVICE_CONTROL を送信します。
このコマンドは非同期的に完了します。 完了すると、IRP で設定された I/O 完了ルーチンが呼び出されます。
この関数コードは、IRQL = PASSIVE_LEVEL で呼び出す必要があります。
Comments
この関数は、次に示すように、AVC_STREAM_REQUEST_BLOCK 構造体で CommandData 共用体の BufferStruct メンバーを使用します。
typedef struct _AVC_STREAM_REQUEST_BLOCK {
ULONG SizeOfThisBlock;
ULONG Version;
AVCSTRM_FUNCTION Function;
.
.
PVOID AVCStreamContext;
.
.
union _tagCommandData {
.
.
AVCSTRM_BUFFER_STRUCT BufferStruct;
.
.
} CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;
要件
ヘッダー: avcstrm.h で宣言されています。 avcstrm.h を含めます。