UCX が静的ストリームを作成するために呼び出すクライアント ドライバーの実装。
構文
EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD EvtUcxEndpointStaticStreamsAdd;
NTSTATUS EvtUcxEndpointStaticStreamsAdd(
[in] UCXENDPOINT UcxEndpoint,
[in] ULONG NumberOfStreams,
[in] PUCXSSTREAMS_INIT UcxStaticStreamsInit
)
{...}
パラメーター
[in] UcxEndpoint
エンドポイントを表す UCXENDPOINT オブジェクトへのハンドル。
[in] NumberOfStreams
作成する既定以外のストリームの数。
[in] UcxStaticStreamsInit
初期化情報を含む不透明な構造体へのポインター。 この構造体は UCX によって管理されます。
戻り値
操作が成功した場合、コールバック関数はSTATUS_SUCCESSを返すか、NT_SUCCESS(status) が TRUE の別の状態値を返す必要があります。 それ以外の場合は、NT_SUCCESS(status) が FALSE の状態値を返す必要があります。
備考
UCX クライアント ドライバーは、UcxEndpointCreate メソッドを呼び出すことによって、USB ホスト コントローラー拡張機能 (UCX) にこのコールバック関数を登録します。
このコールバック関数は、ucxStaticStreamsCreate メソッド 呼び出すことによって UCX 静的ストリーム オブジェクトを作成します。 1 つのエンドポイントに関連付けることができる UCX 静的ストリーム オブジェクトは 1 つだけです。 その後、ドライバーは UcxStaticStreamsSetStreamInfo ストリームごとに 1 回、 を呼び出して、ストリームごとにキューを作成します。
UCX がクライアント ドライバーの EVT_UCX_ENDPOINT_STATIC_STREAMS_ENABLE コールバック関数を呼び出すまで、静的ストリーム オブジェクトは有効になりません。
例
NTSTATUS
Endpoint_EvtEndpointStaticStreamsAdd(
UCXENDPOINT UcxEndpoint,
ULONG NumberOfStreams,
PUCXSSTREAMS_INIT UcxStaticStreamsInit
)
{
NTSTATUS status;
WDF_OBJECT_ATTRIBUTES wdfAttributes;
UCXSSTREAMS ucxStaticStreams;
STREAM_INFO streamInfo;
ULONG streamId;
TRY {
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&wdfAttributes, STATIC_STREAMS_CONTEXT);
status = UcxStaticStreamsCreate(UcxEndpoint,
&UcxStaticStreamsInit,
&wdfAttributes,
&ucxStaticStreams);
// … error handling …
for (i = 0, streamId = 1; i < NumberOfStreams; i += 1, streamId += 1) {
// … create WDF queue …
STREAM_INFO_INIT(&streamInfo,
wdfQueue,
streamId);
UcxStaticStreamsSetStreamInfo(ucxStaticStreams, &streamInfo);
}
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | ウィンドウズ |
最小 KMDF バージョン | 1.0 |
UMDF の最小バージョン を する | 2.0 |
ヘッダー | ucxendpoint.h (Ucxclass.h、Ucxendpoint.h を含む) |
IRQL | PASSIVE_LEVEL |