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 字段。 For information about the layout of this field, see Table 9-13 in "Universal Serial Bus Specification Revision 2.0" at USB Technology. 在 [bEndpointAddress ] 欄位中,Bit 7 表示端點的方向:0 代表 OUT;1 用於 IN。

[in] Buffer

呼叫端配置的緩衝區,其中包含要寫入的數據。

[in] BufferLength

要寫入的位元組數。 這個數字必須小於或等於 Buffer 的大小,以位元組為單位。

[out, optional] LengthTransferred

ULONG 變數的指標,可接收寫入至管道的實際位元元組數目。 如需詳細資訊,請參閱<備註>。

[in, optional] Overlapped

重疊結構的選擇性指標,用於異步操作。 如果指定此參數, WinUsb_WritePipe 會立即傳回,並在作業完成時發出事件訊號。

傳回值

如果 作業成功,WinUsb_WritePipe會傳回 TRUE 。 否則,此函式會傳回 FALSE,而且呼叫端可以呼叫 GetLastError 來擷取記錄的錯誤。

GetLastError 可以傳回下列錯誤碼。

傳回碼 Description
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 會將要求分割成較小的要求,並將它們序列提交至主機控制器。

包含零長度數據的寫入要求會轉送至 USB 堆疊。

如果應用程式在重迭參數中傳遞NULL (同步作業) ,則必須確保 LengthTransferred 不是 NULL,即使作業不會產生任何輸出數據也一樣。

如果 重疊 不是 NULL (異步操作) ,則 LengthTransferred 可以設定為 NULL。 對於重疊的作業 (,如果 LengthTransferred 是非 NULL 值) ,則WinUsb_WritePipe傳回之後在 LengthTransferred 中收到的值是無意義的,直到重疊的作業完成為止。 若要擷取傳回的實際位元組數目,請呼叫 WinUsb_GetOverlappedResult

規格需求

需求
目標平台 Universal
標頭 winusb.h (包含 Winusb.h)
程式庫 Winusb.lib
Dll Winusb.dll

另請參閱

WinUSB

WinUSB 函式

WinUsb_Initialize