21 #ifndef _FXUSBDEVICE_H_ 22 #define _FXUSBDEVICE_H_ 43 __in USBD_HANDLE USBDHandle
105 __in USBD_HANDLE USBDHandle
160 __in USBD_HANDLE USBDHandle,
181 #define FX_USB_DEVICE_TAG 'sUfD' 195 __in ULONG USBDClientContractVersionForWdfClient
436 PVOID CapabilityBuffer,
454 #pragma warning(disable:28285) 559 AcquireInterfaceIterationLock(
568 ReleaseInterfaceIterationLock(
600 #if (FX_CORE_MODE == FX_CORE_USER_MODE) 653 #if (FX_CORE_MODE == FX_CORE_USER_MODE) 667 #endif // _FXUSBDEVICE_H_ _URB_CONTROL_DESCRIPTOR_REQUEST m_UrbLegacy
_Must_inspect_result_ __inline NTSTATUS GetCurrentFrameNumber(__in PULONG Current)
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_ CONST GUID * CapabilityType
_Must_inspect_result_ NTSTATUS CreateInterfaces(VOID)
enum _WDF_IO_TARGET_PURGE_IO_ACTION WDF_IO_TARGET_PURGE_IO_ACTION
FX_URB_TYPE GetFxUrbTypeForRequest(__in FxRequestBase *Request)
_In_ WDFUSBDEVICE _In_ UCHAR InterfaceIndex
FxUsbInterface * GetInterfaceFromIndex(__in UCHAR InterfaceIndex)
virtual VOID CopyParameters(__in FxRequestBase *Request)
_Must_inspect_result_ NTSTATUS GetConfigDescriptor(__out PVOID ConfigDescriptor, __inout PUSHORT ConfigDescriptorLength)
_Must_inspect_result_ NTSTATUS SelectInterface(__in PWDF_OBJECT_ATTRIBUTES PipesAttributes, __in PURB Urb)
_URB_CONTROL_DESCRIPTOR_REQUEST * m_Urb
_In_ NDIS_HANDLE _In_ PNDIS_PACKET Packet
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_ CONST GUID _In_ ULONG CapabilityBufferLength
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
FX_URB_TYPE GetUrbType(VOID)
__checkReturn NTSTATUS CreateUrb(__in_opt PWDF_OBJECT_ATTRIBUTES Attributes, __out WDFMEMORY *UrbMemory, __deref_opt_out_bcount(sizeof(URB)) PURB *Urb)
VOID SetUrbInfo(__in UCHAR StringIndex, __in USHORT LangID)
VOID(WINAPI * PINTERFACE_DEREFERENCE)(PVOID Context)
_Must_inspect_result_ NTSTATUS SelectConfig(__in PWDF_OBJECT_ATTRIBUTES PipesAttributes, __in PURB Urb, __in FX_URB_TYPE FxUrbType, __out_opt PUCHAR NumConfiguredInterfaces)
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET SetupPacket
__checkReturn NTSTATUS CreateIsochUrb(__in_opt PWDF_OBJECT_ATTRIBUTES Attributes, __in ULONG NumberOfIsochPackets, __out WDFMEMORY *UrbMemory, __deref_opt_out_bcount(GET_ISOCH_URB_SIZE(NumberOfIsochPackets)) PURB *Urb)
_In_ WDFUSBINTERFACE _In_ UCHAR _Out_ PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor
_Must_inspect_result_ NTSTATUS SendSyncUmUrb(__inout PUMURB Urb, __in ULONGLONG Time, __in_opt WDFREQUEST Request=NULL, __in_opt PWDF_REQUEST_SEND_OPTIONS Options=NULL)
_Must_inspect_result_ NTSTATUS SelectConfigSingle(__in PWDF_OBJECT_ATTRIBUTES PipeAttributes, __in PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params)
_Must_inspect_result_ _In_ WDFUSBDEVICE _Out_writes_bytes_to_opt_ ConfigDescriptorLength PVOID _Inout_ PUSHORT ConfigDescriptorLength
USBD_HANDLE GetUSBDHandle(VOID)
_Must_inspect_result_ NTSTATUS Reset(VOID)
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ PWDF_OBJECT_ATTRIBUTES PipeAttributes
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR StringIndex
_Must_inspect_result_ NTSTATUS GetPortStatus(__out PULONG PortStatus)
ULONG GetDefaultMaxTransferSize(VOID)
_Must_inspect_result_ NTSTATUS FormatControlRequest(__in FxRequestBase *Request, __in PWDF_USB_CONTROL_SETUP_PACKET Packet, __in FxRequestBuffer *RequestBuffer)
virtual VOID Purge(__in WDF_IO_TARGET_PURGE_IO_ACTION Action)
_Must_inspect_result_ NTSTATUS FormatStringRequest(__in FxRequestBase *Request, __in FxRequestBuffer *RequestBuffer, __in UCHAR StringIndex, __in USHORT LangID)
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
enum _FX_URB_TYPE FX_URB_TYPE
VOID StoreAndReferenceMemory(__in FxUsbDevice *Device, __in FxRequestBuffer *Buffer, __in PWDF_USB_CONTROL_SETUP_PACKET SetupPacket)
_Must_inspect_result_ __in WDFIOTARGET __in DEVICE_REGISTRY_PROPERTY __in ULONG __out_opt PVOID __deref_out_range(<=, BufferLength) PULONG ResultLength)
_Must_inspect_result_ NTSTATUS SelectConfigMulti(__in PWDF_OBJECT_ATTRIBUTES PipeAttributes, __in PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params)
BOOLEAN IsObjectDisposedOnRemove(__in FxObject *Object)
enum _WDF_IO_TARGET_SENT_IO_ACTION WDF_IO_TARGET_SENT_IO_ACTION
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT NumCharacters
WINUSB_INTERFACE_HANDLE m_WinUsbHandle
WDFUSBPIPE GetInterfacePipeReferenced(__in UCHAR InterfaceNumber, __in UCHAR EndpointNumber)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ NTSTATUS SelectConfigAuto(__in PWDF_OBJECT_ATTRIBUTES PipeAttributes)
PINTERFACE_DEREFERENCE m_BusInterfaceDereference
__inline USBD_CONFIGURATION_HANDLE GetConfigHandle(VOID)
USBD_STATUS GetUsbdStatus(VOID)
_Must_inspect_result_ NTSTATUS SelectConfigDescriptor(__in PWDF_OBJECT_ATTRIBUTES PipeAttributes, __in PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params)
_Must_inspect_result_ __in WDFUSBDEVICE __in CONST GUID __in ULONG __out_bcount_part_opt(CapabilityBufferLength, *ResultLength)) PVOID CapabilityBuffer
USBD_PIPE_HANDLE m_ControlPipe
_Must_inspect_result_ _In_ WDFUSBDEVICE _Out_writes_bytes_to_opt_ ConfigDescriptorLength PVOID ConfigDescriptor
FxUsbDeviceControlContext(__in FX_URB_TYPE FxUrbType)
_Must_inspect_result_ NTSTATUS FormatCycleRequest(__in FxRequestBase *Request)
virtual VOID Dispose(VOID)
FxUsbInterface * GetInterfaceFromNumber(__in UCHAR InterfaceNumber)
_In_ PVOID _In_ LONG InterfaceNumber
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_Acquires_lock_(_Global_critical_region_) VOID AcquireInterfaceIterationLock(VOID)
virtual VOID Stop(__in WDF_IO_TARGET_SENT_IO_ACTION Action)
_Must_inspect_result_ NTSTATUS SendSyncRequest(__in FxSyncRequest *Request, __in ULONGLONG Time)
_In_ WDFUSBINTERFACE UsbInterface
BOOLEAN HasMismatchedInterfacesInConfigDescriptor(VOID)
ULONG m_StringDescriptorLength
_In_ WDFUSBDEVICE _Out_ PUSB_DEVICE_DESCRIPTOR UsbDeviceDescriptor
USBD_STATUS GetUsbdStatus(VOID)
#define __drv_when(cond, annotes)
PUSB_CONFIGURATION_DESCRIPTOR m_ConfigDescriptor
_Must_inspect_result_ NTSTATUS(USB_BUSIFFN * PUSB_BUSIFFN_QUERY_BUS_TIME)(_In_ PVOID, _Out_opt_ PULONG)
ULONG m_HcdPortCapabilities
VOID PipesGotoRemoveState(__in BOOLEAN ForceRemovePipes)
FxUsbDeviceStringContext(__in FX_URB_TYPE FxUrbType)
#define STATUS_UNSUCCESSFUL
static VOID _CleanupPipesRequests(__in PLIST_ENTRY PendHead, __in PSINGLE_LIST_ENTRY SentHead)
PVOID m_BusInterfaceContext
FxUsbInterface ** m_Interfaces
VOID CleanupInterfacePipesAndDelete(__in FxUsbInterface *UsbInterface)
_Must_inspect_result_ _In_ WDFUSBINTERFACE _In_opt_ PWDF_OBJECT_ATTRIBUTES PipesAttributes
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ ULONG NumberOfIsochPackets
virtual BOOLEAN Dispose(VOID)
virtual _Must_inspect_result_ NTSTATUS Start(VOID)
_Must_inspect_result_ NTSTATUS InitDevice(__in ULONG USBDClientContractVersionForWdfClient)
VOID RemoveDeletedInterface(__in FxUsbInterface *Interface)
#define _Must_inspect_result_
_Must_inspect_result_ _In_ WDFDEVICE Device
_Outptr_ PUSB_DEVICE_HANDLE _In_ PUSB_DEVICE_HANDLE _In_ USHORT PortStatus
USBD_PIPE_HANDLE GetControlPipeHandle(VOID)
virtual VOID CopyParameters(__in FxRequestBase *Request)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ NTSTATUS AllocateDescriptor(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in size_t BufferSize)
__checkReturn NTSTATUS AllocateUrb(__in USBD_HANDLE USBDHandle)
BOOLEAN m_MismatchedInterfacesInConfigDescriptor
_Must_inspect_result_ __in WDFKEY __in PCUNICODE_STRING __in ULONG __in ULONG __in_ecount(ValueLength) PVOID Value)
_URB_CONTROL_TRANSFER * m_Urb
FxUsbDevice(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
virtual BOOLEAN Dispose(VOID)
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
_Must_inspect_result_ NTSTATUS CyclePort(VOID)
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
__checkReturn NTSTATUS AllocateUrb(__in USBD_HANDLE USBDHandle)
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
VOID FormatInterfaceSelectSettingUrb(__in PURB Urb, __in USHORT NumEndpoints, __in UCHAR InterfaceNumber, __in UCHAR SettingNumber)
_Must_inspect_result_ NTSTATUS QueryUsbCapability(__in CONST GUID *CapabilityType, __in ULONG CapabilityBufferLength, __drv_when(CapabilityBufferLength==0, __out_opt) __drv_when(CapabilityBufferLength !=0 &&ResultLength==NULL, __out_bcount(CapabilityBufferLength)) __drv_when(CapabilityBufferLength !=0 &&ResultLength !=NULL, __out_bcount_part_opt(CapabilityBufferLength, *ResultLength)) PVOID CapabilityBuffer, __out_opt __drv_when(ResultLength !=NULL, __deref_out_range(<=, CapabilityBufferLength)) PULONG ResultLength)
PUSB_BUSIFFN_QUERY_BUS_TIME m_QueryBusTime
_Must_inspect_result_ NTSTATUS SelectInterfaceByInterface(__in PWDF_OBJECT_ATTRIBUTES PipesAttributes, __in PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor)
_Must_inspect_result_ NTSTATUS GetInterfaceNumberFromInterface(__in WDFUSBINTERFACE UsbInterface, __out PUCHAR InterfaceNumber)
_URB_CONTROL_TRANSFER m_UrbLegacy
_Must_inspect_result_ NTSTATUS GetString(__in_ecount(*NumCharacters) PUSHORT String, __in PUSHORT NumCharacters, __in UCHAR StringIndex, __in_opt USHORT LangID, __in_opt WDFREQUEST Request=NULL, __in_opt PWDF_REQUEST_SEND_OPTIONS Options=NULL)
_Must_inspect_result_ NTSTATUS SelectConfigInterfaces(__in PWDF_OBJECT_ATTRIBUTES PipesAttributes, __in PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, __in_ecount(NumInterfaces) PUSB_INTERFACE_DESCRIPTOR *InterfaceDescriptors, __in ULONG NumInterfaces)
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
USBD_CONFIGURATION_HANDLE m_ConfigHandle
USB_DEVICE_DESCRIPTOR m_DeviceDescriptor
IWudfFile * m_pHostTargetFile
#define RtlCopyMemory(Destination, Source, Length)
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_ WDFREQUEST _In_ WDFMEMORY UrbMemory
PUSB_STRING_DESCRIPTOR m_StringDescriptor
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
#define __deref_opt_out_bcount(size)
USBD_VERSION_INFORMATION m_UsbdVersionInformation
UCHAR GetNumInterfaces(VOID)
FxUsbUrb(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in USBD_HANDLE USBDHandle, __in_bcount(BufferSize) PVOID Buffer, __in size_t BufferSize)
VOID GetInformation(__out PWDF_USB_DEVICE_INFORMATION Information)
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
_Must_inspect_result_ NTSTATUS IsConnected(VOID)
~FxUsbDeviceControlContext(VOID)
~FxUsbDeviceStringContext(VOID)
__inline VOID CopyDeviceDescriptor(__out PUSB_DEVICE_DESCRIPTOR UsbDeviceDescriptor)
static PLARGE_INTEGER Time
FxWaitLockInternal m_InterfaceIterationLock
_Must_inspect_result_ NTSTATUS Deconfig(VOID)
virtual VOID Dispose(VOID)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
UCHAR GetInterfaceNumEndpoints(__in UCHAR InterfaceNumber)
_Releases_lock_(_Global_critical_region_) VOID ReleaseInterfaceIterationLock(VOID)
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes