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 |
---|---|
|
呼叫端在 InterfaceHandle 參數中傳遞 NULL。 |
|
表示重疊的 I/O 作業正在進行中,但尚未完成。 如果無法立即完成重疊的作業,函式會傳回 FALSE ,而 GetLastError 函式會傳回ERROR_IO_PENDING,表示作業正在背景中執行。 呼叫 WinUsb_GetOverlappedResult ,以檢查作業的成功或失敗。 |
|
表示記憶體不足,無法執行作業。 |
|
在作業完成之前,USB 堆疊中 WinUsb_WritePipe 起始的寫入作業逾時。 |
備註
若要建立寫入要求,應用程式必須配置緩衝區、填入您想要寫入裝置的數據,以及呼叫 WinUsb_WritePipe 將緩衝區傳送至主機控制器。
如果已設定RAW_IO,下列限制會套用至緩衝區的大小:
- 緩衝區長度必須是端點封包大小上限的倍數。
- 長度必須小於或等於 WinUsb_GetPipePolicy所擷取MAXIMUM_TRANSFER_SIZE的值。
包含零長度數據的寫入要求會轉送至 USB 堆疊。
如果應用程式在重迭參數中傳遞NULL (同步作業) ,則必須確保 LengthTransferred 不是 NULL,即使作業不會產生任何輸出數據也一樣。
如果 重疊 不是 NULL (異步操作) ,則 LengthTransferred 可以設定為 NULL。 對於重疊的作業 (,如果 LengthTransferred 是非 NULL 值) ,則WinUsb_WritePipe傳回之後在 LengthTransferred 中收到的值是無意義的,直到重疊的作業完成為止。 若要擷取傳回的實際位元組數目,請呼叫 WinUsb_GetOverlappedResult。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | winusb.h (包含 Winusb.h) |
程式庫 | Winusb.lib |
Dll | Winusb.dll |