[1166] | 1 | #pragma once
|
---|
| 2 |
|
---|
| 3 | #ifndef DECLSPEC_EXPORT
|
---|
| 4 | #define DECLSPEC_EXPORT __declspec(dllexport)
|
---|
| 5 | #endif
|
---|
| 6 |
|
---|
| 7 | typedef struct _USBD_INTERFACE_LIST_ENTRY {
|
---|
| 8 | PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
|
---|
| 9 | PUSBD_INTERFACE_INFORMATION Interface;
|
---|
| 10 | } USBD_INTERFACE_LIST_ENTRY, *PUSBD_INTERFACE_LIST_ENTRY;
|
---|
| 11 |
|
---|
| 12 | #define UsbBuildInterruptOrBulkTransferRequest(urb,length, pipeHandle, transferBuffer, transferBufferMDL, transferBufferLength, transferFlags, link) \
|
---|
| 13 | { \
|
---|
| 14 | (urb)->UrbHeader.Function = URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER; \
|
---|
| 15 | (urb)->UrbHeader.Length = (length); \
|
---|
| 16 | (urb)->UrbBulkOrInterruptTransfer.PipeHandle = (pipeHandle); \
|
---|
| 17 | (urb)->UrbBulkOrInterruptTransfer.TransferBufferLength = (transferBufferLength); \
|
---|
| 18 | (urb)->UrbBulkOrInterruptTransfer.TransferBufferMDL = (transferBufferMDL); \
|
---|
| 19 | (urb)->UrbBulkOrInterruptTransfer.TransferBuffer = (transferBuffer); \
|
---|
| 20 | (urb)->UrbBulkOrInterruptTransfer.TransferFlags = (transferFlags); \
|
---|
| 21 | (urb)->UrbBulkOrInterruptTransfer.UrbLink = (link); \
|
---|
| 22 | }
|
---|
| 23 |
|
---|
| 24 | #define UsbBuildGetDescriptorRequest(urb, length, descriptorType, descriptorIndex, languageId, transferBuffer, transferBufferMDL, transferBufferLength, link) \
|
---|
| 25 | { \
|
---|
| 26 | (urb)->UrbHeader.Function = URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE; \
|
---|
| 27 | (urb)->UrbHeader.Length = (length); \
|
---|
| 28 | (urb)->UrbControlDescriptorRequest.TransferBufferLength = (transferBufferLength); \
|
---|
| 29 | (urb)->UrbControlDescriptorRequest.TransferBufferMDL = (transferBufferMDL); \
|
---|
| 30 | (urb)->UrbControlDescriptorRequest.TransferBuffer = (transferBuffer); \
|
---|
| 31 | (urb)->UrbControlDescriptorRequest.DescriptorType = (descriptorType); \
|
---|
| 32 | (urb)->UrbControlDescriptorRequest.Index = (descriptorIndex); \
|
---|
| 33 | (urb)->UrbControlDescriptorRequest.LanguageId = (languageId); \
|
---|
| 34 | (urb)->UrbControlDescriptorRequest.UrbLink = (link); \
|
---|
| 35 | }
|
---|
| 36 |
|
---|
| 37 | #define UsbBuildGetStatusRequest(urb, op, index, transferBuffer, transferBufferMDL, link) \
|
---|
| 38 | { \
|
---|
| 39 | (urb)->UrbHeader.Function = (op); \
|
---|
| 40 | (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_STATUS_REQUEST); \
|
---|
| 41 | (urb)->UrbControlGetStatusRequest.TransferBufferLength = sizeof(USHORT); \
|
---|
| 42 | (urb)->UrbControlGetStatusRequest.TransferBufferMDL = (transferBufferMDL); \
|
---|
| 43 | (urb)->UrbControlGetStatusRequest.TransferBuffer = (transferBuffer); \
|
---|
| 44 | (urb)->UrbControlGetStatusRequest.Index = (index); \
|
---|
| 45 | (urb)->UrbControlGetStatusRequest.UrbLink = (link); \
|
---|
| 46 | }
|
---|
| 47 |
|
---|
| 48 | #define UsbBuildFeatureRequest(urb, op, featureSelector, index, link) \
|
---|
| 49 | { \
|
---|
| 50 | (urb)->UrbHeader.Function = (op); \
|
---|
| 51 | (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_FEATURE_REQUEST); \
|
---|
| 52 | (urb)->UrbControlFeatureRequest.FeatureSelector = (featureSelector); \
|
---|
| 53 | (urb)->UrbControlFeatureRequest.Index = (index); \
|
---|
| 54 | (urb)->UrbControlFeatureRequest.UrbLink = (link); \
|
---|
| 55 | }
|
---|
| 56 |
|
---|
| 57 | #define UsbBuildSelectConfigurationRequest(urb, length, configurationDescriptor) \
|
---|
| 58 | { \
|
---|
| 59 | (urb)->UrbHeader.Function = URB_FUNCTION_SELECT_CONFIGURATION; \
|
---|
| 60 | (urb)->UrbHeader.Length = (length); \
|
---|
| 61 | (urb)->UrbSelectConfiguration.ConfigurationDescriptor = (configurationDescriptor); \
|
---|
| 62 | }
|
---|
| 63 |
|
---|
| 64 | #define UsbBuildSelectInterfaceRequest(urb, length, configurationHandle, interfaceNumber, alternateSetting) \
|
---|
| 65 | { \
|
---|
| 66 | (urb)->UrbHeader.Function = URB_FUNCTION_SELECT_INTERFACE; \
|
---|
| 67 | (urb)->UrbHeader.Length = (length); \
|
---|
| 68 | (urb)->UrbSelectInterface.Interface.AlternateSetting = (alternateSetting); \
|
---|
| 69 | (urb)->UrbSelectInterface.Interface.InterfaceNumber = (interfaceNumber); \
|
---|
| 70 | (urb)->UrbSelectInterface.Interface.Length = \
|
---|
| 71 | (length - sizeof(struct _URB_HEADER) - sizeof(USBD_CONFIGURATION_HANDLE)); \
|
---|
| 72 | (urb)->UrbSelectInterface.ConfigurationHandle = (configurationHandle); \
|
---|
| 73 | }
|
---|
| 74 |
|
---|
| 75 | #define UsbBuildVendorRequest(urb, cmd, length, transferFlags, reservedbits, request, value, index, transferBuffer, transferBufferMDL, transferBufferLength, link) \
|
---|
| 76 | { \
|
---|
| 77 | (urb)->UrbHeader.Function = cmd; \
|
---|
| 78 | (urb)->UrbHeader.Length = (length); \
|
---|
| 79 | (urb)->UrbControlVendorClassRequest.TransferBufferLength = (transferBufferLength); \
|
---|
| 80 | (urb)->UrbControlVendorClassRequest.TransferBufferMDL = (transferBufferMDL); \
|
---|
| 81 | (urb)->UrbControlVendorClassRequest.TransferBuffer = (transferBuffer); \
|
---|
| 82 | (urb)->UrbControlVendorClassRequest.RequestTypeReservedBits = (reservedbits); \
|
---|
| 83 | (urb)->UrbControlVendorClassRequest.Request = (request); \
|
---|
| 84 | (urb)->UrbControlVendorClassRequest.Value = (value); \
|
---|
| 85 | (urb)->UrbControlVendorClassRequest.Index = (index); \
|
---|
| 86 | (urb)->UrbControlVendorClassRequest.TransferFlags = (transferFlags); \
|
---|
| 87 | (urb)->UrbControlVendorClassRequest.UrbLink = (link); \
|
---|
| 88 | }
|
---|
| 89 |
|
---|
| 90 | #if (NTDDI_VERSION >= NTDDI_WINXP)
|
---|
| 91 |
|
---|
| 92 | #define UsbBuildOsFeatureDescriptorRequest(urb, length, interface, index, transferBuffer, transferBufferMDL, transferBufferLength, link) \
|
---|
| 93 | { \
|
---|
| 94 | (urb)->UrbHeader.Function = URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR; \
|
---|
| 95 | (urb)->UrbHeader.Length = (length); \
|
---|
| 96 | (urb)->UrbOSFeatureDescriptorRequest.TransferBufferLength = (transferBufferLength); \
|
---|
| 97 | (urb)->UrbOSFeatureDescriptorRequest.TransferBufferMDL = (transferBufferMDL); \
|
---|
| 98 | (urb)->UrbOSFeatureDescriptorRequest.TransferBuffer = (transferBuffer); \
|
---|
| 99 | (urb)->UrbOSFeatureDescriptorRequest.InterfaceNumber = (interface); \
|
---|
| 100 | (urb)->UrbOSFeatureDescriptorRequest.MS_FeatureDescriptorIndex = (index); \
|
---|
| 101 | (urb)->UrbOSFeatureDescriptorRequest.UrbLink = (link); \
|
---|
| 102 | }
|
---|
| 103 |
|
---|
| 104 | #endif /* NTDDI_VERSION >= NTDDI_WINXP */
|
---|
| 105 |
|
---|
| 106 | #define URB_STATUS(urb) ((urb)->UrbHeader.Status)
|
---|
| 107 |
|
---|
| 108 | #define GET_SELECT_CONFIGURATION_REQUEST_SIZE(totalInterfaces, totalPipes) \
|
---|
| 109 | (sizeof(struct _URB_SELECT_CONFIGURATION) + \
|
---|
| 110 | ((totalInterfaces-1) * sizeof(USBD_INTERFACE_INFORMATION)) + \
|
---|
| 111 | ((totalPipes-totalInterfaces)*sizeof(USBD_PIPE_INFORMATION)))
|
---|
| 112 |
|
---|
| 113 | #define GET_SELECT_INTERFACE_REQUEST_SIZE(totalPipes) \
|
---|
| 114 | (sizeof(struct _URB_SELECT_INTERFACE) + \
|
---|
| 115 | ((totalPipes-1)*sizeof(USBD_PIPE_INFORMATION)))
|
---|
| 116 |
|
---|
| 117 | #define GET_USBD_INTERFACE_SIZE(numEndpoints) (sizeof(USBD_INTERFACE_INFORMATION) + \
|
---|
| 118 | (sizeof(USBD_PIPE_INFORMATION)*(numEndpoints)) \
|
---|
| 119 | - sizeof(USBD_PIPE_INFORMATION))
|
---|
| 120 |
|
---|
| 121 | #define GET_ISO_URB_SIZE(n) (sizeof(struct _URB_ISOCH_TRANSFER)+ \
|
---|
| 122 | sizeof(USBD_ISO_PACKET_DESCRIPTOR)*n)
|
---|
| 123 |
|
---|
| 124 | #ifndef _USBD_
|
---|
| 125 |
|
---|
| 126 | DECLSPEC_IMPORT
|
---|
| 127 | VOID
|
---|
| 128 | NTAPI
|
---|
| 129 | USBD_GetUSBDIVersion(
|
---|
| 130 | OUT PUSBD_VERSION_INFORMATION VersionInformation);
|
---|
| 131 |
|
---|
| 132 | DECLSPEC_IMPORT
|
---|
| 133 | PUSB_INTERFACE_DESCRIPTOR
|
---|
| 134 | NTAPI
|
---|
| 135 | USBD_ParseConfigurationDescriptor(
|
---|
| 136 | IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
---|
| 137 | IN UCHAR InterfaceNumber,
|
---|
| 138 | IN UCHAR AlternateSetting);
|
---|
| 139 |
|
---|
| 140 | DECLSPEC_IMPORT
|
---|
| 141 | PURB
|
---|
| 142 | NTAPI
|
---|
| 143 | USBD_CreateConfigurationRequest(
|
---|
| 144 | IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
---|
| 145 | OUT PUSHORT Siz);
|
---|
| 146 |
|
---|
| 147 | DECLSPEC_IMPORT
|
---|
| 148 | PUSB_COMMON_DESCRIPTOR
|
---|
| 149 | NTAPI
|
---|
| 150 | USBD_ParseDescriptors(
|
---|
| 151 | IN PVOID DescriptorBuffer,
|
---|
| 152 | IN ULONG TotalLength,
|
---|
| 153 | IN PVOID StartPosition,
|
---|
| 154 | IN LONG DescriptorType);
|
---|
| 155 |
|
---|
| 156 | DECLSPEC_IMPORT
|
---|
| 157 | PUSB_INTERFACE_DESCRIPTOR
|
---|
| 158 | NTAPI
|
---|
| 159 | USBD_ParseConfigurationDescriptorEx(
|
---|
| 160 | IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
---|
| 161 | IN PVOID StartPosition,
|
---|
| 162 | IN LONG InterfaceNumber,
|
---|
| 163 | IN LONG AlternateSetting,
|
---|
| 164 | IN LONG InterfaceClass,
|
---|
| 165 | IN LONG InterfaceSubClass,
|
---|
| 166 | IN LONG InterfaceProtocol);
|
---|
| 167 |
|
---|
| 168 | DECLSPEC_IMPORT
|
---|
| 169 | PURB
|
---|
| 170 | NTAPI
|
---|
| 171 | USBD_CreateConfigurationRequestEx(
|
---|
| 172 | IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
---|
| 173 | IN PUSBD_INTERFACE_LIST_ENTRY InterfaceList);
|
---|
| 174 |
|
---|
| 175 | DECLSPEC_EXPORT
|
---|
| 176 | ULONG
|
---|
| 177 | NTAPI
|
---|
| 178 | USBD_GetInterfaceLength(
|
---|
| 179 | IN PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor,
|
---|
| 180 | IN PUCHAR BufferEnd);
|
---|
| 181 |
|
---|
| 182 | DECLSPEC_EXPORT
|
---|
| 183 | VOID
|
---|
| 184 | NTAPI
|
---|
| 185 | USBD_RegisterHcFilter(
|
---|
| 186 | IN PDEVICE_OBJECT DeviceObject,
|
---|
| 187 | IN PDEVICE_OBJECT FilterDeviceObject);
|
---|
| 188 |
|
---|
| 189 | DECLSPEC_EXPORT
|
---|
| 190 | NTSTATUS
|
---|
| 191 | NTAPI
|
---|
| 192 | USBD_GetPdoRegistryParameter(
|
---|
| 193 | IN PDEVICE_OBJECT PhysicalDeviceObject,
|
---|
| 194 | IN OUT PVOID Parameter,
|
---|
| 195 | IN ULONG ParameterLength,
|
---|
| 196 | IN PWSTR KeyName,
|
---|
| 197 | IN ULONG KeyNameLength);
|
---|
| 198 |
|
---|
| 199 | DECLSPEC_EXPORT
|
---|
| 200 | NTSTATUS
|
---|
| 201 | NTAPI
|
---|
| 202 | USBD_QueryBusTime(
|
---|
| 203 | IN PDEVICE_OBJECT RootHubPdo,
|
---|
| 204 | OUT PULONG CurrentFrame);
|
---|
| 205 |
|
---|
| 206 | #if (NTDDI_VERSION >= NTDDI_WINXP)
|
---|
| 207 |
|
---|
| 208 | DECLSPEC_IMPORT
|
---|
| 209 | ULONG
|
---|
| 210 | NTAPI
|
---|
| 211 | USBD_CalculateUsbBandwidth(
|
---|
| 212 | IN ULONG MaxPacketSize,
|
---|
| 213 | IN UCHAR EndpointType,
|
---|
| 214 | IN BOOLEAN LowSpeed);
|
---|
| 215 |
|
---|
| 216 | #endif
|
---|
| 217 |
|
---|
| 218 | #if (NTDDI_VERSION >= NTDDI_VISTA)
|
---|
| 219 |
|
---|
| 220 | DECLSPEC_IMPORT
|
---|
| 221 | USBD_STATUS
|
---|
| 222 | NTAPI
|
---|
| 223 | USBD_ValidateConfigurationDescriptor(
|
---|
| 224 | IN PUSB_CONFIGURATION_DESCRIPTOR ConfigDesc,
|
---|
| 225 | IN ULONG BufferLength,
|
---|
| 226 | IN USHORT Level,
|
---|
| 227 | OUT PUCHAR *Offset,
|
---|
| 228 | IN ULONG Tag OPTIONAL);
|
---|
| 229 |
|
---|
| 230 | #endif
|
---|
| 231 |
|
---|
| 232 | #endif /* ! _USBD_ */
|
---|
| 233 |
|
---|