_URB_HEADER結構 (usb.h)
USB 用戶端驅動程式會使用 _URB_HEADER 結構來提供傳送至主機控制器驅動程式之要求的基本資訊。
語法
struct _URB_HEADER {
USHORT Length;
USHORT Function;
USBD_STATUS Status;
PVOID UsbdDeviceHandle;
ULONG UsbdFlags;
};
成員
Length
指定 URB 的長度,以位元組為單位。 對於使用 _URB_HEADER以外之數據結構的 URB 要求,此成員必須設定為整個 URB 要求結構的長度,而不是_URB_HEADER大小。
Function
指定數值代碼,指出此 URB 的要求作業。 必須設定下列其中一個值:
URB_FUNCTION_SELECT_CONFIGURATION
向主機控制器驅動程式指出要選取組態。 如果設定,URB 會與 URB_SELECT_CONFIGURATION 搭配使用,作為數據結構。
URB_FUNCTION_SELECT_INTERFACE
向主機控制器驅動程式指出正在為介面選取替代介面設定。 如果設定,URB 會與 _URB_SELECT_INTERFACE 搭配使用,作為數據結構。
URB_FUNCTION_ABORT_PIPE
表示應該取消管道的所有未處理要求。 如果設定,URB 會與 _URB_PIPE_REQUEST 搭配使用,作為數據結構。 此一般用途要求可讓用戶端取消指定管道的任何擱置傳輸。 管道狀態和端點狀態不受影響。 中止要求可能會在所有未完成的要求完成之前完成。 請勿假設中止要求完成表示所有其他未完成的要求都已完成。
URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL
此 URB 函式 在 Windows 2000 和更新版本的作業系統中已被取代,Microsoft 不支援。 請勿使用。 如果您使用 URB 要求指定此函式,要求將會失敗,而且系統會回報錯誤。
URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL
此 URB 函式 在 Windows 2000 和更新版本的作業系統中已被取代,Microsoft 不支援。 請勿使用。 如果您使用 URB 要求指定此函式,要求將會失敗,而且系統會回報錯誤。
URB_FUNCTION_GET_FRAME_LENGTH
此 URB 函式 在 Windows 2000 和更新版本的作業系統中已被取代,Microsoft 不支援。 請勿使用。 如果您使用此函式搭配 URB 要求,要求將會失敗,而且系統會回報錯誤。
URB_FUNCTION_SET_FRAME_LENGTH
此 URB 函式 在 Windows 2000 和更新版本的作業系統中已被取代,Microsoft 不支援。 請勿使用。 如果您將其與 URB 要求搭配使用,要求將會失敗,而且系統會回報錯誤。
URB_FUNCTION_GET_CURRENT_FRAME_NUMBER
從主控制器驅動程式要求目前的畫面編號。 如果設定,URB 會與 _URB_GET_CURRENT_FRAME_NUMBER 搭配使用,作為數據結構。
URB_FUNCTION_CONTROL_TRANSFER
將數據傳送至控制管道或從控制管道傳送數據。 如果設定,URB 會與 _URB_CONTROL_TRANSFER 搭配使用,作為數據結構。
URB_FUNCTION_CONTROL_TRANSFER_EX
在控制管道之間傳輸數據,而不會有逾時值所指定的時間限制。 如果設定,URB 會與 URB_CONTROL_TRANSFER_EX 搭配使用,作為數據結構。
可在 Windows Vista 和更新版本的作業系統中使用。
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
從大量管道或中斷管道或大量管道傳輸數據。 如果設定,URB 會與 _URB_BULK_OR_INTERRUPT_TRANSFER 搭配使用,作為數據結構。
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL
使用鏈結的 MDL,從大量管道或中斷管道來回傳輸數據。 如果設定,URB 會與 _URB_BULK_OR_INTERRUPT_TRANSFER 搭配使用,作為數據結構。 用戶端驅動程序必須將 TransferBufferMDL 成員設定為鏈結中包含傳輸緩衝區的第一個 MDL 結構。 處理此 URB 時,USB 驅動程式堆疊會忽略 TransferBuffer 成員。
可在 Windows 8 中使用。 如需使用鏈結 MDL 的詳細資訊,請參閱 How to Send Chained MDLs“>How to Send Chained MDLs。
URB_FUNCTION_ISOCH_TRANSFER
將數據傳送至或移出非時序管道。 如果設定,URB 會與 _URB_ISOCH_TRANSFER 搭配使用,作為數據結構。
URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL
使用鏈結的 MDL,將數據傳送至或移出非時序管道。 如果設定,URB 會與 _URB_ISOCH_TRANSFER 搭配使用,作為數據結構。 用戶端驅動程序必須將 TransferBufferMDL 成員設定為鏈結中包含傳輸緩衝區的第一個 MDL 。 處理此 URB 時,USB 驅動程式堆疊會忽略 TransferBuffer 成員。
可在 Windows 8 中使用。 如需使用鏈結 MDL 的詳細資訊,請參閱 How to Send Chained MDLs“>How to Send Chained MDLs。
URB_FUNCTION_RESET_PIPE
請參閱URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL。
URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
重設指定的管道。 如果設定,此 URB 會與 _URB_PIPE_REQUEST搭配使用。
注意
此 URB 會取代 URB_FUNCTION_RESET_PIPE。
總線驅動程式會完成三項工作,以回應此 URB:
首先,對於不同時間管道以外的所有管道,此 URB 會傳送CLEAR_FEATURE要求,以清除裝置的ENDPOINT_HALT功能。
其次,USB 總線驅動程式會視 USB 規格需要重設主機端的數據切換。 當總線驅動程式清除其ENDPOINT_HALT功能時,USB 裝置應該會在裝置端重設數據切換。 由於某些不相容的裝置不支援此功能,因此 Microsoft 會提供兩個額外的 URL:URB_FUNCTION_SYNC_CLEAR_STALL和URB_FUNCTION_SYNC_RESET_PIPE。 這些可讓客戶端驅動程式清除裝置上的ENDPOINT_HALT功能,或分別在主機端重設管道,而不會影響主機端的數據切換。 如果裝置在應該時未重設數據切換,則客戶端驅動程式可以藉由不重設主機端數據切換來補償此瑕疵。 如果數據切換是在主機端重設,但不是在裝置端重設,封包將會順序不同,而且裝置可能會卸除封包。
第三,在總線驅動程式成功重設管道之後,它會繼續使用下一個已排入佇列的 URB 進行傳輸。
在管道重設之後,傳輸會繼續下一個已排入佇列的 URB。
不需要清除預設控制管道上的停止條件。 默認控制管道必須一律接受安裝封包,因此如果停止,USB 堆疊會自動清除停止條件。 用戶端驅動程式不需要採取任何特殊動作,即可清除預設管道上的停止條件。
所有傳輸都必須中止或取消,才能嘗試重設管道。
此 URB 必須在PASSIVE_LEVEL傳送。
URB_FUNCTION_SYNC_RESET_PIPE
清除管道主機端的停止條件。 如果設定,此 URB 會與 _URB_PIPE_REQUEST 搭配使用,作為數據結構。
此 URB 可讓用戶端清除管道的停止狀態,而不重設數據切換,而且不需要清除端點停止條件 (功能ENDPOINT_HALT) 。 若要清除管道上的停止條件,請重設主機端數據切換,並使用單一作業清除裝置上的停止狀態,請使用 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL。
下列狀態代碼很重要,且具有指示的意義:
USBD_STATUS_INVALID_PIPE_HANDLE
PipeHandle 無效
USBD_STATUS_ERROR_BUSY
端點有作用中的傳輸擱置中。
不需要清除預設控制管道上的停止條件。 默認控制管道必須一律接受安裝封包,因此如果停止,USB 堆疊會自動清除停止條件。 用戶端驅動程式不需要採取任何特殊動作,即可清除預設管道上的停止條件。
所有傳輸都必須中止或取消,才能嘗試重設管道。
此 URB 必須在PASSIVE_LEVEL傳送。
可在 Windows XP 和更新版本的作業系統中使用。
URB_FUNCTION_SYNC_CLEAR_STALL
清除端點上的停止條件。 對於除了連續管道以外的所有管道,此 URB 會傳送CLEAR_FEATURE要求來清除裝置的ENDPOINT_HALT功能。 不過,不同於RB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL函式,此 URB 函式不會重設管道主端的數據切換。 USB 規格要求裝置在用戶端清除裝置的ENDPOINT_HALT功能之後重設裝置端數據切換,但某些不符合規範的裝置不會正確重設其數據切換。 管理這類裝置的客戶端驅動程式可以直接使用 URB_FUNCTION_SYNC_CLEAR_STALL 清除停止狀況,而不是使用 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 重設管道來補償此瑕疵。 URB_FUNCTION_SYNC_CLEAR_STALL清除裝置上的停止狀況,而不重設主機端數據切換。 這可防止不符合規範的裝置將下一個封包解譯為重新傳輸和卸除封包。
如果設定,URB 會搭配 _URB_PIPE_REQUEST 作為數據結構使用。
此 URB 函式應在PASSIVE_LEVEL傳送
可在 Windows XP 和更新版本的作業系統中使用。
URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE
從特定 USB 裝置擷取裝置描述項。 如果設定,URB 會搭配 _URB_CONTROL_DESCRIPTOR_REQUEST 作為數據結構使用。
URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT
從 USB 裝置介面上的端點擷取描述項。 如果設定,URB 會搭配 _URB_CONTROL_DESCRIPTOR_REQUEST 作為數據結構使用。
URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE
在裝置上設定裝置描述項。 如果設定,URB 會搭配 _URB_CONTROL_DESCRIPTOR_REQUEST 作為數據結構使用。
URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT
在介面的端點上設定端點描述元。 如果設定,URB 會搭配 _URB_CONTROL_DESCRIPTOR_REQUEST 作為數據結構使用。
URB_FUNCTION_SET_FEATURE_TO_DEVICE
在裝置上設定 USB 定義的功能。 如果設定,URB 會與 _URB_CONTROL_FEATURE_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_SET_FEATURE_TO_INTERFACE
在裝置的介面上設定 USB 定義功能。 如果設定,URB 會與 _URB_CONTROL_FEATURE_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_SET_FEATURE_TO_ENDPOINT
為 USB 裝置上的介面設定連接點上的 USB 定義功能。 如果設定,URB 會與 _URB_CONTROL_FEATURE_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_SET_FEATURE_TO_OTHER
在 USB 裝置上設定裝置定義目標上的 USB 定義功能。 如果設定,URB 會與 _URB_CONTROL_FEATURE_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE
清除裝置上的 USB 定義功能。 如果設定,URB 會與 _URB_CONTROL_FEATURE_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE
清除裝置介面上的 USB 定義功能。 如果設定,URB 會與 _URB_CONTROL_FEATURE_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT
清除 USB 裝置上介面的連接點上的 USB 定義功能。 如果設定,URB 會與 _URB_CONTROL_FEATURE_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_CLEAR_FEATURE_TO_OTHER
清除 USB 裝置上定義目標裝置上的 USB 定義功能。 如果設定,URB 會與 _URB_CONTROL_FEATURE_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_GET_STATUS_FROM_DEVICE
從 USB 裝置擷取狀態。 如果設定,URB 會與 _URB_CONTROL_GET_STATUS_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_GET_STATUS_FROM_INTERFACE
從 USB 裝置上的介面擷取狀態。 如果設定,URB 會與 _URB_CONTROL_GET_STATUS_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_GET_STATUS_FROM_ENDPOINT
從 USB 裝置上介面的端點擷取狀態。 如果設定,URB 會與 _URB_CONTROL_GET_STATUS_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_GET_STATUS_FROM_OTHER
從 USB 裝置上裝置定義的目標擷取狀態。 如果設定,URB 會與 _URB_CONTROL_GET_STATUS_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_VENDOR_DEVICE
將廠商特定的命令傳送至 USB 裝置。 如果設定,URB 會搭配 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 作為數據結構使用。
URB_FUNCTION_VENDOR_INTERFACE
傳送 USB 裝置上介面的廠商特定命令。 如果設定,URB 會搭配 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 作為數據結構使用。
URB_FUNCTION_VENDOR_ENDPOINT
針對 USB 裝置上介面上的連接點傳送廠商特定的命令。 如果設定,URB 會搭配 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 作為數據結構使用。
URB_FUNCTION_VENDOR_OTHER
將廠商特定的命令傳送至 USB 裝置上的裝置定義目標。 如果設定,URB 會搭配 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 作為數據結構使用。
URB_FUNCTION_CLASS_DEVICE
將 USB 定義的類別特定命令傳送至 USB 裝置。 如果設定,URB 會搭配 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 作為數據結構使用。
URB_FUNCTION_CLASS_INTERFACE
將 USB 定義的類別特定命令傳送至 USB 裝置上的介面。 如果設定,URB 會搭配 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 作為數據結構使用。
URB_FUNCTION_CLASS_ENDPOINT
將 USB 定義的類別特定命令傳送至 USB 裝置上的介面上的連接點。 如果設定,URB 會搭配 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 作為數據結構使用。
URB_FUNCTION_CLASS_OTHER
將 USB 定義的類別特定命令傳送至 USB 裝置上定義的裝置。 如果設定,URB 會搭配 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 作為數據結構使用。
URB_FUNCTION_GET_CONFIGURATION
擷取USB裝置上的目前設定。 如果設定,URB 會與 _URB_CONTROL_GET_CONFIGURATION_REQUEST 搭配使用,作為數據結構。
URB_FUNCTION_GET_INTERFACE
擷取USB裝置上介面的目前設定。 如果設定,URB 會與 _URB_CONTROL_GET_INTERFACE_REQUEST 搭配使用,作為數據結構。
可在 Windows 2000 和 Windows Vista 和更新版本的作業系統中使用。 Windows XP 中無法使用。
URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE
從 USB 裝置的介面擷取描述項。 如果設定,URB 會搭配 _URB_CONTROL_DESCRIPTOR_REQUEST 作為數據結構使用。
URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE
設定USB裝置上介面的描述元。 如果設定,URB 會搭配 _URB_CONTROL_DESCRIPTOR_REQUEST 作為數據結構使用。
URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR
從USB裝置或USB裝置上的介面擷取 Microsoft OS 功能描述元。 如果設定,URB 會與 _URB_OS_FEATURE_DESCRIPTOR_REQUEST 搭配使用,作為數據結構。
可在 Windows XP 和更新版本的作業系統中使用。
URB_FUNCTION_OPEN_STATIC_STREAMS
在指定的大量端點中開啟數據流。 如果設定,URB 會搭配 _URB_OPEN_STATIC_STREAMS 作為數據結構使用。
Windows 8 提供。 如需針對開啟數據流要求格式化 URB 的相關信息,請參閱 如何在 USB 大量端點中開啟和關閉靜態數據流。
URB_FUNCTION_CLOSE_STATIC_STREAMS
關閉指定之大量端點中的所有已開啟數據流。 如果設定,URB 會搭配 _URB_PIPE_REQUEST 作為數據結構使用。
Windows 8 提供。 如需針對開啟數據流要求格式化 URB 的相關信息,請參閱 如何在 USB 大量端點中開啟和關閉靜態數據流。
Status
包含從主機控制器驅動程式傳回時USBD_STATUS_XXX 程序代碼。
UsbdDeviceHandle
保留的。 請勿使用。
UsbdFlags
保留的。 請勿使用。
備註
_URB_HEADER 結構是所有屬於 URB 結構之 USB 要求的成員。 _URB_HEADER 結構可用來提供每個要求給主機控制器驅動程式的一般資訊。
這個結構的保留成員必須視為不透明,並保留供系統使用。
規格需求
需求 | 值 |
---|---|
標頭 | usb.h (包含 Usb.h) |
另請參閱
_URB_BULK_OR_INTERRUPT_TRANSFER
_URB_CONTROL_DESCRIPTOR_REQUEST
_URB_CONTROL_GET_CONFIGURATION_REQUEST
_URB_CONTROL_GET_INTERFACE_REQUEST
_URB_CONTROL_GET_STATUS_REQUEST
_URB_CONTROL_VENDOR_OR_CLASS_REQUEST