/*++ Copyright (c) Microsoft Corporation. All rights reserved. _WdfVersionBuild_ Module Name: WdfUsb.h Abstract: Contains prototypes for interfacing with a USB connected device Environment: kernel mode only Revision History: --*/ // // NOTE: This header is generated by stubwork. Please make any // modifications to the corresponding template files // (.x or .y) and use stubwork to regenerate the header // #ifndef _WDFUSB_H_ #define _WDFUSB_H_ #ifndef WDF_EXTERN_C #ifdef __cplusplus #define WDF_EXTERN_C extern "C" #define WDF_EXTERN_C_START extern "C" { #define WDF_EXTERN_C_END } #else #define WDF_EXTERN_C #define WDF_EXTERN_C_START #define WDF_EXTERN_C_END #endif #endif WDF_EXTERN_C_START #if (NTDDI_VERSION >= NTDDI_WIN2K) #ifndef BMREQUEST_HOST_TO_DEVICE #define BMREQUEST_HOST_TO_DEVICE 0 #endif // BMREQUEST_HOST_TO_DEVICE #ifndef BMREQUEST_DEVICE_TO_HOST #define BMREQUEST_DEVICE_TO_HOST 1 #endif // BMREQUEST_DEVICE_TO_HOST #ifndef BMREQUEST_STANDARD #define BMREQUEST_STANDARD 0 #endif // BMREQUEST_STANDARD #ifndef BMREQUEST_CLASS #define BMREQUEST_CLASS 1 #endif // BMREQUEST_CLASS #ifndef BMREQUEST_VENDOR #define BMREQUEST_VENDOR 2 #endif // BMREQUEST_VENDOR #ifndef BMREQUEST_TO_DEVICE #define BMREQUEST_TO_DEVICE 0 #endif // BMREQUEST_TO_DEVICE #ifndef BMREQUEST_TO_INTERFACE #define BMREQUEST_TO_INTERFACE 1 #endif // BMREQUEST_TO_INTERFACE #ifndef BMREQUEST_TO_ENDPOINT #define BMREQUEST_TO_ENDPOINT 2 #endif // BMREQUEST_TO_ENDPOINT #ifndef BMREQUEST_TO_OTHER #define BMREQUEST_TO_OTHER 3 #endif // BMREQUEST_TO_OTHER typedef enum _WDF_USB_REQUEST_TYPE { WdfUsbRequestTypeInvalid = 0, WdfUsbRequestTypeNoFormat, WdfUsbRequestTypeDeviceString, WdfUsbRequestTypeDeviceControlTransfer, WdfUsbRequestTypeDeviceUrb, WdfUsbRequestTypePipeWrite, WdfUsbRequestTypePipeRead, WdfUsbRequestTypePipeAbort, WdfUsbRequestTypePipeReset, WdfUsbRequestTypePipeUrb, } WDF_USB_REQUEST_TYPE, *PWDF_USB_REQUEST_TYPE; typedef enum _WDF_USB_BMREQUEST_DIRECTION { BmRequestHostToDevice = BMREQUEST_HOST_TO_DEVICE, BmRequestDeviceToHost = BMREQUEST_DEVICE_TO_HOST, } WDF_USB_BMREQUEST_DIRECTION; typedef enum _WDF_USB_BMREQUEST_TYPE { BmRequestStandard = BMREQUEST_STANDARD, BmRequestClass = BMREQUEST_CLASS, BmRequestVendor = BMREQUEST_VENDOR, } WDF_USB_BMREQUEST_TYPE; typedef enum _WDF_USB_BMREQUEST_RECIPIENT { BmRequestToDevice = BMREQUEST_TO_DEVICE, BmRequestToInterface = BMREQUEST_TO_INTERFACE, BmRequestToEndpoint = BMREQUEST_TO_ENDPOINT, BmRequestToOther = BMREQUEST_TO_OTHER, } WDF_USB_BMREQUEST_RECIPIENT; typedef enum _WDF_USB_PIPE_TYPE { WdfUsbPipeTypeInvalid = 0, WdfUsbPipeTypeControl, WdfUsbPipeTypeIsochronous, WdfUsbPipeTypeBulk, WdfUsbPipeTypeInterrupt, } WDF_USB_PIPE_TYPE; typedef enum _WdfUsbTargetDeviceSelectConfigType { WdfUsbTargetDeviceSelectConfigTypeInvalid = 0, WdfUsbTargetDeviceSelectConfigTypeDeconfig = 1, WdfUsbTargetDeviceSelectConfigTypeSingleInterface = 2, WdfUsbTargetDeviceSelectConfigTypeMultiInterface = 3, WdfUsbTargetDeviceSelectConfigTypeInterfacesPairs = 4, WdfUsbTargetDeviceSelectConfigTypeInterfacesDescriptor = 5, WdfUsbTargetDeviceSelectConfigTypeUrb = 6, } WdfUsbTargetDeviceSelectConfigType; typedef enum _WdfUsbTargetDeviceSelectSettingType { WdfUsbInterfaceSelectSettingTypeDescriptor = 0x10, WdfUsbInterfaceSelectSettingTypeSetting = 0x11, WdfUsbInterfaceSelectSettingTypeUrb = 0x12, } WdfUsbTargetDeviceSelectSettingType; typedef enum _WDF_USB_DEVICE_TRAITS { WDF_USB_DEVICE_TRAIT_SELF_POWERED = 0x00000001, WDF_USB_DEVICE_TRAIT_REMOTE_WAKE_CAPABLE = 0x00000002, WDF_USB_DEVICE_TRAIT_AT_HIGH_SPEED = 0x00000004, } WDF_USB_DEVICE_TRAITS; typedef union _WDF_USB_CONTROL_SETUP_PACKET { struct { union { struct { // // Valid values are BMREQUEST_TO_DEVICE, BMREQUEST_TO_INTERFACE, // BMREQUEST_TO_ENDPOINT, BMREQUEST_TO_OTHER // BYTE Recipient:2; BYTE Reserved:3; // // Valid values are BMREQUEST_STANDARD, BMREQUEST_CLASS, // BMREQUEST_VENDOR // BYTE Type:2; // // Valid values are BMREQUEST_HOST_TO_DEVICE, // BMREQUEST_DEVICE_TO_HOST // BYTE Dir:1; } Request; BYTE Byte; } bm; BYTE bRequest; union { struct { BYTE LowByte; BYTE HiByte; } Bytes; USHORT Value; } wValue; union { struct { BYTE LowByte; BYTE HiByte; } Bytes; USHORT Value; } wIndex; USHORT wLength; } Packet; struct { BYTE Bytes[8]; } Generic; } WDF_USB_CONTROL_SETUP_PACKET, *PWDF_USB_CONTROL_SETUP_PACKET; FORCEINLINE VOID WDF_USB_CONTROL_SETUP_PACKET_INIT( _Out_ PWDF_USB_CONTROL_SETUP_PACKET Packet, _In_ WDF_USB_BMREQUEST_DIRECTION Direction, _In_ WDF_USB_BMREQUEST_RECIPIENT Recipient, _In_ BYTE Request, _In_ USHORT Value, _In_ USHORT Index ) { RtlZeroMemory(Packet, sizeof(WDF_USB_CONTROL_SETUP_PACKET)); Packet->Packet.bm.Request.Dir = (BYTE) Direction; Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard; Packet->Packet.bm.Request.Recipient = (BYTE) Recipient; Packet->Packet.bRequest = Request; Packet->Packet.wValue.Value = Value; Packet->Packet.wIndex.Value = Index; // Packet->Packet.wLength will be set by the formatting function } FORCEINLINE VOID WDF_USB_CONTROL_SETUP_PACKET_INIT_CLASS( _Out_ PWDF_USB_CONTROL_SETUP_PACKET Packet, _In_ WDF_USB_BMREQUEST_DIRECTION Direction, _In_ WDF_USB_BMREQUEST_RECIPIENT Recipient, _In_ BYTE Request, _In_ USHORT Value, _In_ USHORT Index ) { RtlZeroMemory(Packet, sizeof(WDF_USB_CONTROL_SETUP_PACKET)); Packet->Packet.bm.Request.Dir = (BYTE) Direction; Packet->Packet.bm.Request.Type = (BYTE) BmRequestClass; Packet->Packet.bm.Request.Recipient = (BYTE) Recipient; Packet->Packet.bRequest = Request; Packet->Packet.wValue.Value = Value; Packet->Packet.wIndex.Value = Index; // Packet->Packet.wLength will be set by the formatting function } FORCEINLINE VOID WDF_USB_CONTROL_SETUP_PACKET_INIT_VENDOR( _Out_ PWDF_USB_CONTROL_SETUP_PACKET Packet, _In_ WDF_USB_BMREQUEST_DIRECTION Direction, _In_ WDF_USB_BMREQUEST_RECIPIENT Recipient, _In_ BYTE Request, _In_ USHORT Value, _In_ USHORT Index ) { RtlZeroMemory(Packet, sizeof(WDF_USB_CONTROL_SETUP_PACKET)); Packet->Packet.bm.Request.Dir = (BYTE) Direction; Packet->Packet.bm.Request.Type = (BYTE) BmRequestVendor; Packet->Packet.bm.Request.Recipient = (BYTE) Recipient; Packet->Packet.bRequest = Request; Packet->Packet.wValue.Value = Value; Packet->Packet.wIndex.Value = Index; // Packet->Packet.wLength will be set by the formatting function } FORCEINLINE VOID WDF_USB_CONTROL_SETUP_PACKET_INIT_FEATURE( _Out_ PWDF_USB_CONTROL_SETUP_PACKET Packet, _In_ WDF_USB_BMREQUEST_RECIPIENT BmRequestRecipient, _In_ USHORT FeatureSelector, _In_ USHORT Index, _In_ BOOLEAN SetFeature ) { RtlZeroMemory(Packet, sizeof(WDF_USB_CONTROL_SETUP_PACKET)); Packet->Packet.bm.Request.Dir = (BYTE) BmRequestHostToDevice; Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard; Packet->Packet.bm.Request.Recipient = (BYTE) BmRequestRecipient; if (SetFeature) { Packet->Packet.bRequest = USB_REQUEST_SET_FEATURE; } else { Packet->Packet.bRequest = USB_REQUEST_CLEAR_FEATURE; } Packet->Packet.wValue.Value = FeatureSelector; Packet->Packet.wIndex.Value = Index; // Packet->Packet.wLength will be set by the formatting function } FORCEINLINE VOID WDF_USB_CONTROL_SETUP_PACKET_INIT_GET_STATUS( _Out_ PWDF_USB_CONTROL_SETUP_PACKET Packet, _In_ WDF_USB_BMREQUEST_RECIPIENT BmRequestRecipient, _In_ USHORT Index ) { RtlZeroMemory(Packet, sizeof(WDF_USB_CONTROL_SETUP_PACKET)); Packet->Packet.bm.Request.Dir = (BYTE) BmRequestDeviceToHost; Packet->Packet.bm.Request.Type = (BYTE) BmRequestStandard; Packet->Packet.bm.Request.Recipient = (BYTE) BmRequestRecipient; Packet->Packet.bRequest = USB_REQUEST_GET_STATUS; Packet->Packet.wIndex.Value = Index; Packet->Packet.wValue.Value = 0; // Packet->Packet.wLength will be set by the formatting function } typedef struct _WDF_USB_REQUEST_COMPLETION_PARAMS { USBD_STATUS UsbdStatus; WDF_USB_REQUEST_TYPE Type; union { struct { WDFMEMORY Buffer; USHORT LangID; UCHAR StringIndex; // // If STATUS_BUFFER_OVERFLOW is returned, this field will contain the // number of bytes required to retrieve the entire string. // UCHAR RequiredSize; } DeviceString; struct { WDFMEMORY Buffer; WDF_USB_CONTROL_SETUP_PACKET SetupPacket; ULONG Length; } DeviceControlTransfer; struct { WDFMEMORY Buffer; } DeviceUrb; struct { WDFMEMORY Buffer; size_t Length; size_t Offset; } PipeWrite; struct { WDFMEMORY Buffer; size_t Length; size_t Offset; } PipeRead; struct { WDFMEMORY Buffer; } PipeUrb; } Parameters; } WDF_USB_REQUEST_COMPLETION_PARAMS, *PWDF_USB_REQUEST_COMPLETION_PARAMS; typedef _Function_class_(EVT_WDF_USB_READER_COMPLETION_ROUTINE) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) VOID STDCALL EVT_WDF_USB_READER_COMPLETION_ROUTINE( _In_ WDFUSBPIPE Pipe, _In_ WDFMEMORY Buffer, _In_ size_t NumBytesTransferred, _In_ WDFCONTEXT Context ); typedef EVT_WDF_USB_READER_COMPLETION_ROUTINE *PFN_WDF_USB_READER_COMPLETION_ROUTINE; typedef _Function_class_(EVT_WDF_USB_READERS_FAILED) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) BOOLEAN STDCALL EVT_WDF_USB_READERS_FAILED( _In_ WDFUSBPIPE Pipe, _In_ NTSTATUS Status, _In_ USBD_STATUS UsbdStatus ); typedef EVT_WDF_USB_READERS_FAILED *PFN_WDF_USB_READERS_FAILED; typedef struct _WDF_USB_CONTINUOUS_READER_CONFIG { // // Size of the string in bytes // ULONG Size; // // Number of bytes to send ask for from the usb device. // size_t TransferLength; // // Number of bytes to allocate before the requested transfer length // size_t HeaderLength; // // Number of bytes to allocate after the requested transfer length // size_t TrailerLength; // // Number of reads to send to the device at once. If zero is specified, the // default will be used. // UCHAR NumPendingReads; // // Optional attributes to apply to each WDFMEMORY allocated for each read // PWDF_OBJECT_ATTRIBUTES BufferAttributes; // // Event callback invoked when a read is completed // PFN_WDF_USB_READER_COMPLETION_ROUTINE EvtUsbTargetPipeReadComplete; // // Context to be passed to EvtUsbTargetPipeReadComplete // WDFCONTEXT EvtUsbTargetPipeReadCompleteContext; // // Event callback invoked when a reader fails. If TRUE is returned, the // readers are restarted. // PFN_WDF_USB_READERS_FAILED EvtUsbTargetPipeReadersFailed; } WDF_USB_CONTINUOUS_READER_CONFIG, *PWDF_USB_CONTINUOUS_READER_CONFIG; FORCEINLINE VOID WDF_USB_CONTINUOUS_READER_CONFIG_INIT( _Out_ PWDF_USB_CONTINUOUS_READER_CONFIG Config, _In_ PFN_WDF_USB_READER_COMPLETION_ROUTINE EvtUsbTargetPipeReadComplete, _In_ WDFCONTEXT EvtUsbTargetPipeReadCompleteContext, _In_ size_t TransferLength ) { RtlZeroMemory(Config, sizeof(WDF_USB_CONTINUOUS_READER_CONFIG)); Config->Size = sizeof(WDF_USB_CONTINUOUS_READER_CONFIG); Config->EvtUsbTargetPipeReadComplete = EvtUsbTargetPipeReadComplete; Config->EvtUsbTargetPipeReadCompleteContext = EvtUsbTargetPipeReadCompleteContext; Config->TransferLength = TransferLength; } FORCEINLINE WDFIOTARGET WdfUsbTargetDeviceGetIoTarget( _In_ WDFUSBDEVICE UsbDevice ) { return (WDFIOTARGET) UsbDevice; } typedef struct _WDF_USB_DEVICE_INFORMATION { // // Size of this structure in bytes // ULONG Size; // // USBD version information // USBD_VERSION_INFORMATION UsbdVersionInformation; // // Usb controller port capabilities // ULONG HcdPortCapabilities; // // Bitfield of WDF_USB_DEVICE_TRAITS values // ULONG Traits; } WDF_USB_DEVICE_INFORMATION, *PWDF_USB_DEVICE_INFORMATION; FORCEINLINE VOID WDF_USB_DEVICE_INFORMATION_INIT( _Out_ PWDF_USB_DEVICE_INFORMATION Udi ) { RtlZeroMemory(Udi, sizeof(WDF_USB_DEVICE_INFORMATION)); Udi->Size = sizeof(WDF_USB_DEVICE_INFORMATION); } typedef struct _WDF_USB_INTERFACE_SETTING_PAIR { // // Interface to select // WDFUSBINTERFACE UsbInterface; // // Setting to select on UsbInterface // UCHAR SettingIndex; } WDF_USB_INTERFACE_SETTING_PAIR, *PWDF_USB_INTERFACE_SETTING_PAIR; typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS { // // Size of the structure in bytes // ULONG Size; // // Type of select config, one of WdfUsbTargetDeviceSelectConfigType values // WdfUsbTargetDeviceSelectConfigType Type; union { struct { // // Configuration descriptor to use // PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; // // Array of interface descriptors pointers. // PUSB_INTERFACE_DESCRIPTOR * InterfaceDescriptors; // // Number of elements in the InterfaceDescrtiptors pointer array. // ULONG NumInterfaceDescriptors; } Descriptor; struct { // // Preallocated select config URB formatted by the caller. // Will be used, as supplied without modification, as the select // config request. // PURB Urb; } Urb; struct { // // Number of pipes configured on the single after. This value is // returned to the caller after a succssful call. // UCHAR NumberConfiguredPipes; // // The interface which was configred. This value is returned to the // caller after a successful call. // WDFUSBINTERFACE ConfiguredUsbInterface; } SingleInterface; struct { // // Number of interface pairs in the Pairs array // UCHAR NumberInterfaces; // // Array of interface + settings // PWDF_USB_INTERFACE_SETTING_PAIR Pairs; // // Number of interfaces which were configured after a successful call // UCHAR NumberOfConfiguredInterfaces; } MultiInterface; } Types; } WDF_USB_DEVICE_SELECT_CONFIG_PARAMS, *PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS; FORCEINLINE VOID WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE( _Out_ PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params ) { RtlZeroMemory(Params, sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS)); Params->Size = sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS); Params->Type = WdfUsbTargetDeviceSelectConfigTypeSingleInterface; } FORCEINLINE VOID WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES( _Out_ PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params, _In_opt_ UCHAR NumberInterfaces, _In_opt_ PWDF_USB_INTERFACE_SETTING_PAIR SettingPairs ) { RtlZeroMemory(Params, sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS)); Params->Size = sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS); if (SettingPairs != NULL && NumberInterfaces != 0) { Params->Type = WdfUsbTargetDeviceSelectConfigTypeInterfacesPairs; Params->Types.MultiInterface.NumberInterfaces = NumberInterfaces; Params->Types.MultiInterface.Pairs = SettingPairs; } else { Params->Type = WdfUsbTargetDeviceSelectConfigTypeMultiInterface; } } FORCEINLINE VOID WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_INTERFACES_DESCRIPTORS( _Out_ PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params, _In_ PUSB_CONFIGURATION_DESCRIPTOR ConfigDescriptor, _In_ PUSB_INTERFACE_DESCRIPTOR* InterfaceDescriptors, _In_ ULONG NumInterfaceDescriptors ) { RtlZeroMemory(Params, sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS)); Params->Size = sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS); Params->Type = WdfUsbTargetDeviceSelectConfigTypeInterfacesDescriptor; Params->Types.Descriptor.ConfigurationDescriptor = ConfigDescriptor; Params->Types.Descriptor.InterfaceDescriptors = InterfaceDescriptors; Params->Types.Descriptor.NumInterfaceDescriptors = NumInterfaceDescriptors; } FORCEINLINE VOID WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_URB( _Out_ PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params, _In_ PURB Urb ) { RtlZeroMemory(Params, sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS)); Params->Size = sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS); Params->Type = WdfUsbTargetDeviceSelectConfigTypeUrb; Params->Types.Urb.Urb = Urb; } VOID FORCEINLINE WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_DECONFIG( _Out_ PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params ) { RtlZeroMemory(Params, sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS)); Params->Size = sizeof(WDF_USB_DEVICE_SELECT_CONFIG_PARAMS); Params->Type = WdfUsbTargetDeviceSelectConfigTypeDeconfig; } typedef struct _WDF_USB_INTERFACE_SELECT_SETTING_PARAMS { // // Size of this data structure in bytes // ULONG Size; // // Type of select interface as indicated by one of the // WdfUsbTargetDeviceSelectSettingType values. // WdfUsbTargetDeviceSelectSettingType Type; union { struct { // // Interface descriptor that will be used in the interface selection // PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor; } Descriptor; struct { // // The setting index of the WDFUSBINTERFACE to use // UCHAR SettingIndex; } Interface; struct { // // Preformatted select interface URB which will be used in the // select interface request. // PURB Urb; } Urb; } Types; } WDF_USB_INTERFACE_SELECT_SETTING_PARAMS, *PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS; FORCEINLINE VOID WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_INIT_DESCRIPTOR( _Out_ PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS Params, _In_ PUSB_INTERFACE_DESCRIPTOR Interface ) { RtlZeroMemory(Params, sizeof(WDF_USB_INTERFACE_SELECT_SETTING_PARAMS)); Params->Size = sizeof(WDF_USB_INTERFACE_SELECT_SETTING_PARAMS); Params->Type = WdfUsbInterfaceSelectSettingTypeDescriptor; Params->Types.Descriptor.InterfaceDescriptor = Interface; } FORCEINLINE VOID WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_INIT_URB( _Out_ PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS Params, _In_ PURB Urb ) { RtlZeroMemory(Params, sizeof(WDF_USB_INTERFACE_SELECT_SETTING_PARAMS)); Params->Size = sizeof(WDF_USB_INTERFACE_SELECT_SETTING_PARAMS); Params->Type = WdfUsbInterfaceSelectSettingTypeUrb; Params->Types.Urb.Urb = Urb; } FORCEINLINE VOID WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_INIT_SETTING( _Out_ PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS Params, _In_ UCHAR SettingIndex ) { RtlZeroMemory(Params, sizeof(WDF_USB_INTERFACE_SELECT_SETTING_PARAMS)); Params->Size = sizeof(WDF_USB_INTERFACE_SELECT_SETTING_PARAMS); Params->Type = WdfUsbInterfaceSelectSettingTypeSetting; Params->Types.Interface.SettingIndex = SettingIndex; } FORCEINLINE WDFIOTARGET WdfUsbTargetPipeGetIoTarget( _In_ WDFUSBPIPE Pipe ) { return (WDFIOTARGET) Pipe; } typedef struct _WDF_USB_PIPE_INFORMATION { // // Size of the structure in bytes // ULONG Size; // // Maximum packet size this device is capable of // ULONG MaximumPacketSize; // // Raw endpoint address of the device as described by its descriptor // UCHAR EndpointAddress; // // Polling interval // UCHAR Interval; // // Which alternate setting this structure is relevant for // UCHAR SettingIndex; // // The type of the pipe WDF_USB_PIPE_TYPE PipeType; // // Maximum size of one transfer which should be sent to the host controller // ULONG MaximumTransferSize; } WDF_USB_PIPE_INFORMATION, *PWDF_USB_PIPE_INFORMATION; FORCEINLINE VOID WDF_USB_PIPE_INFORMATION_INIT( _Out_ PWDF_USB_PIPE_INFORMATION Info ) { RtlZeroMemory(Info, sizeof(WDF_USB_PIPE_INFORMATION)); Info->Size = sizeof(WDF_USB_PIPE_INFORMATION); } FORCEINLINE BOOLEAN WDF_USB_PIPE_DIRECTION_IN( _In_ UCHAR EndpointAddress ) { // // If the high bit is set, we have an IN pipe // return (EndpointAddress & USB_ENDPOINT_DIRECTION_MASK) ? TRUE : FALSE; } FORCEINLINE BOOLEAN WDF_USB_PIPE_DIRECTION_OUT( _In_ UCHAR EndpointAddress ) { // // If the high bit is clear, we have an OUT pipe // return (EndpointAddress & USB_ENDPOINT_DIRECTION_MASK) == 0x00 ? TRUE : FALSE; } typedef struct _WDF_USB_DEVICE_CREATE_CONFIG { // // Size of this structure in bytes // ULONG Size; // // USBD Client Contraction of the Wdf Client // ULONG USBDClientContractVersion; } WDF_USB_DEVICE_CREATE_CONFIG, *PWDF_USB_DEVICE_CREATE_CONFIG; FORCEINLINE VOID WDF_USB_DEVICE_CREATE_CONFIG_INIT( _Out_ PWDF_USB_DEVICE_CREATE_CONFIG Config, _In_ ULONG USBDClientContractVersion ) { RtlZeroMemory(Config, sizeof(WDF_USB_DEVICE_CREATE_CONFIG)); Config->Size = sizeof(WDF_USB_DEVICE_CREATE_CONFIG); Config->USBDClientContractVersion = USBDClientContractVersion; } // // For WdfUsbTargetDeviceCreateIsochUrb's typedef // #ifdef __MSC_VER #pragma warning(disable:28285) #endif // // WDF Function: WdfUsbTargetDeviceCreate // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICECREATE)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFDEVICE Device, _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes, _Out_ WDFUSBDEVICE* UsbDevice ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceCreate( _In_ WDFDEVICE Device, _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes, _Out_ WDFUSBDEVICE* UsbDevice ) { return ((PFN_WDFUSBTARGETDEVICECREATE) WdfFunctions[WdfUsbTargetDeviceCreateTableIndex])(WdfDriverGlobals, Device, Attributes, UsbDevice); } // // WDF Function: WdfUsbTargetDeviceCreateWithParameters // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICECREATEWITHPARAMETERS)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFDEVICE Device, _In_ PWDF_USB_DEVICE_CREATE_CONFIG Config, _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes, _Out_ WDFUSBDEVICE* UsbDevice ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceCreateWithParameters( _In_ WDFDEVICE Device, _In_ PWDF_USB_DEVICE_CREATE_CONFIG Config, _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes, _Out_ WDFUSBDEVICE* UsbDevice ) { return ((PFN_WDFUSBTARGETDEVICECREATEWITHPARAMETERS) WdfFunctions[WdfUsbTargetDeviceCreateWithParametersTableIndex])(WdfDriverGlobals, Device, Config, Attributes, UsbDevice); } // // WDF Function: WdfUsbTargetDeviceRetrieveInformation // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICERETRIEVEINFORMATION)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _Out_ PWDF_USB_DEVICE_INFORMATION Information ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceRetrieveInformation( _In_ WDFUSBDEVICE UsbDevice, _Out_ PWDF_USB_DEVICE_INFORMATION Information ) { return ((PFN_WDFUSBTARGETDEVICERETRIEVEINFORMATION) WdfFunctions[WdfUsbTargetDeviceRetrieveInformationTableIndex])(WdfDriverGlobals, UsbDevice, Information); } // // WDF Function: WdfUsbTargetDeviceGetDeviceDescriptor // typedef _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI VOID (STDCALL *PFN_WDFUSBTARGETDEVICEGETDEVICEDESCRIPTOR)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _Out_ PUSB_DEVICE_DESCRIPTOR UsbDeviceDescriptor ); _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE VOID WdfUsbTargetDeviceGetDeviceDescriptor( _In_ WDFUSBDEVICE UsbDevice, _Out_ PUSB_DEVICE_DESCRIPTOR UsbDeviceDescriptor ) { ((PFN_WDFUSBTARGETDEVICEGETDEVICEDESCRIPTOR) WdfFunctions[WdfUsbTargetDeviceGetDeviceDescriptorTableIndex])(WdfDriverGlobals, UsbDevice, UsbDeviceDescriptor); } // // WDF Function: WdfUsbTargetDeviceRetrieveConfigDescriptor // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICERETRIEVECONFIGDESCRIPTOR)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _Out_writes_bytes_to_opt_(*ConfigDescriptorLength,*ConfigDescriptorLength) PVOID ConfigDescriptor, _Inout_ PUSHORT ConfigDescriptorLength ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceRetrieveConfigDescriptor( _In_ WDFUSBDEVICE UsbDevice, _Out_writes_bytes_to_opt_(*ConfigDescriptorLength,*ConfigDescriptorLength) PVOID ConfigDescriptor, _Inout_ PUSHORT ConfigDescriptorLength ) { return ((PFN_WDFUSBTARGETDEVICERETRIEVECONFIGDESCRIPTOR) WdfFunctions[WdfUsbTargetDeviceRetrieveConfigDescriptorTableIndex])(WdfDriverGlobals, UsbDevice, ConfigDescriptor, ConfigDescriptorLength); } // // WDF Function: WdfUsbTargetDeviceQueryString // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICEQUERYSTRING)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _Out_writes_opt_(*NumCharacters) PUSHORT String, _Inout_ PUSHORT NumCharacters, _In_ UCHAR StringIndex, _In_opt_ USHORT LangID ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceQueryString( _In_ WDFUSBDEVICE UsbDevice, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _Out_writes_opt_(*NumCharacters) PUSHORT String, _Inout_ PUSHORT NumCharacters, _In_ UCHAR StringIndex, _In_opt_ USHORT LangID ) { return ((PFN_WDFUSBTARGETDEVICEQUERYSTRING) WdfFunctions[WdfUsbTargetDeviceQueryStringTableIndex])(WdfDriverGlobals, UsbDevice, Request, RequestOptions, String, NumCharacters, StringIndex, LangID); } // // WDF Function: WdfUsbTargetDeviceAllocAndQueryString // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICEALLOCANDQUERYSTRING)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_opt_ PWDF_OBJECT_ATTRIBUTES StringMemoryAttributes, _Out_ WDFMEMORY* StringMemory, _Out_opt_ PUSHORT NumCharacters, _In_ UCHAR StringIndex, _In_opt_ USHORT LangID ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceAllocAndQueryString( _In_ WDFUSBDEVICE UsbDevice, _In_opt_ PWDF_OBJECT_ATTRIBUTES StringMemoryAttributes, _Out_ WDFMEMORY* StringMemory, _Out_opt_ PUSHORT NumCharacters, _In_ UCHAR StringIndex, _In_opt_ USHORT LangID ) { return ((PFN_WDFUSBTARGETDEVICEALLOCANDQUERYSTRING) WdfFunctions[WdfUsbTargetDeviceAllocAndQueryStringTableIndex])(WdfDriverGlobals, UsbDevice, StringMemoryAttributes, StringMemory, NumCharacters, StringIndex, LangID); } // // WDF Function: WdfUsbTargetDeviceFormatRequestForString // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORSTRING)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_ WDFREQUEST Request, _In_ WDFMEMORY Memory, _In_opt_ PWDFMEMORY_OFFSET Offset, _In_ UCHAR StringIndex, _In_opt_ USHORT LangID ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceFormatRequestForString( _In_ WDFUSBDEVICE UsbDevice, _In_ WDFREQUEST Request, _In_ WDFMEMORY Memory, _In_opt_ PWDFMEMORY_OFFSET Offset, _In_ UCHAR StringIndex, _In_opt_ USHORT LangID ) { return ((PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORSTRING) WdfFunctions[WdfUsbTargetDeviceFormatRequestForStringTableIndex])(WdfDriverGlobals, UsbDevice, Request, Memory, Offset, StringIndex, LangID); } // // WDF Function: WdfUsbTargetDeviceGetNumInterfaces // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI UCHAR (STDCALL *PFN_WDFUSBTARGETDEVICEGETNUMINTERFACES)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE UCHAR WdfUsbTargetDeviceGetNumInterfaces( _In_ WDFUSBDEVICE UsbDevice ) { return ((PFN_WDFUSBTARGETDEVICEGETNUMINTERFACES) WdfFunctions[WdfUsbTargetDeviceGetNumInterfacesTableIndex])(WdfDriverGlobals, UsbDevice); } // // WDF Function: WdfUsbTargetDeviceSelectConfig // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICESELECTCONFIG)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_opt_ PWDF_OBJECT_ATTRIBUTES PipeAttributes, _Inout_ PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceSelectConfig( _In_ WDFUSBDEVICE UsbDevice, _In_opt_ PWDF_OBJECT_ATTRIBUTES PipeAttributes, _Inout_ PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params ) { return ((PFN_WDFUSBTARGETDEVICESELECTCONFIG) WdfFunctions[WdfUsbTargetDeviceSelectConfigTableIndex])(WdfDriverGlobals, UsbDevice, PipeAttributes, Params); } // // WDF Function: WdfUsbTargetDeviceWdmGetConfigurationHandle // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI USBD_CONFIGURATION_HANDLE (STDCALL *PFN_WDFUSBTARGETDEVICEWDMGETCONFIGURATIONHANDLE)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE USBD_CONFIGURATION_HANDLE WdfUsbTargetDeviceWdmGetConfigurationHandle( _In_ WDFUSBDEVICE UsbDevice ) { return ((PFN_WDFUSBTARGETDEVICEWDMGETCONFIGURATIONHANDLE) WdfFunctions[WdfUsbTargetDeviceWdmGetConfigurationHandleTableIndex])(WdfDriverGlobals, UsbDevice); } // // WDF Function: WdfUsbTargetDeviceRetrieveCurrentFrameNumber // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICERETRIEVECURRENTFRAMENUMBER)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _Out_ PULONG CurrentFrameNumber ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceRetrieveCurrentFrameNumber( _In_ WDFUSBDEVICE UsbDevice, _Out_ PULONG CurrentFrameNumber ) { return ((PFN_WDFUSBTARGETDEVICERETRIEVECURRENTFRAMENUMBER) WdfFunctions[WdfUsbTargetDeviceRetrieveCurrentFrameNumberTableIndex])(WdfDriverGlobals, UsbDevice, CurrentFrameNumber); } // // WDF Function: WdfUsbTargetDeviceSendControlTransferSynchronously // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICESENDCONTROLTRANSFERSYNCHRONOUSLY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_ PWDF_USB_CONTROL_SETUP_PACKET SetupPacket, _In_opt_ PWDF_MEMORY_DESCRIPTOR MemoryDescriptor, _Out_opt_ PULONG BytesTransferred ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceSendControlTransferSynchronously( _In_ WDFUSBDEVICE UsbDevice, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_ PWDF_USB_CONTROL_SETUP_PACKET SetupPacket, _In_opt_ PWDF_MEMORY_DESCRIPTOR MemoryDescriptor, _Out_opt_ PULONG BytesTransferred ) { return ((PFN_WDFUSBTARGETDEVICESENDCONTROLTRANSFERSYNCHRONOUSLY) WdfFunctions[WdfUsbTargetDeviceSendControlTransferSynchronouslyTableIndex])(WdfDriverGlobals, UsbDevice, Request, RequestOptions, SetupPacket, MemoryDescriptor, BytesTransferred); } // // WDF Function: WdfUsbTargetDeviceFormatRequestForControlTransfer // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORCONTROLTRANSFER)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_ WDFREQUEST Request, _In_ PWDF_USB_CONTROL_SETUP_PACKET SetupPacket, _In_opt_ WDFMEMORY TransferMemory, _In_opt_ PWDFMEMORY_OFFSET TransferOffset ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceFormatRequestForControlTransfer( _In_ WDFUSBDEVICE UsbDevice, _In_ WDFREQUEST Request, _In_ PWDF_USB_CONTROL_SETUP_PACKET SetupPacket, _In_opt_ WDFMEMORY TransferMemory, _In_opt_ PWDFMEMORY_OFFSET TransferOffset ) { return ((PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORCONTROLTRANSFER) WdfFunctions[WdfUsbTargetDeviceFormatRequestForControlTransferTableIndex])(WdfDriverGlobals, UsbDevice, Request, SetupPacket, TransferMemory, TransferOffset); } // // WDF Function: WdfUsbTargetDeviceIsConnectedSynchronous // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICEISCONNECTEDSYNCHRONOUS)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceIsConnectedSynchronous( _In_ WDFUSBDEVICE UsbDevice ) { return ((PFN_WDFUSBTARGETDEVICEISCONNECTEDSYNCHRONOUS) WdfFunctions[WdfUsbTargetDeviceIsConnectedSynchronousTableIndex])(WdfDriverGlobals, UsbDevice); } // // WDF Function: WdfUsbTargetDeviceResetPortSynchronously // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICERESETPORTSYNCHRONOUSLY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceResetPortSynchronously( _In_ WDFUSBDEVICE UsbDevice ) { return ((PFN_WDFUSBTARGETDEVICERESETPORTSYNCHRONOUSLY) WdfFunctions[WdfUsbTargetDeviceResetPortSynchronouslyTableIndex])(WdfDriverGlobals, UsbDevice); } // // WDF Function: WdfUsbTargetDeviceCyclePortSynchronously // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICECYCLEPORTSYNCHRONOUSLY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceCyclePortSynchronously( _In_ WDFUSBDEVICE UsbDevice ) { return ((PFN_WDFUSBTARGETDEVICECYCLEPORTSYNCHRONOUSLY) WdfFunctions[WdfUsbTargetDeviceCyclePortSynchronouslyTableIndex])(WdfDriverGlobals, UsbDevice); } // // WDF Function: WdfUsbTargetDeviceFormatRequestForCyclePort // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORCYCLEPORT)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_ WDFREQUEST Request ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceFormatRequestForCyclePort( _In_ WDFUSBDEVICE UsbDevice, _In_ WDFREQUEST Request ) { return ((PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORCYCLEPORT) WdfFunctions[WdfUsbTargetDeviceFormatRequestForCyclePortTableIndex])(WdfDriverGlobals, UsbDevice, Request); } // // WDF Function: WdfUsbTargetDeviceSendUrbSynchronously // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICESENDURBSYNCHRONOUSLY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_reads_(_Inexpressible_("union bug in SAL")) PURB Urb ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceSendUrbSynchronously( _In_ WDFUSBDEVICE UsbDevice, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_reads_(_Inexpressible_("union bug in SAL")) PURB Urb ) { return ((PFN_WDFUSBTARGETDEVICESENDURBSYNCHRONOUSLY) WdfFunctions[WdfUsbTargetDeviceSendUrbSynchronouslyTableIndex])(WdfDriverGlobals, UsbDevice, Request, RequestOptions, Urb); } // // WDF Function: WdfUsbTargetDeviceFormatRequestForUrb // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORURB)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_ WDFREQUEST Request, _In_ WDFMEMORY UrbMemory, _In_opt_ PWDFMEMORY_OFFSET UrbMemoryOffset ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceFormatRequestForUrb( _In_ WDFUSBDEVICE UsbDevice, _In_ WDFREQUEST Request, _In_ WDFMEMORY UrbMemory, _In_opt_ PWDFMEMORY_OFFSET UrbMemoryOffset ) { return ((PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORURB) WdfFunctions[WdfUsbTargetDeviceFormatRequestForUrbTableIndex])(WdfDriverGlobals, UsbDevice, Request, UrbMemory, UrbMemoryOffset); } // // WDF Function: WdfUsbTargetDeviceQueryUsbCapability // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICEQUERYUSBCAPABILITY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_ CONST GUID* CapabilityType, _In_ ULONG CapabilityBufferLength, _When_(CapabilityBufferLength == 0, _Out_opt_) _When_(CapabilityBufferLength != 0 && ResultLength == NULL, _Out_writes_bytes_(CapabilityBufferLength)) _When_(CapabilityBufferLength != 0 && ResultLength != NULL, _Out_writes_bytes_to_opt_(CapabilityBufferLength, *ResultLength)) PVOID CapabilityBuffer, _Out_opt_ _When_(ResultLength != NULL,_Deref_out_range_(<=,CapabilityBufferLength)) PULONG ResultLength ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceQueryUsbCapability( _In_ WDFUSBDEVICE UsbDevice, _In_ CONST GUID* CapabilityType, _In_ ULONG CapabilityBufferLength, _When_(CapabilityBufferLength == 0, _Out_opt_) _When_(CapabilityBufferLength != 0 && ResultLength == NULL, _Out_writes_bytes_(CapabilityBufferLength)) _When_(CapabilityBufferLength != 0 && ResultLength != NULL, _Out_writes_bytes_to_opt_(CapabilityBufferLength, *ResultLength)) PVOID CapabilityBuffer, _Out_opt_ _When_(ResultLength != NULL,_Deref_out_range_(<=,CapabilityBufferLength)) PULONG ResultLength ) { return ((PFN_WDFUSBTARGETDEVICEQUERYUSBCAPABILITY) WdfFunctions[WdfUsbTargetDeviceQueryUsbCapabilityTableIndex])(WdfDriverGlobals, UsbDevice, CapabilityType, CapabilityBufferLength, CapabilityBuffer, ResultLength); } // // WDF Function: WdfUsbTargetDeviceCreateUrb // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICECREATEURB)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes, _Out_ WDFMEMORY* UrbMemory, _Outptr_opt_result_bytebuffer_(sizeof(URB)) PURB* Urb ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceCreateUrb( _In_ WDFUSBDEVICE UsbDevice, _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes, _Out_ WDFMEMORY* UrbMemory, _Outptr_opt_result_bytebuffer_(sizeof(URB)) PURB* Urb ) { return ((PFN_WDFUSBTARGETDEVICECREATEURB) WdfFunctions[WdfUsbTargetDeviceCreateUrbTableIndex])(WdfDriverGlobals, UsbDevice, Attributes, UrbMemory, Urb); } // // WDF Function: WdfUsbTargetDeviceCreateIsochUrb // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETDEVICECREATEISOCHURB)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes, _In_ ULONG NumberOfIsochPackets, _Out_ WDFMEMORY* UrbMemory, _Outptr_opt_result_bytebuffer_(GET_ISO_URB_SIZE(NumberOfIsochPackets)) PURB* Urb ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetDeviceCreateIsochUrb( _In_ WDFUSBDEVICE UsbDevice, _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes, _In_ ULONG NumberOfIsochPackets, _Out_ WDFMEMORY* UrbMemory, _Outptr_opt_result_bytebuffer_(GET_ISO_URB_SIZE(NumberOfIsochPackets)) PURB* Urb ) { return ((PFN_WDFUSBTARGETDEVICECREATEISOCHURB) WdfFunctions[WdfUsbTargetDeviceCreateIsochUrbTableIndex])(WdfDriverGlobals, UsbDevice, Attributes, NumberOfIsochPackets, UrbMemory, Urb); } // // WDF Function: WdfUsbTargetPipeGetInformation // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI VOID (STDCALL *PFN_WDFUSBTARGETPIPEGETINFORMATION)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _Out_ PWDF_USB_PIPE_INFORMATION PipeInformation ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE VOID WdfUsbTargetPipeGetInformation( _In_ WDFUSBPIPE Pipe, _Out_ PWDF_USB_PIPE_INFORMATION PipeInformation ) { ((PFN_WDFUSBTARGETPIPEGETINFORMATION) WdfFunctions[WdfUsbTargetPipeGetInformationTableIndex])(WdfDriverGlobals, Pipe, PipeInformation); } // // WDF Function: WdfUsbTargetPipeIsInEndpoint // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI BOOLEAN (STDCALL *PFN_WDFUSBTARGETPIPEISINENDPOINT)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE BOOLEAN WdfUsbTargetPipeIsInEndpoint( _In_ WDFUSBPIPE Pipe ) { return ((PFN_WDFUSBTARGETPIPEISINENDPOINT) WdfFunctions[WdfUsbTargetPipeIsInEndpointTableIndex])(WdfDriverGlobals, Pipe); } // // WDF Function: WdfUsbTargetPipeIsOutEndpoint // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI BOOLEAN (STDCALL *PFN_WDFUSBTARGETPIPEISOUTENDPOINT)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE BOOLEAN WdfUsbTargetPipeIsOutEndpoint( _In_ WDFUSBPIPE Pipe ) { return ((PFN_WDFUSBTARGETPIPEISOUTENDPOINT) WdfFunctions[WdfUsbTargetPipeIsOutEndpointTableIndex])(WdfDriverGlobals, Pipe); } // // WDF Function: WdfUsbTargetPipeGetType // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI WDF_USB_PIPE_TYPE (STDCALL *PFN_WDFUSBTARGETPIPEGETTYPE)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE WDF_USB_PIPE_TYPE WdfUsbTargetPipeGetType( _In_ WDFUSBPIPE Pipe ) { return ((PFN_WDFUSBTARGETPIPEGETTYPE) WdfFunctions[WdfUsbTargetPipeGetTypeTableIndex])(WdfDriverGlobals, Pipe); } // // WDF Function: WdfUsbTargetPipeSetNoMaximumPacketSizeCheck // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI VOID (STDCALL *PFN_WDFUSBTARGETPIPESETNOMAXIMUMPACKETSIZECHECK)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE VOID WdfUsbTargetPipeSetNoMaximumPacketSizeCheck( _In_ WDFUSBPIPE Pipe ) { ((PFN_WDFUSBTARGETPIPESETNOMAXIMUMPACKETSIZECHECK) WdfFunctions[WdfUsbTargetPipeSetNoMaximumPacketSizeCheckTableIndex])(WdfDriverGlobals, Pipe); } // // WDF Function: WdfUsbTargetPipeWriteSynchronously // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPEWRITESYNCHRONOUSLY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_opt_ PWDF_MEMORY_DESCRIPTOR MemoryDescriptor, _Out_opt_ PULONG BytesWritten ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeWriteSynchronously( _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_opt_ PWDF_MEMORY_DESCRIPTOR MemoryDescriptor, _Out_opt_ PULONG BytesWritten ) { return ((PFN_WDFUSBTARGETPIPEWRITESYNCHRONOUSLY) WdfFunctions[WdfUsbTargetPipeWriteSynchronouslyTableIndex])(WdfDriverGlobals, Pipe, Request, RequestOptions, MemoryDescriptor, BytesWritten); } // // WDF Function: WdfUsbTargetPipeFormatRequestForWrite // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPEFORMATREQUESTFORWRITE)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_ WDFREQUEST Request, _In_opt_ WDFMEMORY WriteMemory, _In_opt_ PWDFMEMORY_OFFSET WriteOffset ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeFormatRequestForWrite( _In_ WDFUSBPIPE Pipe, _In_ WDFREQUEST Request, _In_opt_ WDFMEMORY WriteMemory, _In_opt_ PWDFMEMORY_OFFSET WriteOffset ) { return ((PFN_WDFUSBTARGETPIPEFORMATREQUESTFORWRITE) WdfFunctions[WdfUsbTargetPipeFormatRequestForWriteTableIndex])(WdfDriverGlobals, Pipe, Request, WriteMemory, WriteOffset); } // // WDF Function: WdfUsbTargetPipeReadSynchronously // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPEREADSYNCHRONOUSLY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_opt_ PWDF_MEMORY_DESCRIPTOR MemoryDescriptor, _Out_opt_ PULONG BytesRead ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeReadSynchronously( _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_opt_ PWDF_MEMORY_DESCRIPTOR MemoryDescriptor, _Out_opt_ PULONG BytesRead ) { return ((PFN_WDFUSBTARGETPIPEREADSYNCHRONOUSLY) WdfFunctions[WdfUsbTargetPipeReadSynchronouslyTableIndex])(WdfDriverGlobals, Pipe, Request, RequestOptions, MemoryDescriptor, BytesRead); } // // WDF Function: WdfUsbTargetPipeFormatRequestForRead // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPEFORMATREQUESTFORREAD)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_ WDFREQUEST Request, _In_opt_ WDFMEMORY ReadMemory, _In_opt_ PWDFMEMORY_OFFSET ReadOffset ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeFormatRequestForRead( _In_ WDFUSBPIPE Pipe, _In_ WDFREQUEST Request, _In_opt_ WDFMEMORY ReadMemory, _In_opt_ PWDFMEMORY_OFFSET ReadOffset ) { return ((PFN_WDFUSBTARGETPIPEFORMATREQUESTFORREAD) WdfFunctions[WdfUsbTargetPipeFormatRequestForReadTableIndex])(WdfDriverGlobals, Pipe, Request, ReadMemory, ReadOffset); } // // WDF Function: WdfUsbTargetPipeConfigContinuousReader // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPECONFIGCONTINUOUSREADER)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_ PWDF_USB_CONTINUOUS_READER_CONFIG Config ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeConfigContinuousReader( _In_ WDFUSBPIPE Pipe, _In_ PWDF_USB_CONTINUOUS_READER_CONFIG Config ) { return ((PFN_WDFUSBTARGETPIPECONFIGCONTINUOUSREADER) WdfFunctions[WdfUsbTargetPipeConfigContinuousReaderTableIndex])(WdfDriverGlobals, Pipe, Config); } // // WDF Function: WdfUsbTargetPipeAbortSynchronously // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPEABORTSYNCHRONOUSLY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeAbortSynchronously( _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions ) { return ((PFN_WDFUSBTARGETPIPEABORTSYNCHRONOUSLY) WdfFunctions[WdfUsbTargetPipeAbortSynchronouslyTableIndex])(WdfDriverGlobals, Pipe, Request, RequestOptions); } // // WDF Function: WdfUsbTargetPipeFormatRequestForAbort // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPEFORMATREQUESTFORABORT)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_ WDFREQUEST Request ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeFormatRequestForAbort( _In_ WDFUSBPIPE Pipe, _In_ WDFREQUEST Request ) { return ((PFN_WDFUSBTARGETPIPEFORMATREQUESTFORABORT) WdfFunctions[WdfUsbTargetPipeFormatRequestForAbortTableIndex])(WdfDriverGlobals, Pipe, Request); } // // WDF Function: WdfUsbTargetPipeResetSynchronously // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPERESETSYNCHRONOUSLY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeResetSynchronously( _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions ) { return ((PFN_WDFUSBTARGETPIPERESETSYNCHRONOUSLY) WdfFunctions[WdfUsbTargetPipeResetSynchronouslyTableIndex])(WdfDriverGlobals, Pipe, Request, RequestOptions); } // // WDF Function: WdfUsbTargetPipeFormatRequestForReset // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPEFORMATREQUESTFORRESET)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_ WDFREQUEST Request ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeFormatRequestForReset( _In_ WDFUSBPIPE Pipe, _In_ WDFREQUEST Request ) { return ((PFN_WDFUSBTARGETPIPEFORMATREQUESTFORRESET) WdfFunctions[WdfUsbTargetPipeFormatRequestForResetTableIndex])(WdfDriverGlobals, Pipe, Request); } // // WDF Function: WdfUsbTargetPipeSendUrbSynchronously // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPESENDURBSYNCHRONOUSLY)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_reads_(_Inexpressible_("union bug in SAL")) PURB Urb ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeSendUrbSynchronously( _In_ WDFUSBPIPE Pipe, _In_opt_ WDFREQUEST Request, _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions, _In_reads_(_Inexpressible_("union bug in SAL")) PURB Urb ) { return ((PFN_WDFUSBTARGETPIPESENDURBSYNCHRONOUSLY) WdfFunctions[WdfUsbTargetPipeSendUrbSynchronouslyTableIndex])(WdfDriverGlobals, Pipe, Request, RequestOptions, Urb); } // // WDF Function: WdfUsbTargetPipeFormatRequestForUrb // typedef _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBTARGETPIPEFORMATREQUESTFORURB)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE PIPE, _In_ WDFREQUEST Request, _In_ WDFMEMORY UrbMemory, _In_opt_ PWDFMEMORY_OFFSET UrbMemoryOffset ); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS WdfUsbTargetPipeFormatRequestForUrb( _In_ WDFUSBPIPE PIPE, _In_ WDFREQUEST Request, _In_ WDFMEMORY UrbMemory, _In_opt_ PWDFMEMORY_OFFSET UrbMemoryOffset ) { return ((PFN_WDFUSBTARGETPIPEFORMATREQUESTFORURB) WdfFunctions[WdfUsbTargetPipeFormatRequestForUrbTableIndex])(WdfDriverGlobals, PIPE, Request, UrbMemory, UrbMemoryOffset); } // // WDF Function: WdfUsbInterfaceGetInterfaceNumber // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI BYTE (STDCALL *PFN_WDFUSBINTERFACEGETINTERFACENUMBER)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBINTERFACE UsbInterface ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE BYTE WdfUsbInterfaceGetInterfaceNumber( _In_ WDFUSBINTERFACE UsbInterface ) { return ((PFN_WDFUSBINTERFACEGETINTERFACENUMBER) WdfFunctions[WdfUsbInterfaceGetInterfaceNumberTableIndex])(WdfDriverGlobals, UsbInterface); } // // WDF Function: WdfUsbInterfaceGetNumEndpoints // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI BYTE (STDCALL *PFN_WDFUSBINTERFACEGETNUMENDPOINTS)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBINTERFACE UsbInterface, _In_ UCHAR SettingIndex ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE BYTE WdfUsbInterfaceGetNumEndpoints( _In_ WDFUSBINTERFACE UsbInterface, _In_ UCHAR SettingIndex ) { return ((PFN_WDFUSBINTERFACEGETNUMENDPOINTS) WdfFunctions[WdfUsbInterfaceGetNumEndpointsTableIndex])(WdfDriverGlobals, UsbInterface, SettingIndex); } // // WDF Function: WdfUsbInterfaceGetDescriptor // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI VOID (STDCALL *PFN_WDFUSBINTERFACEGETDESCRIPTOR)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBINTERFACE UsbInterface, _In_ UCHAR SettingIndex, _Out_ PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE VOID WdfUsbInterfaceGetDescriptor( _In_ WDFUSBINTERFACE UsbInterface, _In_ UCHAR SettingIndex, _Out_ PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor ) { ((PFN_WDFUSBINTERFACEGETDESCRIPTOR) WdfFunctions[WdfUsbInterfaceGetDescriptorTableIndex])(WdfDriverGlobals, UsbInterface, SettingIndex, InterfaceDescriptor); } // // WDF Function: WdfUsbInterfaceGetNumSettings // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI BYTE (STDCALL *PFN_WDFUSBINTERFACEGETNUMSETTINGS)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBINTERFACE UsbInterface ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE BYTE WdfUsbInterfaceGetNumSettings( _In_ WDFUSBINTERFACE UsbInterface ) { return ((PFN_WDFUSBINTERFACEGETNUMSETTINGS) WdfFunctions[WdfUsbInterfaceGetNumSettingsTableIndex])(WdfDriverGlobals, UsbInterface); } // // WDF Function: WdfUsbInterfaceSelectSetting // typedef _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) WDFAPI NTSTATUS (STDCALL *PFN_WDFUSBINTERFACESELECTSETTING)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBINTERFACE UsbInterface, _In_opt_ PWDF_OBJECT_ATTRIBUTES PipesAttributes, _In_ PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS Params ); _Must_inspect_result_ _IRQL_requires_max_(PASSIVE_LEVEL) FORCEINLINE NTSTATUS WdfUsbInterfaceSelectSetting( _In_ WDFUSBINTERFACE UsbInterface, _In_opt_ PWDF_OBJECT_ATTRIBUTES PipesAttributes, _In_ PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS Params ) { return ((PFN_WDFUSBINTERFACESELECTSETTING) WdfFunctions[WdfUsbInterfaceSelectSettingTableIndex])(WdfDriverGlobals, UsbInterface, PipesAttributes, Params); } // // WDF Function: WdfUsbInterfaceGetEndpointInformation // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI VOID (STDCALL *PFN_WDFUSBINTERFACEGETENDPOINTINFORMATION)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBINTERFACE UsbInterface, _In_ UCHAR SettingIndex, _In_ UCHAR EndpointIndex, _Out_ PWDF_USB_PIPE_INFORMATION EndpointInfo ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE VOID WdfUsbInterfaceGetEndpointInformation( _In_ WDFUSBINTERFACE UsbInterface, _In_ UCHAR SettingIndex, _In_ UCHAR EndpointIndex, _Out_ PWDF_USB_PIPE_INFORMATION EndpointInfo ) { ((PFN_WDFUSBINTERFACEGETENDPOINTINFORMATION) WdfFunctions[WdfUsbInterfaceGetEndpointInformationTableIndex])(WdfDriverGlobals, UsbInterface, SettingIndex, EndpointIndex, EndpointInfo); } // // WDF Function: WdfUsbTargetDeviceGetInterface // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI WDFUSBINTERFACE (STDCALL *PFN_WDFUSBTARGETDEVICEGETINTERFACE)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBDEVICE UsbDevice, _In_ UCHAR InterfaceIndex ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE WDFUSBINTERFACE WdfUsbTargetDeviceGetInterface( _In_ WDFUSBDEVICE UsbDevice, _In_ UCHAR InterfaceIndex ) { return ((PFN_WDFUSBTARGETDEVICEGETINTERFACE) WdfFunctions[WdfUsbTargetDeviceGetInterfaceTableIndex])(WdfDriverGlobals, UsbDevice, InterfaceIndex); } // // WDF Function: WdfUsbInterfaceGetConfiguredSettingIndex // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI BYTE (STDCALL *PFN_WDFUSBINTERFACEGETCONFIGUREDSETTINGINDEX)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBINTERFACE Interface ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE BYTE WdfUsbInterfaceGetConfiguredSettingIndex( _In_ WDFUSBINTERFACE Interface ) { return ((PFN_WDFUSBINTERFACEGETCONFIGUREDSETTINGINDEX) WdfFunctions[WdfUsbInterfaceGetConfiguredSettingIndexTableIndex])(WdfDriverGlobals, Interface); } // // WDF Function: WdfUsbInterfaceGetNumConfiguredPipes // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI BYTE (STDCALL *PFN_WDFUSBINTERFACEGETNUMCONFIGUREDPIPES)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBINTERFACE UsbInterface ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE BYTE WdfUsbInterfaceGetNumConfiguredPipes( _In_ WDFUSBINTERFACE UsbInterface ) { return ((PFN_WDFUSBINTERFACEGETNUMCONFIGUREDPIPES) WdfFunctions[WdfUsbInterfaceGetNumConfiguredPipesTableIndex])(WdfDriverGlobals, UsbInterface); } // // WDF Function: WdfUsbInterfaceGetConfiguredPipe // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI WDFUSBPIPE (STDCALL *PFN_WDFUSBINTERFACEGETCONFIGUREDPIPE)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBINTERFACE UsbInterface, _In_ UCHAR PipeIndex, _Out_opt_ PWDF_USB_PIPE_INFORMATION PipeInfo ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE WDFUSBPIPE WdfUsbInterfaceGetConfiguredPipe( _In_ WDFUSBINTERFACE UsbInterface, _In_ UCHAR PipeIndex, _Out_opt_ PWDF_USB_PIPE_INFORMATION PipeInfo ) { return ((PFN_WDFUSBINTERFACEGETCONFIGUREDPIPE) WdfFunctions[WdfUsbInterfaceGetConfiguredPipeTableIndex])(WdfDriverGlobals, UsbInterface, PipeIndex, PipeInfo); } // // WDF Function: WdfUsbTargetPipeWdmGetPipeHandle // typedef _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI USBD_PIPE_HANDLE (STDCALL *PFN_WDFUSBTARGETPIPEWDMGETPIPEHANDLE)( _In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFUSBPIPE UsbPipe ); _IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE USBD_PIPE_HANDLE WdfUsbTargetPipeWdmGetPipeHandle( _In_ WDFUSBPIPE UsbPipe ) { return ((PFN_WDFUSBTARGETPIPEWDMGETPIPEHANDLE) WdfFunctions[WdfUsbTargetPipeWdmGetPipeHandleTableIndex])(WdfDriverGlobals, UsbPipe); } #endif // (NTDDI_VERSION >= NTDDI_WIN2K) WDF_EXTERN_C_END #endif // _WDFUSB_H_