WinUsb_WritePipe関数 (winusb.h)
WinUsb_WritePipe関数は、パイプにデータを書き込みます。
構文
BOOL WinUsb_WritePipe(
[in] WINUSB_INTERFACE_HANDLE InterfaceHandle,
[in] UCHAR PipeID,
[in] PUCHAR Buffer,
[in] ULONG BufferLength,
[out, optional] PULONG LengthTransferred,
[in, optional] LPOVERLAPPED Overlapped
);
パラメーター
[in] InterfaceHandle
パイプが関連付けられているエンドポイントを含むインターフェイスへの不透明なハンドル。
最初のインターフェイスのエンドポイントに関連付けられているパイプに書き込むには、WinUsb_Initializeによって返されるハンドル を使用します。 その他のすべてのインターフェイスでは、 WinUsb_GetAssociatedInterfaceによって取得されたターゲット インターフェイスへのハンドルを使用します。
[in] PipeID
PipeID は、エンドポイント記述子の bEndpointAddress フィールドに対応します。 このフィールドのレイアウトについては、USB テクノロジの「ユニバーサル シリアル バス仕様リビジョン 2.0」の表 9-13 を参照してください。 bEndpointAddress フィールドでは、ビット 7 はエンドポイントの方向を示します。OUT の場合は 0 です。IN の場合は 1。
[in] Buffer
書き込むデータを含む呼び出し元によって割り当てられたバッファー。
[in] BufferLength
書き込むバイト数。 この数値は 、Buffer のサイズ (バイト単位) 以下である必要があります。
[out, optional] LengthTransferred
パイプに書き込まれた実際のバイト数を受け取る ULONG 変数へのポインター。 詳細については、「解説」を参照してください。
[in, optional] Overlapped
非同期操作に使用される OVERLAPPED 構造体への省略可能なポインター。 このパラメーターを指定すると、 WinUsb_WritePipe はすぐに戻り、操作の完了時にイベントが通知されます。
戻り値
操作が 成功した場合、WinUsb_WritePipeは TRUE を 返します。 それ以外の場合、この関数は FALSE を返し、呼び出し元は GetLastError を呼び出すことによってログに記録されたエラーを取得できます。
GetLastError は 、次のエラー コードを返すことができます。
リターン コード | 説明 |
---|---|
|
呼び出し元は InterfaceHandle パラメーターに NULL を渡しました。 |
|
重複した I/O 操作が進行中であるが、完了していないことを示します。 重複した操作をすぐに完了できない場合、関数は FALSE を 返し、 GetLastError 関数はERROR_IO_PENDINGを返し、操作がバックグラウンドで実行されていることを示します。 WinUsb_GetOverlappedResultを呼び出して、操作の成功または失敗をチェックします。 |
|
操作を実行するためのメモリが不足していることを示します。 |
|
USB スタック内 のWinUsb_WritePipe によって開始された書き込み操作は、操作が完了する前にタイムアウトしました。 |
注釈
書き込み要求を作成するには、アプリケーションでバッファーを割り当て、デバイスに書き込むデータを入力し、 WinUsb_WritePipeを呼び出してバッファーをホスト コントローラーに送信する必要があります。
RAW_IOが設定されている場合、バッファーのサイズには次の制限が適用されます。
- バッファーの長さは、エンドポイントの最大パケット サイズの倍数である必要があります。
- 長さは、 WinUsb_GetPipePolicyによって取得MAXIMUM_TRANSFER_SIZEの値以下である必要があります。
長さ 0 のデータを含む書き込み要求は、USB スタックに転送されます。
アプリケーションが Overlapped パラメーター (同期操作) で NULL を渡す場合、操作で出力データが生成されない場合でも、LengthTransferred が NULL ではないことを確認する必要があります。
Overlapped が NULL (非同期操作) でない場合は、LengthTransferred を NULL に設定できます。 重複する操作 (LengthTransferred が NULL 以外の値の場合) の場合、WinUsb_WritePipeが返された後に LengthTransferred で受け取った値は、重複する操作が完了するまで意味がありません。 返された実際のバイト数を取得するには、 WinUsb_GetOverlappedResultを呼び出します。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | winusb.h (Winusb.h を含む) |
Library | Winusb.lib |
[DLL] | Winusb.dll |