USB 驅動程式
USB 總線的核心模式仍然映像驅動程式支援單一控制端點,以及多個中斷、大量 IN 和大量 OUT 端點。 您可以使用 I/O 控制代碼和 DeviceIoControl 來存取控制和中斷端點。 大量端點可以使用 ReadFile 和 WriteFile 來存取。
在呼叫 DeviceIoControl、ReadFile 或 WriteFile 之前,您必須呼叫 CreateFile (Microsoft Windows SDK 檔) 取得裝置句柄中所述。 對於支援每個端點類型的裝置, (控制、中斷、大量 IN、大量 OUT ) ,CreateFile 的單一呼叫會開啟傳送管道至每個端點。
對於支援多個中斷或大量端點的裝置, CreateFile 的單一呼叫會開啟傳送管道至每個類型的最高編號端點。 如果您想要使用不同的端點,您必須執行下列動作:
呼叫 DeviceIoControl,指定 IOCTL_GET_PIPE_CONFIGURATION的 I/O 控制程式代碼,以判斷埠的端點索引編號 (,也就是傳回USBSCAN_PIPE_INFORMATION結構陣列 ) 的索引。 請注意,這些索引編號不是通用序列總線規格中所述的端點編號。
呼叫 CreateFile 時,將反斜杠和端點的索引編號附加至 IStiDeviceControl::GetMyDevicePortName 所傳回的埠名稱。
例如,假設裝置 (的埠名稱為 「usbscan0」) 有兩個端點,每個類型 (插斷、大量 IN、大量 OUT) ,索引編號如下所示:
索引 | 類型 | 端點# |
---|---|---|
0 | 中斷 | 0x01 |
1 | 大量 IN | 0x82 |
2 | 大量 IN | 0x83 |
3 | 大量 OUT | 0x04 |
4 | 大量 OUT | 0x05 |
5 | 中斷 | 0x06 |
如果您使用埠名稱 「usbscan0」 呼叫 CreateFile ,函式會開啟傳送管道至索引值為 2、4 和 5 的端點,以及控制端點。
如果您使用埠名稱 「usbscan0\1」 呼叫 CreateFile ,函式會開啟傳送管道至索引值為 1、4 和 5 的連接點,以及控制端點。
針對此裝置,如果您想要使用中斷端點 0、大量 IN 端點 1 和大量 OUT 端點 3,請呼叫 CreateFile 三次,並指定埠名稱 “usbscan0\0”、“usbscan0\1” 和 “usbscan0\3”。 這會建立三個裝置句柄。 每當後續呼叫 DeviceIoControl、ReadFile 或 WriteFile 時,應該指定與所需管道相關聯的裝置句柄。
因為只支援一個控制端點,所以指定任何使用控制管道的 I/O 控制程式代碼會導致驅動程式使用適當的端點,無論哪一個端點 (是否已指定 任何) CreateFile。
如需所有 I/O 控制代碼的描述,請參閱 USB 仍然映射 I/O 控制代碼。
內核模式 USB 驅動程式不會實作套件或訊息通訊協定。 讀取作業不需要任何特定的封包對齊,但如果讀取要求符合封包大小上限界限,則可以達到更好的效能。 您可以使用 IOCTL_GET_CHANNEL_ALIGN_RQST I/O 控制程式代碼來取得封包大小上限。