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 は 、次のエラー コードを返すことができます。

リターン コード 説明
ERROR_INVALID_HANDLE
呼び出し元は InterfaceHandle パラメーターに NULL を渡しました。
ERROR_IO_PENDING
重複した I/O 操作が進行中であるが、完了していないことを示します。 重複した操作をすぐに完了できない場合、関数は FALSE を 返し、 GetLastError 関数はERROR_IO_PENDINGを返し、操作がバックグラウンドで実行されていることを示します。 WinUsb_GetOverlappedResultを呼び出して、操作の成功または失敗をチェックします。
ERROR_NOT_ENOUGH_MEMORY
操作を実行するためのメモリが不足していることを示します。
ERROR_SEM_TIMEOUT
USB スタック内 のWinUsb_WritePipe によって開始された書き込み操作は、操作が完了する前にタイムアウトしました。

注釈

書き込み要求を作成するには、アプリケーションでバッファーを割り当て、デバイスに書き込むデータを入力し、 WinUsb_WritePipeを呼び出してバッファーをホスト コントローラーに送信する必要があります。

RAW_IOが設定されている場合、バッファーのサイズには次の制限が適用されます。

  • バッファーの長さは、エンドポイントの最大パケット サイズの倍数である必要があります。
  • 長さは、 WinUsb_GetPipePolicyによって取得MAXIMUM_TRANSFER_SIZEの値以下である必要があります。
RAW_IOがパイプのポリシーの種類として設定されていない場合、バッファーのサイズに制限はありません。 バッファーのサイズが、MAXIMUM_TRANSFER_SIZEによって報告される最大転送長を超える場合、WinUSB は要求を小さな要求に分割し、ホスト コントローラーに順次送信します。

長さ 0 のデータを含む書き込み要求は、USB スタックに転送されます。

アプリケーションが Overlapped パラメーター (同期操作) で NULL を渡す場合、操作で出力データが生成されない場合でも、LengthTransferredNULL ではないことを確認する必要があります。

OverlappedNULL (非同期操作) でない場合は、LengthTransferredNULL に設定できます。 重複する操作 (LengthTransferredNULL 以外の値の場合) の場合、WinUsb_WritePipeが返された後に LengthTransferred で受け取った値は、重複する操作が完了するまで意味がありません。 返された実際のバイト数を取得するには、 WinUsb_GetOverlappedResultを呼び出します。

要件

要件
対象プラットフォーム ユニバーサル
Header winusb.h (Winusb.h を含む)
Library Winusb.lib
[DLL] Winusb.dll

こちらもご覧ください

WinUSB

WinUSB 関数

WinUsb_Initialize