WdfUsbTargetDeviceSendUrbSynchronously 関数 (wdfusb.h)
[KMDF にのみ適用]
WdfUsbTargetDeviceSendUrbSynchronously メソッドは、URBによって記述された要求パラメーターを使用して、指定された USB デバイスに USB 要求を同期的に送信します。
NTSTATUS WdfUsbTargetDeviceSendUrbSynchronously(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] WDFREQUEST Request,
[in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions,
[in] PURB Urb
);
[in] UsbDevice
WdfUsbTargetDeviceCreateWithParametersへの以前の呼び出しから取得された USB デバイス オブジェクトへのハンドル。
[in, optional] Request
フレームワーク要求オブジェクトへのハンドル。 このパラメーターは省略可能であり、NULL できます。 詳細については、次の「解説」セクションを参照してください。
[in, optional] RequestOptions
要求のオプションを指定する呼び出し元によって割り当てられた WDF_REQUEST_SEND_OPTIONS 構造体へのポインター。 このポインターは省略可能であり、NULL できます。 詳細については、次の「解説」セクションを参照してください。
[in] Urb
URB 構造体 呼び出し元で初期化されたポインター。
以前に WdfUsbTargetDeviceCreateWithParameters 呼び出して UsbDevice 作成 場合、ドライバーは WdfUsbTargetDeviceCreateUrb 使用するか、WdfUsbTargetDeviceCreateIsochUrb を してこの URB を作成する必要があります。
WdfUsbTargetDeviceSendUrbSynchronously 操作が成功した場合、I/O ターゲットの完了状態値を返します。 それ以外の場合、このメソッドは次のいずれかの値を返すことができます。
リターン コード | 形容 |
---|---|
|
無効なパラメーターが検出されました。 |
|
呼び出し元の IRQL が無効でした。 |
|
メモリが不足していました。 |
|
ドライバーがタイムアウト値を指定し、割り当てられた時間内に要求が完了しませんでした。 |
このメソッドは、他のNTSTATUS 値を返す場合もあります。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
WdfUsbTargetDeviceSendUrbSynchronously メソッドを使用して、USB コントロール転送要求を同期的に送信します。 このような要求を非同期に送信するには、WdfUsbTargetDeviceFormatRequestForUrbを使用し、その後に WdfRequestSend します。
WdfUsbTargetDeviceSendUrbSynchronously メソッドは、RequestOptions パラメーターの WDF_REQUEST_SEND_OPTIONS 構造体にタイムアウト値を指定しない限り、またはエラーが検出されない限り、要求が完了するまで戻りません。
ドライバーが I/O キューで受信した I/O 要求を転送することも、新しい要求を作成して送信することもできます。
ドライバーが I/O キューで受信した I/O 要求を転送するには、WdfUsbTargetDeviceSendUrbSynchronously メソッドの Request パラメーターに対して、受信した要求のハンドル 指定します。
新しい要求を作成して送信するには、Request パラメーターに対して NULL 要求ハンドルを指定するか、新しい要求オブジェクトを作成してそのハンドルを指定します。
- NULL 要求ハンドルを指定すると、フレームワークは内部要求オブジェクトを使用します。 この手法は簡単に使用できますが、ドライバーは要求をキャンセルできません。
- WdfRequestCreate を呼び出して 1 つ以上の要求オブジェクトを作成する場合は、WdfRequestReuse 呼び出すことによって、これらの要求オブジェクトを再利用できます。 この手法を使用すると、ドライバーの EvtDriverDeviceAdd コールバック関数を使用して、デバイスの要求オブジェクトを事前に割り当てることができます。 さらに、別のドライバー スレッドは、WdfRequestCancelSentRequest を呼び出して、必要に応じて要求を取り消すことができます。
I/O 要求が完了した後の状態情報の取得については、「完了情報の取得を参照してください。
WdfUsbTargetDeviceSendUrbSynchronously メソッドと USB I/O ターゲットの詳細については、「USB I/O ターゲット」を参照してください。
次のコード例では、URB 構造体を初期化し、WdfUsbTargetDeviceSendUrbSynchronously 呼び出します。
URB Urb;
NTSTATUS status;
Urb.UrbHeader.Function = URB_FUNCTION_GET_CONFIGURATION;
Urb.UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_CONFIGURATION_REQUEST);
Urb.UrbControlGetConfigurationRequest.TransferBufferLength = 1 ; // Must be 1
Urb.UrbControlGetConfigurationRequest.TransferBufferMDL = NULL;
Urb.UrbControlGetConfigurationRequest.TransferBuffer = outBuffer;
Urb.UrbControlGetConfigurationRequest.UrbLink = NULL;
status = WdfUsbTargetDeviceSendUrbSynchronously(
UsbDevice,
NULL,
NULL,
&Urb
);
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
最小 KMDF バージョン | 1.0 |
ヘッダー | wdfusb.h (Wdfusb.h を含む) |
ライブラリ | Wdf01000.sys (フレームワーク ライブラリのバージョン管理を参照)。 |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 を する | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), SyncReqSend(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
EvtDriverDeviceAdd の
WdfUsbTargetDeviceFormatRequestForUrb の