WdfUsbTargetPipeSendUrbSynchronously 関数 (wdfusb.h)
[KMDF にのみ適用]
WdfUsbTargetPipeSendUrbSynchronously メソッドは、指定した URB が記述する要求パラメーターを使用して、指定された USB パイプの USB 要求を構築します。
構文
NTSTATUS WdfUsbTargetPipeSendUrbSynchronously(
[in] WDFUSBPIPE Pipe,
[in, optional] WDFREQUEST Request,
[in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions,
[in] PURB Urb
);
パラメーター
[in] Pipe
WdfUsbInterfaceGetConfiguredPipe を呼び出して取得したフレームワーク パイプ オブジェクトへのハンドル。
[in, optional] Request
フレームワーク要求オブジェクトへのハンドル。 このパラメーターは省略可能であり、 NULL にすることができます。 詳細については、「解説」を参照してください。
[in, optional] RequestOptions
要求のオプションを指定する呼び出し元によって割り当てられた WDF_REQUEST_SEND_OPTIONS 構造体へのポインター。 このポインターは省略可能であり、 NULL にすることができます。 詳細については、「解説」を参照してください。
[in] Urb
ドライバーで初期化された URB 構造体へのポインター。
ドライバーが以前 に WdfUsbTargetDeviceCreateWithParameters を呼び出して UsbDevice を作成する場合、ドライバーは WdfUsbTargetDeviceCreateUrb または WdfUsbTargetDeviceCreateIsochUrb を使用してこの URB を作成する必要があります。
戻り値
操作が成功した場合、WdfUsbTargetPipeSendUrbSynchronously は I/O ターゲットの完了状態値を返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。
リターン コード | 説明 |
---|---|
|
RequestOptions パラメーターが指定したWDF_REQUEST_SEND_OPTIONS構造体のサイズが正しくありません。 |
|
無効なパラメーターが検出されました。 |
|
メモリが不足していました。 |
|
呼び出し元の IRQL がPASSIVE_LEVELされていないか、指定された I/O 要求が既に I/O ターゲットにキューに登録されています。 |
|
ドライバーがタイムアウト値を指定し、割り当てられた時間内に要求が完了しませんでした。 |
|
要求パラメーターが表す I/O 要求パケット (IRP) は、ドライバーが 要求 を転送できるようにするため の十 分なIO_STACK_LOCATION構造体を提供しません。 |
このメソッドは、他の NTSTATUS 値を返す場合もあります。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
注釈
USB 要求を同期的に送信するには、 WdfUsbTargetPipeSendUrbSynchronously メソッドを使用します。 このような要求を非同期的に送信するには、 WdfUsbTargetPipeFormatRequestForUrb を使用し、その後に WdfRequestSend を使用します。
WdfUsbTargetPipeSendUrbSynchronously メソッドは、RequestOptions パラメーターが指すWDF_REQUEST_SEND_OPTIONS構造体にタイムアウト値をドライバーが提供しない限り、またはエラーが検出されない限り、要求が完了するまで戻りません。
フレームワークは USB 要求を調べません。 要求によって USB パイプの状態が変更された場合、フレームワークは変更を認識しません。
ドライバーが I/O キューで受信した I/O 要求を転送することも、新しい要求を作成して送信することもできます。
ドライバーが I/O キューで受信した I/O 要求を転送するには、 WdfUsbTargetPipeSendUrbSynchronously メソッドの Request パラメーターに対して、受信した 要求 のハンドルを指定します。
新しい要求を作成して送信するには、Request パラメーターに NULL 要求ハンドルを指定するか、新しい要求オブジェクトを作成してそのハンドルを指定します。
- NULL 要求ハンドルを指定すると、フレームワークは内部要求オブジェクトを使用します。 この手法は簡単に使用できますが、ドライバーは要求を取り消すことができません。
- WdfRequestCreate を呼び出して 1 つ以上の要求オブジェクトを作成する場合は、WdfRequestReuse を呼び出してこれらの要求オブジェクトを再利用できます。 この手法を使用すると、ドライバーの EvtDriverDeviceAdd コールバック関数を使用して、デバイスの要求オブジェクトを事前に割り当てることができます。 さらに、別のドライバー スレッドは WdfRequestCancelSentRequest を呼び出して、必要に応じて要求を取り消すことができます。
I/O 要求の完了後に状態情報を取得する方法については、「 完了情報の取得」を参照してください。
WdfUsbTargetPipeSendUrbSynchronously メソッドと USB I/O ターゲットの詳細については、「USB I/O ターゲット」を参照してください。
例
次のコード例では、URB を初期化し、USB パイプに URB を送信します。
URB urb;
PURB pUrb = NULL;
NTSTATUS status;
pUrb = &urb;
pUrb->UrbHeader.Length = (USHORT) sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER);
pUrb->UrbHeader.Function = URB_FUNCTION_GET_CURRENT_FRAME_NUMBER;
pUrb->UrbGetCurrentFrameNumber.FrameNumber = 0;
status = WdfUsbTargetPipeSendUrbSynchronously(
Pipe,
Request,
NULL,
pUrb
);
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
Header | wdfusb.h (Wdfusb.h を含む) |
Library | Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。 |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | DriverCreate(kmdf)、 IoctlReqs(kmdf)、 KmdfIrql(kmdf)、 KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf)、 SyncReqSend(kmdf)、 UsbKmdfIrql(kmdf)、 UsbKmdfIrql2(kmdf)、UsbKmdfIrqlExplicit(kmdf) |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示