3 #ifndef DECLSPEC_EXPORT 4 #define DECLSPEC_EXPORT __declspec(dllexport) 12 #define UsbBuildInterruptOrBulkTransferRequest(urb,length, pipeHandle, transferBuffer, transferBufferMDL, transferBufferLength, transferFlags, link) { \ 13 (urb)->UrbHeader.Function = URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER; \ 14 (urb)->UrbHeader.Length = (length); \ 15 (urb)->UrbBulkOrInterruptTransfer.PipeHandle = (pipeHandle); \ 16 (urb)->UrbBulkOrInterruptTransfer.TransferBufferLength = (transferBufferLength); \ 17 (urb)->UrbBulkOrInterruptTransfer.TransferBufferMDL = (transferBufferMDL); \ 18 (urb)->UrbBulkOrInterruptTransfer.TransferBuffer = (transferBuffer); \ 19 (urb)->UrbBulkOrInterruptTransfer.TransferFlags = (transferFlags); \ 20 (urb)->UrbBulkOrInterruptTransfer.UrbLink = (link); \ 23 #define UsbBuildGetDescriptorRequest(urb, length, descriptorType, descriptorIndex, languageId, transferBuffer, transferBufferMDL, transferBufferLength, link) { \ 24 (urb)->UrbHeader.Function = URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE; \ 25 (urb)->UrbHeader.Length = (length); \ 26 (urb)->UrbControlDescriptorRequest.TransferBufferLength = (transferBufferLength); \ 27 (urb)->UrbControlDescriptorRequest.TransferBufferMDL = (transferBufferMDL); \ 28 (urb)->UrbControlDescriptorRequest.TransferBuffer = (transferBuffer); \ 29 (urb)->UrbControlDescriptorRequest.DescriptorType = (descriptorType); \ 30 (urb)->UrbControlDescriptorRequest.Index = (descriptorIndex); \ 31 (urb)->UrbControlDescriptorRequest.LanguageId = (languageId); \ 32 (urb)->UrbControlDescriptorRequest.UrbLink = (link); \ 35 #define UsbBuildGetStatusRequest(urb, op, index, transferBuffer, transferBufferMDL, link) { \ 36 (urb)->UrbHeader.Function = (op); \ 37 (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_STATUS_REQUEST); \ 38 (urb)->UrbControlGetStatusRequest.TransferBufferLength = sizeof(USHORT); \ 39 (urb)->UrbControlGetStatusRequest.TransferBufferMDL = (transferBufferMDL); \ 40 (urb)->UrbControlGetStatusRequest.TransferBuffer = (transferBuffer); \ 41 (urb)->UrbControlGetStatusRequest.Index = (index); \ 42 (urb)->UrbControlGetStatusRequest.UrbLink = (link); \ 45 #define UsbBuildFeatureRequest(urb, op, featureSelector, index, link) { \ 46 (urb)->UrbHeader.Function = (op); \ 47 (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_FEATURE_REQUEST); \ 48 (urb)->UrbControlFeatureRequest.FeatureSelector = (featureSelector); \ 49 (urb)->UrbControlFeatureRequest.Index = (index); \ 50 (urb)->UrbControlFeatureRequest.UrbLink = (link); \ 53 #define UsbBuildSelectConfigurationRequest(urb, length, configurationDescriptor) { \ 54 (urb)->UrbHeader.Function = URB_FUNCTION_SELECT_CONFIGURATION; \ 55 (urb)->UrbHeader.Length = (length); \ 56 (urb)->UrbSelectConfiguration.ConfigurationDescriptor = (configurationDescriptor); \ 59 #define UsbBuildSelectInterfaceRequest(urb, length, configurationHandle, interfaceNumber, alternateSetting) { \ 60 (urb)->UrbHeader.Function = URB_FUNCTION_SELECT_INTERFACE; \ 61 (urb)->UrbHeader.Length = (length); \ 62 (urb)->UrbSelectInterface.Interface.AlternateSetting = (alternateSetting); \ 63 (urb)->UrbSelectInterface.Interface.InterfaceNumber = (interfaceNumber); \ 64 (urb)->UrbSelectInterface.Interface.Length = (length - sizeof(struct _URB_HEADER) - sizeof(USBD_CONFIGURATION_HANDLE)); \ 65 (urb)->UrbSelectInterface.ConfigurationHandle = (configurationHandle); \ 68 #define UsbBuildVendorRequest(urb, cmd, length, transferFlags, reservedbits, request, value, index, transferBuffer, transferBufferMDL, transferBufferLength, link) { \ 69 (urb)->UrbHeader.Function = cmd; \ 70 (urb)->UrbHeader.Length = (length); \ 71 (urb)->UrbControlVendorClassRequest.TransferBufferLength = (transferBufferLength); \ 72 (urb)->UrbControlVendorClassRequest.TransferBufferMDL = (transferBufferMDL); \ 73 (urb)->UrbControlVendorClassRequest.TransferBuffer = (transferBuffer); \ 74 (urb)->UrbControlVendorClassRequest.RequestTypeReservedBits = (reservedbits); \ 75 (urb)->UrbControlVendorClassRequest.Request = (request); \ 76 (urb)->UrbControlVendorClassRequest.Value = (value); \ 77 (urb)->UrbControlVendorClassRequest.Index = (index); \ 78 (urb)->UrbControlVendorClassRequest.TransferFlags = (transferFlags); \ 79 (urb)->UrbControlVendorClassRequest.UrbLink = (link); \ 82 #if (NTDDI_VERSION >= NTDDI_WINXP) 84 #define UsbBuildOsFeatureDescriptorRequest(urb, length, interface, index, transferBuffer, transferBufferMDL, transferBufferLength, link) { \ 85 (urb)->UrbHeader.Function = URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR; \ 86 (urb)->UrbHeader.Length = (length); \ 87 (urb)->UrbOSFeatureDescriptorRequest.TransferBufferLength = (transferBufferLength); \ 88 (urb)->UrbOSFeatureDescriptorRequest.TransferBufferMDL = (transferBufferMDL); \ 89 (urb)->UrbOSFeatureDescriptorRequest.TransferBuffer = (transferBuffer); \ 90 (urb)->UrbOSFeatureDescriptorRequest.InterfaceNumber = (interface); \ 91 (urb)->UrbOSFeatureDescriptorRequest.MS_FeatureDescriptorIndex = (index); \ 92 (urb)->UrbOSFeatureDescriptorRequest.UrbLink = (link); \ 97 #if (NTDDI_VERSION >= NTDDI_VISTA) 99 #define USBD_CLIENT_CONTRACT_VERSION_INVALID 0xFFFFFFFF 100 #define USBD_CLIENT_CONTRACT_VERSION_602 0x602 102 #define USBD_INTERFACE_VERSION_600 0x600 103 #define USBD_INTERFACE_VERSION_602 0x602 104 #define USBD_INTERFACE_VERSION_603 0x603 108 #endif // NTDDI_VISTA 110 #define URB_STATUS(urb) ((urb)->UrbHeader.Status) 112 #define GET_SELECT_CONFIGURATION_REQUEST_SIZE(totalInterfaces, totalPipes) \ 113 (sizeof(struct _URB_SELECT_CONFIGURATION) + \ 114 ((totalInterfaces-1) * sizeof(USBD_INTERFACE_INFORMATION)) + \ 115 ((totalPipes-totalInterfaces)*sizeof(USBD_PIPE_INFORMATION))) 117 #define GET_SELECT_INTERFACE_REQUEST_SIZE(totalPipes) \ 118 (sizeof(struct _URB_SELECT_INTERFACE) + \ 119 ((totalPipes-1)*sizeof(USBD_PIPE_INFORMATION))) 121 #define GET_USBD_INTERFACE_SIZE(numEndpoints) \ 122 (sizeof(USBD_INTERFACE_INFORMATION) + \ 123 (sizeof(USBD_PIPE_INFORMATION)*(numEndpoints)) - sizeof(USBD_PIPE_INFORMATION)) 125 #define GET_ISO_URB_SIZE(n) (sizeof(struct _URB_ISOCH_TRANSFER)+ \ 126 sizeof(USBD_ISO_PACKET_DESCRIPTOR)*n) 217 #if (NTDDI_VERSION >= NTDDI_WINXP) 230 #if (NTDDI_VERSION >= NTDDI_VISTA) 236 USBD_ValidateConfigurationDescriptor(
_In_ UCHAR _Outptr_result_bytebuffer_ DescriptorBufferLength PVOID * DescriptorBuffer
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
struct _USBD_INTERFACE_LIST_ENTRY USBD_INTERFACE_LIST_ENTRY
_In_ PVOID _In_ LONG _In_ LONG AlternateSetting
_In_ PVOID _In_ LONG _In_ LONG _In_ LONG _In_ LONG InterfaceSubClass
struct _USBD_INTERFACE_LIST_ENTRY * PUSBD_INTERFACE_LIST_ENTRY
_In_ WDFUSBINTERFACE _In_ UCHAR _Out_ PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor
_In_ PUSBD_INTERFACE_LIST_ENTRY InterfaceList
_In_ ULONG _In_reads_bytes_(KeyNameLength) PWSTR KeyName
DECLSPEC_IMPORT PUSB_INTERFACE_DESCRIPTOR NTAPI USBD_ParseConfigurationDescriptor(_In_ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, _In_ UCHAR InterfaceNumber, _In_ UCHAR AlternateSetting)
_In_ UCHAR _In_ BOOLEAN LowSpeed
ULONG NTAPI USBD_GetInterfaceLength(PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor, PUCHAR BufferEnd)
VOID NTAPI USBD_GetUSBDIVersion(PUSBD_VERSION_INFORMATION Version)
_In_ ULONG _In_ USHORT Level
PDEVICE_OBJECT PhysicalDeviceObject
DECLARE_HANDLE(USBD_HANDLE)
VOID NTAPI USBD_RegisterHcFilter(PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT FilterDeviceObject)
ULONG NTAPI USBD_CalculateUsbBandwidth(ULONG MaxPacketSize, UCHAR EndpointType, BOOLEAN LowSpeed)
_IRQL_requires_max_(DISPATCH_LEVEL) DECLSPEC_IMPORT VOID NTAPI USBD_GetUSBDIVersion(_Out_ PUSBD_VERSION_INFORMATION VersionInformation)
_In_ PDEVICE_OBJECT DeviceObject
ULONG NTAPI USBD_GetPdoRegistryParameter(PDEVICE_OBJECT PhysicalDeviceObject, PVOID Parameter, ULONG ParameterLength, PWCHAR KeyName, ULONG KeyNameLength)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_In_ PDEVICE_OBJECT FilterDeviceObject
_In_ PVOID _In_ LONG InterfaceNumber
PUSB_INTERFACE_DESCRIPTOR NTAPI USBD_ParseConfigurationDescriptorEx(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, PVOID StartPosition, LONG InterfaceNumber, LONG AlternateSetting, LONG InterfaceClass, LONG InterfaceSubClass, LONG InterfaceProtocol)
_In_ PVOID _In_ LONG _In_ LONG _In_ LONG _In_ LONG _In_ LONG InterfaceProtocol
PUSB_COMMON_DESCRIPTOR NTAPI USBD_ParseDescriptors(PVOID DescriptorBuffer, ULONG TotalLength, PVOID StartPosition, LONG DescriptorType)
_In_ ULONG ParameterLength
_In_ ULONG _In_ ULONG KeyNameLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_In_ ULONG _In_ PVOID StartPosition
_In_ ULONG _In_ ULONG Offset
PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor
_Inout_updates_bytes_(ParameterLength) PVOID Parameter
_In_ PVOID _In_ LONG _In_ LONG _In_ LONG InterfaceClass
PUSBD_INTERFACE_INFORMATION Interface
DECLSPEC_IMPORT PURB NTAPI USBD_CreateConfigurationRequest(_In_ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, _Out_ PUSHORT Siz)
DECLSPEC_EXPORT NTSTATUS NTAPI USBD_QueryBusTime(_In_ PDEVICE_OBJECT RootHubPdo, _Out_ PULONG CurrentFrame)
PURB NTAPI USBD_CreateConfigurationRequestEx(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, PUSBD_INTERFACE_LIST_ENTRY InterfaceList)
_In_ ULONG _In_ PVOID _In_ LONG DescriptorType