1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <ctype.h> 5#include "typeconvert.h" 6#include "usbsock.h" 7#include "wdm-MJMN.h" 8#include "usbdi.h" 9#include "usb.h" 10#include "decode.h" 11#include "urb64.h" 12 13char *MajorFunctionString (PIRP_SAVE irp); 14char *MinorFunctionString (PIRP_SAVE pirp); 15 16#if defined(U2EC_ONPC) 17# define MAX_PACKET_SIZE MAX_BUF_LEN 18#else 19# define MAX_PACKET_SIZE 0 20# undef MAX_BUFFER_SIZE 21# define MAX_BUFFER_SIZE 0 22#endif 23 24unsigned char packets[MAX_PACKET_SIZE]; 25int plen; 26char pstr[MAX_BUFFER_SIZE]; 27char pstr_ascii[MAX_BUFFER_SIZE]; 28char pktname[1024]; 29 30 31#define IS_IP (packets[U2EC_L2_TYPE]==U2EC_L2_TYPE_IP) 32#define IS_TCP (packets[U2EC_L3_TYPE]==U2EC_L3_TYPE_TCP) 33#define IS_U2EC_IRP_CLIENT (packets[U2EC_L3_DST_PORT]==0x0d&&(packets[U2EC_L3_DST_PORT+1]==0xa2||packets[U2EC_L3_DST_PORT+1]==0x42)) 34#define IS_U2EC_IRP_SERVER (packets[U2EC_L3_SRC_PORT]==0x0d&&(packets[U2EC_L3_SRC_PORT+1]==0xa2||packets[U2EC_L3_SRC_PORT+1]==0x42)) 35//#define IS_U2EC_IRP_CLIENT (packets[U2EC_L3_SRC_PORT]==0x04 && packets[U2EC_L3_DST_PORT]==0x0d) // 3920 36//#define IS_U2EC_IRP_SERVER (packets[U2EC_L3_SRC_PORT]==0x0d && packets[U2EC_L3_DST_PORT]==0x04) // 3920 37//#define IS_U2EC_IRP_CLIENT (packets[U2EC_L3_SRC_PORT+1]==0x84 && packets[U2EC_L3_DST_PORT+1]==0xa2) // C90 38//#define IS_U2EC_IRP_SERVER (packets[U2EC_L3_SRC_PORT+1]==0xa2 && packets[U2EC_L3_DST_PORT+1]==0x84) // C90 39//#define IS_U2EC_IRP_CLIENT (packets[U2EC_L3_SRC_PORT]==0x04 && packets[U2EC_L3_DST_PORT]==0x0d) // C90P 40//#define IS_U2EC_IRP_SERVER (packets[U2EC_L3_SRC_PORT]==0x0d && packets[U2EC_L3_DST_PORT]==0x04) // C90P 41//#define IS_U2EC_IRP_CLIENT (packets[U2EC_L3_SRC_PORT]==0x0a && packets[U2EC_L3_DST_PORT]==0x0d) // C90P2 42//#define IS_U2EC_IRP_SERVER (packets[U2EC_L3_SRC_PORT]==0x0d && packets[U2EC_L3_DST_PORT]==0x0a) // C90P2 43//#define IS_U2EC_IRP_CLIENT (packets[U2EC_L3_SRC_PORT]==0x08 && packets[U2EC_L3_DST_PORT]==0x0d) // C90C 44//#define IS_U2EC_IRP_SERVER (packets[U2EC_L3_SRC_PORT]==0x0d && packets[U2EC_L3_DST_PORT]==0x08) // C90C 45//#define IS_U2EC_IRP_CLIENT (packets[U2EC_L3_SRC_PORT]==0x04 && packets[U2EC_L3_DST_PORT]==0x0d) // 5470 46//#define IS_U2EC_IRP_SERVER (packets[U2EC_L3_SRC_PORT]==0x0d && packets[U2EC_L3_DST_PORT]==0x04) // 5470 47//#define IS_U2EC_IRP_CLIENT (packets[U2EC_L3_SRC_PORT]==0x04 && packets[U2EC_L3_DST_PORT]==0x0d) // 5610 48//#define IS_U2EC_IRP_SERVER (packets[U2EC_L3_SRC_PORT]==0x0d && packets[U2EC_L3_DST_PORT]==0x04) // 5610 49#define IS_U2EC_IRP (IS_U2EC_IRP_CLIENT||IS_U2EC_IRP_SERVER) 50#define IS_U2EC_IRP_CONTENT (plen >= 158) 51 52void decodeBuf(char *sp, char *buf, int len) 53{ 54 int i; 55 56 printf("%sBuffer[%x]:", sp, len); 57 for(i=0;i<len;i++) 58 { 59 if(i%8==0) printf("\n%s%02x", sp, (unsigned char)buf[i]); 60 else printf(" %02x", (unsigned char)buf[i]); 61 } 62 printf("\n"); 63} 64 65void inline ppktbuf(char *buf, int size) 66{ 67 if(size <= 0) 68 return; 69 int pos; 70 for(pos=0; pos<size; pos++) { 71 if(pos%64 == 0) PDEBUG("\t "); 72 PDEBUG("%c", (isprint((char)*(buf + pos))) ? (char)*(buf + pos) : '.'); 73 if(pos%64 == 63) PDEBUG("\n"); 74 } 75 PDEBUG("\n"); 76 for(pos=0; pos<size; pos++) { 77 if(pos%16 == 0) PDEBUG("\t"); 78 if(pos%8 == 0) PDEBUG(" "); 79 PDEBUG("%2.2x ", (unsigned char)*(buf + pos)); 80 if(pos%16 == 15) PDEBUG("\n"); 81 } 82 PDEBUG("\n\n"); 83} 84 85void inline print_urb(PURB purb) 86{ 87 int count; 88 int i; 89 unsigned char *ptr, *urb_ptr; 90 USBD_INTERFACE_INFORMATION *itf; 91 92 PDEBUG("\tURB:\n"); 93 PDEBUG("\t length: 0x%x \n", purb->UrbHeader.Length); 94 PDEBUG("\t function: 0x%x \n", purb->UrbHeader.Function); 95 PDEBUG("\t status: 0x%x \n", purb->UrbHeader.Status); 96 PDEBUG("\t usbdflags: 0x%x \n", purb->UrbHeader.UsbdFlags); 97 98 switch (purb->UrbHeader.Function){ 99 case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: 100 PDEBUG("\t URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE\n"); 101 PDEBUG("\t UrbControlDescriptorRequest.TransferBufferLength: %x\n", purb->UrbControlDescriptorRequest.TransferBufferLength); 102 PDEBUG("\t UrbControlDescriptorRequest.Index: %x\n", purb->UrbControlDescriptorRequest.Index); 103 PDEBUG("\t UrbControlDescriptorRequest.DescriptorType: %x\n", purb->UrbControlDescriptorRequest.DescriptorType); 104 PDEBUG("\t UrbControlDescriptorRequest.LanguageId: %x\n", purb->UrbControlDescriptorRequest.LanguageId); 105 PDEBUG("\t UrbControlDescriptorRequest.Reserved: %x\n", (int)purb->UrbControlDescriptorRequest.Reserved); 106 PDEBUG("\t UrbControlDescriptorRequest.Reserved0: %x\n", purb->UrbControlDescriptorRequest.Reserved0); 107 PDEBUG("\t UrbControlDescriptorRequest.Reserved1: %x\n", purb->UrbControlDescriptorRequest.Reserved1); 108 PDEBUG("\t UrbControlDescriptorRequest.Reserved2: %x\n", purb->UrbControlDescriptorRequest.Reserved2); 109 PDEBUG("\t UrbControlDescriptorRequest.hca.HcdEndpoint: %x\n", (int)purb->UrbControlDescriptorRequest.hca.HcdEndpoint); 110 PDEBUG("\t UrbControlDescriptorRequest.hca.HcdIrp: %x\n", (int)purb->UrbControlDescriptorRequest.hca.HcdIrp); 111 PDEBUG("\t UrbControlDescriptorRequest.hca.HcdCurrentIoFlushPointer: %x\n", (int)purb->UrbControlDescriptorRequest.hca.HcdCurrentIoFlushPointer); 112 PDEBUG("\t UrbControlDescriptorRequest.hca.HcdExtension: %x\n", (int)purb->UrbControlDescriptorRequest.hca.HcdExtension); 113 break; // end of URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: 114 case URB_FUNCTION_SELECT_CONFIGURATION: 115 PDEBUG("\t URB_FUNCTION_SELECT_CONFIGURATION\n"); 116 117#if 0 118 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bLength: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor->bLength); 119 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bDescriptorType: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.bDescriptorType); 120 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.wTotalLength: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.wTotalLength); 121 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bNumInterfaces: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.bNumInterfaces); 122 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bConfigurationValue: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.bConfigurationValue); 123 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.iConfiguration: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.iConfiguration); 124 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bmAttributes: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.bmAttributes); 125 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.MaxPower: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.MaxPower); 126#else 127 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor: %x\n", (int)purb->UrbSelectConfiguration.ConfigurationDescriptor); 128 PDEBUG("\t UrbSelectConfiguration.ConfigurationHandle: %x\n", (int)purb->UrbSelectConfiguration.ConfigurationHandle); 129#endif 130 131 urb_ptr = (unsigned char*)&purb->UrbSelectConfiguration.ConfigurationDescriptor; 132 ptr = (unsigned char *)&purb->UrbSelectConfiguration.Interface.Length; 133 for(i=0; (ptr-urb_ptr+sizeof(purb->UrbHeader)) < purb->UrbHeader.Length;i++) { 134 itf = (USBD_INTERFACE_INFORMATION *)ptr; 135 ptr += itf->Length; 136 PDEBUG("\t UrbSelectConfiguration.Interface.Length: %x\n", itf->Length); 137 PDEBUG("\t UrbSelectConfiguration.Interface.InterfaceNumber: %x\n", itf->InterfaceNumber); 138 PDEBUG("\t UrbSelectConfiguration.Interface.AlternateSetting: %x\n", itf->AlternateSetting); 139 PDEBUG("\t UrbSelectConfiguration.Interface.Class: %x\n", itf->Class); 140 PDEBUG("\t UrbSelectConfiguration.Interface.SubClass: %x\n", itf->SubClass); 141 PDEBUG("\t UrbSelectConfiguration.Interface.Protocol: %x\n", itf->Protocol); 142 PDEBUG("\t UrbSelectConfiguration.Interface.Reserved: %x\n", itf->Reserved); 143 PDEBUG("\t UrbSelectConfiguration.Interface.InterfaceHandle: %x\n", (int)itf->InterfaceHandle); 144 PDEBUG("\t UrbSelectConfiguration.Interface.NumberOfPipes: %x\n", itf->NumberOfPipes); 145 146 for(count=0;count<itf->NumberOfPipes;count++) 147 { 148 PDEBUG("\t Pipe : %x\n", count); 149 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].MaximumPacketSize: %x\n", count, itf->Pipes[count].MaximumPacketSize); 150 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].EndpointAddress: %x\n", count, itf->Pipes[count].EndpointAddress); 151 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].Interval: %x\n", count, itf->Pipes[count].Interval); 152 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].PipeType: %x\n", count, itf->Pipes[count].PipeType); 153 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].PipeHandle: %x\n", count, (int)itf->Pipes[count].PipeHandle); 154 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].MaximumTransferSize: %x\n", count, itf->Pipes[count].MaximumTransferSize); 155 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].PipeFlags: %x\n", count, itf->Pipes[count].PipeFlags); 156 } 157 } 158 break; // end of URB_FUNCTION_SELECT_CONFIGURATION 159 160 case 0x2a: 161 PDEBUG("\t URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR(0x2a)\n"); 162 PDEBUG("\t UrbOsFeatureDescriptorRequest.Reserved: %x\n", (int)purb->UrbControlDescriptorRequest.Reserved); 163 PDEBUG("\t UrbOsFeatureDescriptorRequest.Reserved0: %x\n", purb->UrbControlDescriptorRequest.Reserved0); 164 PDEBUG("\t UrbOsFeatureDescriptorRequest.TransferBufferLength: %x\n", purb->UrbControlDescriptorRequest.TransferBufferLength); 165 PDEBUG("\t UrbOsFeatureDescriptorRequest.TransferBuffer: %x\n", (int)purb->UrbControlDescriptorRequest.TransferBuffer); 166 PDEBUG("\t UrbOsFeatureDescriptorRequest.TransferBufferMDL: %x\n", (int)purb->UrbControlDescriptorRequest.TransferBufferMDL); 167 PDEBUG("\t UrbOsFeatureDescriptorRequest.Recipient & Reserved1 & Reserved 2: %x\n", purb->UrbControlDescriptorRequest.Reserved1); 168 PDEBUG("\t UrbOsFeatureDescriptorRequest.InterfaceNumber: %x\n", purb->UrbControlDescriptorRequest.Index); 169 PDEBUG("\t UrbOsFeatureDescriptorRequest.MS_PageIdex: %x\n", purb->UrbControlDescriptorRequest.DescriptorType); 170 PDEBUG("\t UrbOsFeatureDescriptorRequest.MS_FeatureDescriptorIndex: %x\n", purb->UrbControlDescriptorRequest.LanguageId); 171 PDEBUG("\t UrbOsFeatureDescriptorRequest.Reserved3: %x\n", purb->UrbControlDescriptorRequest.Reserved2); 172 break; 173 174 case URB_FUNCTION_SELECT_INTERFACE: // 0x0001 175 PDEBUG("\t URB_FUNCTION_SELECT_INTERFACE\n"); 176 PDEBUG("\t UrbSelectInterface.Interface.Length: %x\n", purb->UrbSelectInterface.Interface.Length); 177 PDEBUG("\t UrbSelectInterface.Interface.InterfaceNumber: %x\n", purb->UrbSelectInterface.Interface.InterfaceNumber); 178 PDEBUG("\t UrbSelectInterface.Interface.AlternateSetting: %x\n", purb->UrbSelectInterface.Interface.AlternateSetting); 179 PDEBUG("\t UrbSelectInterface.Interface.Class: %x\n", purb->UrbSelectInterface.Interface.Class); 180 PDEBUG("\t UrbSelectInterface.Interface.SubClass: %x\n", purb->UrbSelectInterface.Interface.SubClass); 181 PDEBUG("\t UrbSelectInterface.Interface.Protocol: %x\n", purb->UrbSelectInterface.Interface.Protocol); 182 PDEBUG("\t UrbSelectInterface.Interface.Reserved: %x\n", purb->UrbSelectInterface.Interface.Reserved); 183 PDEBUG("\t UrbSelectInterface.Interface.InterfaceHandle: %x\n", (int)purb->UrbSelectInterface.Interface.InterfaceHandle); 184 PDEBUG("\t UrbSelectInterface.Interface.NumberOfPipes: %x\n", purb->UrbSelectInterface.Interface.NumberOfPipes); 185 186 for(count=0;count<purb->UrbSelectInterface.Interface.NumberOfPipes;count++) 187 { 188 PDEBUG("\t Pipe : %x\n", count); 189 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].PipeType: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].PipeType); 190 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].PipeHandle: %x\n", count, (int)purb->UrbSelectInterface.Interface.Pipes[count].PipeHandle); 191 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].MaximumTransferSize: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].MaximumTransferSize); 192 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].PipeFlags: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].PipeFlags); 193 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].MaximumPacketSize: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].MaximumPacketSize); 194 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].EndpointAddress: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].EndpointAddress); 195 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].Interval: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].Interval); 196 } 197 break; // URB_FUNCTION_SELECT_INTERFACE 0x0001 198 199 case URB_FUNCTION_CONTROL_TRANSFER: // 0x0008 200 PDEBUG("\t URB_FUNCTION_CONTROL_TRANSFER\n"); 201 PDEBUG("\t UrbControlTransfer.PipeHandle: %x\n", (int)purb->UrbControlTransfer.PipeHandle); 202 PDEBUG("\t UrbControlTransfer.TransferFlags: %x\n", purb->UrbControlTransfer.TransferFlags); 203 PDEBUG("\t UrbControlTransfer.TransferBufferLength: %x\n", purb->UrbControlTransfer.TransferBufferLength); 204 PDEBUG("\t UrbControlTransfer.TransferBuffer: %x\n", (int)purb->UrbControlTransfer.TransferBuffer); 205 PDEBUG("\t UrbControlTransfer.TransferBufferMDL: %x\n", (int)purb->UrbControlTransfer.TransferBufferMDL); 206 PDEBUG("\t UrbControlTransfer.UrbLink: %x\n", (int)purb->UrbControlTransfer.UrbLink); 207 PDEBUG("\t UrbControlTransfer.SetupPacket:"); 208 209 210 for(count=0;count<8;count++) 211 { 212 PDEBUG("%02x", purb->UrbControlTransfer.SetupPacket[count]); 213 } 214 PDEBUG("\n"); 215 break; 216 217 case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: // 0x0009 218 PDEBUG("\t URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER\n"); 219 PDEBUG("\t UrbBulkOrInterruptTransfer.PipeHandle: %x\n", (int)purb->UrbBulkOrInterruptTransfer.PipeHandle); 220 PDEBUG("\t UrbBulkOrInterruptTransfer.TransferFlags: %x\n", purb->UrbBulkOrInterruptTransfer.TransferFlags); 221 PDEBUG("\t UrbBulkOrInterruptTransfer.TransferBufferLength: %x\n", purb->UrbBulkOrInterruptTransfer.TransferBufferLength); 222 PDEBUG("\t UrbBulkOrInterruptTransfer.TransferBuffer: %x\n", (int)purb->UrbBulkOrInterruptTransfer.TransferBuffer); 223 PDEBUG("\t UrbBulkOrInterruptTransfer.TransferBufferMDL: %x\n", (int)purb->UrbBulkOrInterruptTransfer.TransferBufferMDL); 224 PDEBUG("\t UrbBulkOrInterruptTransfer.UrbLink: %x\n", (int)purb->UrbBulkOrInterruptTransfer.UrbLink); 225 PDEBUG("\t UrbBulkOrInterruptTransfer.hca.HcdEndpoint: %x\n", (int)purb->UrbBulkOrInterruptTransfer.hca.HcdEndpoint); 226 PDEBUG("\t UrbBulkOrInterruptTransfer.hca.HcdIrp: %x\n", (int)purb->UrbBulkOrInterruptTransfer.hca.HcdIrp); 227 PDEBUG("\t UrbBulkOrInterruptTransfer.hca.HcdCurrentIoFlushPointer: %x\n", (int)purb->UrbBulkOrInterruptTransfer.hca.HcdCurrentIoFlushPointer); 228 PDEBUG("\t UrbBulkOrInterruptTransfer.hca.HcdExtension: %x\n", (int)purb->UrbBulkOrInterruptTransfer.hca.HcdExtension); 229 break; 230 231 case URB_FUNCTION_VENDOR_DEVICE: 232 case URB_FUNCTION_VENDOR_INTERFACE: 233 case URB_FUNCTION_VENDOR_ENDPOINT: 234 case URB_FUNCTION_VENDOR_OTHER: 235 case URB_FUNCTION_CLASS_DEVICE: 236 case URB_FUNCTION_CLASS_INTERFACE: 237 case URB_FUNCTION_CLASS_ENDPOINT: 238 case URB_FUNCTION_CLASS_OTHER: 239 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_DEVICE) 240 PDEBUG("\t URB_FUNCTION_VENDOR_DEVICE\n"); 241 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_INTERFACE) 242 PDEBUG("\t URB_FUNCTION_VENDOR_INTERFACE\n"); 243 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_ENDPOINT) 244 PDEBUG("\t URB_FUNCTION_VENDOR_ENDPOINT\n"); 245 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_OTHER) 246 PDEBUG("\t URB_FUNCTION_VENDOR_OTHER\n"); 247 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_DEVICE) 248 PDEBUG("\t URB_FUNCTION_CLASS_DEVICE\n"); 249 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_INTERFACE) 250 PDEBUG("\t URB_FUNCTION_CLASS_INTERFACE\n"); 251 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_ENDPOINT) 252 PDEBUG("\t URB_FUNCTION_CLASS_ENDPOINT\n"); 253 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_OTHER) 254 PDEBUG("\t URB_FUNCTION_CLASS_OTHER\n"); 255 PDEBUG("\t UrbControlVendorClassRequest.Reserved: %x\n", (int)purb->UrbControlVendorClassRequest.Reserved); 256 PDEBUG("\t UrbControlVendorClassRequest.TransferFlags: %x\n", purb->UrbControlVendorClassRequest.TransferFlags); 257 PDEBUG("\t UrbControlVendorClassRequest.TransferBufferLength: %x\n", purb->UrbControlVendorClassRequest.TransferBufferLength); 258 PDEBUG("\t UrbControlVendorClassRequest.TransferBuffer: %x\n", (int)purb->UrbControlVendorClassRequest.TransferBuffer); 259 PDEBUG("\t UrbControlVendorClassRequest.TransferBufferMDL: %x\n", (int)purb->UrbControlVendorClassRequest.TransferBufferMDL); 260 PDEBUG("\t UrbControlVendorClassRequest.UrbLink: %x\n", (int)purb->UrbControlVendorClassRequest.UrbLink); 261 PDEBUG("\t UrbControlVendorClassRequest.RequestTypeReservedBits: %x\n", purb->UrbControlVendorClassRequest.RequestTypeReservedBits); 262 PDEBUG("\t UrbControlVendorClassRequest.Request: %x\n", purb->UrbControlVendorClassRequest.Request); 263 PDEBUG("\t UrbControlVendorClassRequest.Value: %x\n", purb->UrbControlVendorClassRequest.Value); 264 PDEBUG("\t UrbControlVendorClassRequest.Index: %x\n", purb->UrbControlVendorClassRequest.Index); 265 PDEBUG("\t UrbControlVendorClassRequest.Reserved1: %x\n", purb->UrbControlVendorClassRequest.Reserved1); 266 break; 267 268 default: 269 PDEBUG("\t Unknown URB(%x)\n", purb->UrbHeader.Function); 270 break; 271 } 272} 273 274void inline print_urb_64(PURB_64 purb) 275{ 276 int count; 277 int i; 278 unsigned char *ptr, *urb_ptr; 279 USBD_INTERFACE_INFORMATION_64 *itf; 280 281 PDEBUG("\tURB_64:\n"); 282 PDEBUG("\t length: 0x%x \n", purb->UrbHeader.Length); 283 PDEBUG("\t function: 0x%x \n", purb->UrbHeader.Function); 284 PDEBUG("\t status: 0x%x \n", purb->UrbHeader.Status); 285 PDEBUG("\t usbdflags: 0x%x \n", purb->UrbHeader.UsbdFlags); 286 287 switch (purb->UrbHeader.Function){ 288 case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: 289 PDEBUG("\t URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE\n"); 290 PDEBUG("\t UrbControlDescriptorRequest.TransferBufferLength: %x\n", purb->UrbControlDescriptorRequest.TransferBufferLength); 291 PDEBUG("\t UrbControlDescriptorRequest.Index: %x\n", purb->UrbControlDescriptorRequest.Index); 292 PDEBUG("\t UrbControlDescriptorRequest.DescriptorType: %x\n", purb->UrbControlDescriptorRequest.DescriptorType); 293 PDEBUG("\t UrbControlDescriptorRequest.LanguageId: %x\n", purb->UrbControlDescriptorRequest.LanguageId); 294 PDEBUG("\t UrbControlDescriptorRequest.Reserved: %x\n", (int)purb->UrbControlDescriptorRequest.Reserved); 295 PDEBUG("\t UrbControlDescriptorRequest.Reserved0: %x\n", purb->UrbControlDescriptorRequest.Reserved0); 296 PDEBUG("\t UrbControlDescriptorRequest.Reserved1: %x\n", purb->UrbControlDescriptorRequest.Reserved1); 297 PDEBUG("\t UrbControlDescriptorRequest.Reserved2: %x\n", purb->UrbControlDescriptorRequest.Reserved2); 298 //PDEBUG("\t UrbControlDescriptorRequest.hca.HcdEndpoint: %x\n", (int)purb->UrbControlDescriptorRequest.hca.HcdEndpoint); 299 //PDEBUG("\t UrbControlDescriptorRequest.hca.HcdIrp: %x\n", (int)purb->UrbControlDescriptorRequest.hca.HcdIrp); 300 //PDEBUG("\t UrbControlDescriptorRequest.hca.HcdCurrentIoFlushPointer: %x\n", (int)purb->UrbControlDescriptorRequest.hca.HcdCurrentIoFlushPointer); 301 //PDEBUG("\t UrbControlDescriptorRequest.hca.HcdExtension: %x\n", (int)purb->UrbControlDescriptorRequest.hca.HcdExtension); 302 break; // end of URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: 303 case URB_FUNCTION_SELECT_CONFIGURATION: 304 PDEBUG("\t URB_FUNCTION_SELECT_CONFIGURATION\n"); 305 306#if 0 307 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bLength: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor->bLength); 308 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bDescriptorType: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.bDescriptorType); 309 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.wTotalLength: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.wTotalLength); 310 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bNumInterfaces: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.bNumInterfaces); 311 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bConfigurationValue: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.bConfigurationValue); 312 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.iConfiguration: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.iConfiguration); 313 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.bmAttributes: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.bmAttributes); 314 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor.MaxPower: %x\n", purb->UrbSelectConfiguration.ConfigurationDescriptor.MaxPower); 315#else 316 PDEBUG("\t UrbSelectConfiguration.ConfigurationDescriptor: %x\n", (int)purb->UrbSelectConfiguration.ConfigurationDescriptor); 317 PDEBUG("\t UrbSelectConfiguration.ConfigurationHandle: %x\n", (int)purb->UrbSelectConfiguration.ConfigurationHandle); 318#endif 319 320 urb_ptr = (unsigned char*)&purb->UrbSelectConfiguration.ConfigurationDescriptor; 321 ptr = (unsigned char *)&purb->UrbSelectConfiguration.Interface.Length; 322 for(i=0; (ptr-urb_ptr+sizeof(purb->UrbHeader)) < purb->UrbHeader.Length;i++) { 323 itf = (USBD_INTERFACE_INFORMATION_64 *)ptr; 324 ptr += itf->Length; 325 PDEBUG("\t UrbSelectConfiguration.Interface.Length: %x\n", itf->Length); 326 PDEBUG("\t UrbSelectConfiguration.Interface.InterfaceNumber: %x\n", itf->InterfaceNumber); 327 PDEBUG("\t UrbSelectConfiguration.Interface.AlternateSetting: %x\n", itf->AlternateSetting); 328 PDEBUG("\t UrbSelectConfiguration.Interface.Class: %x\n", itf->Class); 329 PDEBUG("\t UrbSelectConfiguration.Interface.SubClass: %x\n", itf->SubClass); 330 PDEBUG("\t UrbSelectConfiguration.Interface.Protocol: %x\n", itf->Protocol); 331 PDEBUG("\t UrbSelectConfiguration.Interface.Reserved: %x\n", itf->Reserved); 332 PDEBUG("\t UrbSelectConfiguration.Interface.InterfaceHandle: %x\n", (int)itf->InterfaceHandle); 333 PDEBUG("\t UrbSelectConfiguration.Interface.NumberOfPipes: %x\n", itf->NumberOfPipes); 334 335 for(count=0;count<itf->NumberOfPipes;count++) 336 { 337 PDEBUG("\t Pipe : %x\n", count); 338 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].MaximumPacketSize: %x\n", count, itf->Pipes[count].MaximumPacketSize); 339 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].EndpointAddress: %x\n", count, itf->Pipes[count].EndpointAddress); 340 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].Interval: %x\n", count, itf->Pipes[count].Interval); 341 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].PipeType: %x\n", count, itf->Pipes[count].PipeType); 342 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].PipeHandle: %x\n", count, (int)itf->Pipes[count].PipeHandle); 343 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].MaximumTransferSize: %x\n", count, itf->Pipes[count].MaximumTransferSize); 344 PDEBUG("\t UrbSelectConfiguration.Interface.Pipes[%x].PipeFlags: %x\n", count, itf->Pipes[count].PipeFlags); 345 } 346 } 347 break; // end of URB_FUNCTION_SELECT_CONFIGURATION 348 349 case 0x2a: 350 PDEBUG("\t URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR(0x2a)\n"); 351 PDEBUG("\t UrbOsFeatureDescriptorRequest.Reserved: %x\n", (int)purb->UrbControlDescriptorRequest.Reserved); 352 PDEBUG("\t UrbOsFeatureDescriptorRequest.Reserved0: %x\n", purb->UrbControlDescriptorRequest.Reserved0); 353 PDEBUG("\t UrbOsFeatureDescriptorRequest.TransferBufferLength: %x\n", purb->UrbControlDescriptorRequest.TransferBufferLength); 354 PDEBUG("\t UrbOsFeatureDescriptorRequest.TransferBuffer: %x\n", (int)purb->UrbControlDescriptorRequest.TransferBuffer); 355 PDEBUG("\t UrbOsFeatureDescriptorRequest.TransferBufferMDL: %x\n", (int)purb->UrbControlDescriptorRequest.TransferBufferMDL); 356 PDEBUG("\t UrbOsFeatureDescriptorRequest.Recipient & Reserved1 & Reserved 2: %x\n", purb->UrbControlDescriptorRequest.Reserved1); 357 PDEBUG("\t UrbOsFeatureDescriptorRequest.InterfaceNumber: %x\n", purb->UrbControlDescriptorRequest.Index); 358 PDEBUG("\t UrbOsFeatureDescriptorRequest.MS_PageIdex: %x\n", purb->UrbControlDescriptorRequest.DescriptorType); 359 PDEBUG("\t UrbOsFeatureDescriptorRequest.MS_FeatureDescriptorIndex: %x\n", purb->UrbControlDescriptorRequest.LanguageId); 360 PDEBUG("\t UrbOsFeatureDescriptorRequest.Reserved3: %x\n", purb->UrbControlDescriptorRequest.Reserved2); 361 break; 362 363 case URB_FUNCTION_SELECT_INTERFACE: // 0x0001 364 PDEBUG("\t URB_FUNCTION_SELECT_INTERFACE\n"); 365 PDEBUG("\t UrbSelectInterface.Interface.Length: %x\n", purb->UrbSelectInterface.Interface.Length); 366 PDEBUG("\t UrbSelectInterface.Interface.InterfaceNumber: %x\n", purb->UrbSelectInterface.Interface.InterfaceNumber); 367 PDEBUG("\t UrbSelectInterface.Interface.AlternateSetting: %x\n", purb->UrbSelectInterface.Interface.AlternateSetting); 368 PDEBUG("\t UrbSelectInterface.Interface.Class: %x\n", purb->UrbSelectInterface.Interface.Class); 369 PDEBUG("\t UrbSelectInterface.Interface.SubClass: %x\n", purb->UrbSelectInterface.Interface.SubClass); 370 PDEBUG("\t UrbSelectInterface.Interface.Protocol: %x\n", purb->UrbSelectInterface.Interface.Protocol); 371 PDEBUG("\t UrbSelectInterface.Interface.Reserved: %x\n", purb->UrbSelectInterface.Interface.Reserved); 372 PDEBUG("\t UrbSelectInterface.Interface.InterfaceHandle: %x\n", (int)purb->UrbSelectInterface.Interface.InterfaceHandle); 373 PDEBUG("\t UrbSelectInterface.Interface.NumberOfPipes: %x\n", purb->UrbSelectInterface.Interface.NumberOfPipes); 374 375 for(count=0;count<purb->UrbSelectInterface.Interface.NumberOfPipes;count++) 376 { 377 PDEBUG("\t Pipe : %x\n", count); 378 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].PipeType: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].PipeType); 379 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].PipeHandle: %x\n", count, (int)purb->UrbSelectInterface.Interface.Pipes[count].PipeHandle); 380 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].MaximumTransferSize: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].MaximumTransferSize); 381 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].PipeFlags: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].PipeFlags); 382 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].MaximumPacketSize: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].MaximumPacketSize); 383 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].EndpointAddress: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].EndpointAddress); 384 PDEBUG("\t UrbSelectInterface.Interface.Pipes[%x].Interval: %x\n", count, purb->UrbSelectInterface.Interface.Pipes[count].Interval); 385 } 386 break; // URB_FUNCTION_SELECT_INTERFACE 0x0001 387 388 case URB_FUNCTION_CONTROL_TRANSFER: // 0x0008 389 PDEBUG("\t URB_FUNCTION_CONTROL_TRANSFER\n"); 390 PDEBUG("\t UrbControlTransfer.PipeHandle: %x\n", (int)purb->UrbControlTransfer.PipeHandle); 391 PDEBUG("\t UrbControlTransfer.TransferFlags: %x\n", purb->UrbControlTransfer.TransferFlags); 392 PDEBUG("\t UrbControlTransfer.TransferBufferLength: %x\n", purb->UrbControlTransfer.TransferBufferLength); 393 PDEBUG("\t UrbControlTransfer.TransferBuffer: %x\n", (int)purb->UrbControlTransfer.TransferBuffer); 394 PDEBUG("\t UrbControlTransfer.TransferBufferMDL: %x\n", (int)purb->UrbControlTransfer.TransferBufferMDL); 395 PDEBUG("\t UrbControlTransfer.UrbLink: %x\n", (int)purb->UrbControlTransfer.UrbLink); 396 PDEBUG("\t UrbControlTransfer.SetupPacket:"); 397 398 399 for(count=0;count<8;count++) 400 { 401 PDEBUG("%02x", purb->UrbControlTransfer.SetupPacket[count]); 402 } 403 PDEBUG("\n"); 404 break; 405 406 case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: // 0x0009 407 PDEBUG("\t URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER\n"); 408 PDEBUG("\t UrbBulkOrInterruptTransfer.PipeHandle: %x\n", (int)purb->UrbBulkOrInterruptTransfer.PipeHandle); 409 PDEBUG("\t UrbBulkOrInterruptTransfer.TransferFlags: %x\n", purb->UrbBulkOrInterruptTransfer.TransferFlags); 410 PDEBUG("\t UrbBulkOrInterruptTransfer.TransferBufferLength: %x\n", purb->UrbBulkOrInterruptTransfer.TransferBufferLength); 411 PDEBUG("\t UrbBulkOrInterruptTransfer.TransferBuffer: %x\n", (int)purb->UrbBulkOrInterruptTransfer.TransferBuffer); 412 PDEBUG("\t UrbBulkOrInterruptTransfer.TransferBufferMDL: %x\n", (int)purb->UrbBulkOrInterruptTransfer.TransferBufferMDL); 413 PDEBUG("\t UrbBulkOrInterruptTransfer.UrbLink: %x\n", (int)purb->UrbBulkOrInterruptTransfer.UrbLink); 414 //PDEBUG("\t UrbBulkOrInterruptTransfer.hca.HcdEndpoint: %x\n", (int)purb->UrbBulkOrInterruptTransfer.hca.HcdEndpoint); 415 //PDEBUG("\t UrbBulkOrInterruptTransfer.hca.HcdIrp: %x\n", (int)purb->UrbBulkOrInterruptTransfer.hca.HcdIrp); 416 //PDEBUG("\t UrbBulkOrInterruptTransfer.hca.HcdCurrentIoFlushPointer: %x\n", (int)purb->UrbBulkOrInterruptTransfer.hca.HcdCurrentIoFlushPointer); 417 //PDEBUG("\t UrbBulkOrInterruptTransfer.hca.HcdExtension: %x\n", (int)purb->UrbBulkOrInterruptTransfer.hca.HcdExtension); 418 break; 419 420 case URB_FUNCTION_VENDOR_DEVICE: 421 case URB_FUNCTION_VENDOR_INTERFACE: 422 case URB_FUNCTION_VENDOR_ENDPOINT: 423 case URB_FUNCTION_VENDOR_OTHER: 424 case URB_FUNCTION_CLASS_DEVICE: 425 case URB_FUNCTION_CLASS_INTERFACE: 426 case URB_FUNCTION_CLASS_ENDPOINT: 427 case URB_FUNCTION_CLASS_OTHER: 428 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_DEVICE) 429 PDEBUG("\t URB_FUNCTION_VENDOR_DEVICE\n"); 430 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_INTERFACE) 431 PDEBUG("\t URB_FUNCTION_VENDOR_INTERFACE\n"); 432 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_ENDPOINT) 433 PDEBUG("\t URB_FUNCTION_VENDOR_ENDPOINT\n"); 434 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_OTHER) 435 PDEBUG("\t URB_FUNCTION_VENDOR_OTHER\n"); 436 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_DEVICE) 437 PDEBUG("\t URB_FUNCTION_CLASS_DEVICE\n"); 438 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_INTERFACE) 439 PDEBUG("\t URB_FUNCTION_CLASS_INTERFACE\n"); 440 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_ENDPOINT) 441 PDEBUG("\t URB_FUNCTION_CLASS_ENDPOINT\n"); 442 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_OTHER) 443 PDEBUG("\t URB_FUNCTION_CLASS_OTHER\n"); 444 PDEBUG("\t UrbControlVendorClassRequest.Reserved: %x\n", (int)purb->UrbControlVendorClassRequest.Reserved); 445 PDEBUG("\t UrbControlVendorClassRequest.TransferFlags: %x\n", purb->UrbControlVendorClassRequest.TransferFlags); 446 PDEBUG("\t UrbControlVendorClassRequest.TransferBufferLength: %x\n", purb->UrbControlVendorClassRequest.TransferBufferLength); 447 PDEBUG("\t UrbControlVendorClassRequest.TransferBuffer: %x\n", (int)purb->UrbControlVendorClassRequest.TransferBuffer); 448 PDEBUG("\t UrbControlVendorClassRequest.TransferBufferMDL: %x\n", (int)purb->UrbControlVendorClassRequest.TransferBufferMDL); 449 PDEBUG("\t UrbControlVendorClassRequest.UrbLink: %x\n", (int)purb->UrbControlVendorClassRequest.UrbLink); 450 PDEBUG("\t UrbControlVendorClassRequest.RequestTypeReservedBits: %x\n", purb->UrbControlVendorClassRequest.RequestTypeReservedBits); 451 PDEBUG("\t UrbControlVendorClassRequest.Request: %x\n", purb->UrbControlVendorClassRequest.Request); 452 PDEBUG("\t UrbControlVendorClassRequest.Value: %x\n", purb->UrbControlVendorClassRequest.Value); 453 PDEBUG("\t UrbControlVendorClassRequest.Index: %x\n", purb->UrbControlVendorClassRequest.Index); 454 PDEBUG("\t UrbControlVendorClassRequest.Reserved1: %x\n", purb->UrbControlVendorClassRequest.Reserved1); 455 break; 456 457 default: 458 PDEBUG("\t Unknown URB(%x)\n", purb->UrbHeader.Function); 459 break; 460 } 461} 462 463 464 465void decodeURB(PURB purb, char *sp) 466{ 467 int count; 468 int i; 469 unsigned char *ptr, *urb_ptr; 470 USBD_INTERFACE_INFORMATION *itf; 471 472 printf("%sURB Len:%x\n", sp, purb->UrbHeader.Length); 473 printf("%sURB Fun:%x\n", sp, purb->UrbHeader.Function); 474 printf("%sURB Sts:%x\n", sp, purb->UrbHeader.Status); 475 printf("%sURB DevHnd:%x\n", sp, (int)purb->UrbHeader.UsbdDeviceHandle); 476 printf("%sURB Flg:%x\n", sp, purb->UrbHeader.UsbdFlags); 477 478 switch (purb->UrbHeader.Function){ 479 case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: 480 printf("\n%sURB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE\n", sp); 481 printf("%sUrbControlDescriptorRequest.TransferBufferLength: %x\n", sp, purb->UrbControlDescriptorRequest.TransferBufferLength); 482 printf("%sUrbControlDescriptorRequest.Index: %x\n", sp, purb->UrbControlDescriptorRequest.Index); 483 printf("%sUrbControlDescriptorRequest.DescriptorType: %x\n", sp, purb->UrbControlDescriptorRequest.DescriptorType); 484 printf("%sUrbControlDescriptorRequest.LanguageId: %x\n", sp, purb->UrbControlDescriptorRequest.LanguageId); 485 printf("%sUrbControlDescriptorRequest.Reserved: %x\n", sp, (int)purb->UrbControlDescriptorRequest.Reserved); 486 printf("%sUrbControlDescriptorRequest.Reserved0: %x\n", sp, purb->UrbControlDescriptorRequest.Reserved0); 487 printf("%sUrbControlDescriptorRequest.Reserved1: %x\n", sp, purb->UrbControlDescriptorRequest.Reserved1); 488 printf("%sUrbControlDescriptorRequest.Reserved2: %x\n", sp, purb->UrbControlDescriptorRequest.Reserved2); 489 printf("%sUrbControlDescriptorRequest.hca.HcdEndpoint: %x\n", sp, (int)purb->UrbControlDescriptorRequest.hca.HcdEndpoint); 490 printf("%sUrbControlDescriptorRequest.hca.HcdIrp: %x\n", sp, (int)purb->UrbControlDescriptorRequest.hca.HcdIrp); 491 printf("%sUrbControlDescriptorRequest.hca.HcdCurrentIoFlushPointer: %x\n", sp, (int)purb->UrbControlDescriptorRequest.hca.HcdCurrentIoFlushPointer); 492 printf("%sUrbControlDescriptorRequest.hca.HcdExtension: %x\n", sp, (int)purb->UrbControlDescriptorRequest.hca.HcdExtension); 493 break; // end of URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: 494 case URB_FUNCTION_SELECT_CONFIGURATION: 495 printf("\n%sURB_FUNCTION_SELECT_CONFIGURATION\n", sp); 496 497#if 0 498 printf("\n%sUrbSelectConfiguration.ConfigurationDescriptor.bLength: %x\n", sp, purb->UrbSelectConfiguration.ConfigurationDescriptor->bLength); 499 printf("%sUrbSelectConfiguration.ConfigurationDescriptor.bDescriptorType: %x\n", sp, purb->UrbSelectConfiguration.ConfigurationDescriptor.bDescriptorType); 500 printf("%sUrbSelectConfiguration.ConfigurationDescriptor.wTotalLength: %x\n", sp, purb->UrbSelectConfiguration.ConfigurationDescriptor.wTotalLength); 501 printf("%sUrbSelectConfiguration.ConfigurationDescriptor.bNumInterfaces: %x\n", sp, purb->UrbSelectConfiguration.ConfigurationDescriptor.bNumInterfaces); 502 printf("%sUrbSelectConfiguration.ConfigurationDescriptor.bConfigurationValue: %x\n", sp, purb->UrbSelectConfiguration.ConfigurationDescriptor.bConfigurationValue); 503 printf("%sUrbSelectConfiguration.ConfigurationDescriptor.iConfiguration: %x\n", sp, purb->UrbSelectConfiguration.ConfigurationDescriptor.iConfiguration); 504 printf("%sUrbSelectConfiguration.ConfigurationDescriptor.bmAttributes: %x\n", sp, purb->UrbSelectConfiguration.ConfigurationDescriptor.bmAttributes); 505 printf("%sUrbSelectConfiguration.ConfigurationDescriptor.MaxPower: %x\n", sp, purb->UrbSelectConfiguration.ConfigurationDescriptor.MaxPower); 506#else 507 printf("%sUrbSelectConfiguration.ConfigurationDescriptor: %x\n", sp, (int)purb->UrbSelectConfiguration.ConfigurationDescriptor); 508 printf("%sUrbSelectConfiguration.ConfigurationHandle: %x\n", sp, (int)purb->UrbSelectConfiguration.ConfigurationHandle); 509#endif 510 511 urb_ptr = (unsigned char*)&purb->UrbSelectConfiguration.ConfigurationDescriptor; 512 ptr = (unsigned char *)&purb->UrbSelectConfiguration.Interface.Length; 513 for(i=0; (ptr-urb_ptr+sizeof(purb->UrbHeader)) < purb->UrbHeader.Length;i++) { 514 itf = (USBD_INTERFACE_INFORMATION *)ptr; 515 ptr += itf->Length; 516 printf("\n%sUrbSelectConfiguration.Interface.Length: %x\n", sp, itf->Length); 517 printf("%sUrbSelectConfiguration.Interface.InterfaceNumber: %x\n", sp, itf->InterfaceNumber); 518 printf("%sUrbSelectConfiguration.Interface.AlternateSetting: %x\n", sp, itf->AlternateSetting); 519 printf("%sUrbSelectConfiguration.Interface.Class: %x\n", sp, itf->Class); 520 printf("%sUrbSelectConfiguration.Interface.SubClass: %x\n", sp, itf->SubClass); 521 printf("%sUrbSelectConfiguration.Interface.Protocol: %x\n", sp, itf->Protocol); 522 printf("%sUrbSelectConfiguration.Interface.Reserved: %x\n", sp, itf->Reserved); 523 printf("%sUrbSelectConfiguration.Interface.InterfaceHandle: %x\n", sp, (int)itf->InterfaceHandle); 524 printf("%sUrbSelectConfiguration.Interface.NumberOfPipes: %x\n", sp, itf->NumberOfPipes); 525 526 for(count=0;count<itf->NumberOfPipes;count++) 527 { 528 printf("\n%sPipe : %x\n", sp, count); 529 printf("%sUrbSelectConfiguration.Interface.Pipes[%x].MaximumPacketSize: %x\n", sp, count, itf->Pipes[count].MaximumPacketSize); 530 printf("%sUrbSelectConfiguration.Interface.Pipes[%x].EndpointAddress: %x\n", sp, count, itf->Pipes[count].EndpointAddress); 531 printf("%sUrbSelectConfiguration.Interface.Pipes[%x].Interval: %x\n", sp, count, itf->Pipes[count].Interval); 532 printf("%sUrbSelectConfiguration.Interface.Pipes[%x].PipeType: %x\n", sp, count, itf->Pipes[count].PipeType); 533 printf("%sUrbSelectConfiguration.Interface.Pipes[%x].PipeHandle: %x\n", sp, count, (int)itf->Pipes[count].PipeHandle); 534 printf("%sUrbSelectConfiguration.Interface.Pipes[%x].MaximumTransferSize: %x\n", sp, count, itf->Pipes[count].MaximumTransferSize); 535 printf("%sUrbSelectConfiguration.Interface.Pipes[%x].PipeFlags: %x\n", sp, count, itf->Pipes[count].PipeFlags); 536 } 537 } 538 break; // end of URB_FUNCTION_SELECT_CONFIGURATION 539 540 case 0x2a: 541 printf("\n%sURB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR(0x2a)\n", sp); 542 printf("\n%sUrbOsFeatureDescriptorRequest.Reserved: %x\n", sp, (int)purb->UrbControlDescriptorRequest.Reserved); 543 printf("\n%sUrbOsFeatureDescriptorRequest.Reserved0: %x\n", sp, purb->UrbControlDescriptorRequest.Reserved0); 544 printf("\n%sUrbOsFeatureDescriptorRequest.TransferBufferLength: %x\n", sp, purb->UrbControlDescriptorRequest.TransferBufferLength); 545 printf("\n%sUrbOsFeatureDescriptorRequest.TransferBuffer: %x\n", sp, (int)purb->UrbControlDescriptorRequest.TransferBuffer); 546 printf("\n%sUrbOsFeatureDescriptorRequest.TransferBufferMDL: %x\n", sp, (int)purb->UrbControlDescriptorRequest.TransferBufferMDL); 547 printf("\n%sUrbOsFeatureDescriptorRequest.Recipient & Reserved1 & Reserved 2: %x\n", sp, purb->UrbControlDescriptorRequest.Reserved1); 548 printf("\n%sUrbOsFeatureDescriptorRequest.InterfaceNumber: %x\n", sp, purb->UrbControlDescriptorRequest.Index); 549 printf("\n%sUrbOsFeatureDescriptorRequest.MS_PageIdex: %x\n", sp, purb->UrbControlDescriptorRequest.DescriptorType); 550 printf("\n%sUrbOsFeatureDescriptorRequest.MS_FeatureDescriptorIndex: %x\n", sp, purb->UrbControlDescriptorRequest.LanguageId); 551 printf("\n%sUrbOsFeatureDescriptorRequest.Reserved3: %x\n", sp, purb->UrbControlDescriptorRequest.Reserved2); 552 break; 553 554 case URB_FUNCTION_SELECT_INTERFACE: // 0x0001 555 printf("\n%sURB_FUNCTION_SELECT_INTERFACE\n", sp); 556 printf("\n%sUrbSelectInterface.Interface.Length: %x\n", sp, purb->UrbSelectInterface.Interface.Length); 557 printf("%sUrbSelectInterface.Interface.InterfaceNumber: %x\n", sp, purb->UrbSelectInterface.Interface.InterfaceNumber); 558 printf("%sUrbSelectInterface.Interface.AlternateSetting: %x\n", sp, purb->UrbSelectInterface.Interface.AlternateSetting); 559 printf("%sUrbSelectInterface.Interface.Class: %x\n", sp, purb->UrbSelectInterface.Interface.Class); 560 printf("%sUrbSelectInterface.Interface.SubClass: %x\n", sp, purb->UrbSelectInterface.Interface.SubClass); 561 printf("%sUrbSelectInterface.Interface.Protocol: %x\n", sp, purb->UrbSelectInterface.Interface.Protocol); 562 printf("%sUrbSelectInterface.Interface.Reserved: %x\n", sp, purb->UrbSelectInterface.Interface.Reserved); 563 printf("%sUrbSelectInterface.Interface.InterfaceHandle: %x\n", sp, (int)purb->UrbSelectInterface.Interface.InterfaceHandle); 564 printf("%sUrbSelectInterface.Interface.NumberOfPipes: %x\n", sp, purb->UrbSelectInterface.Interface.NumberOfPipes); 565 566 for(count=0;count<purb->UrbSelectInterface.Interface.NumberOfPipes;count++) 567 { 568 printf("\n%sPipe : %x\n", sp, count); 569 printf("%sUrbSelectInterface.Interface.Pipes[%x].PipeType: %x\n", sp, count, purb->UrbSelectInterface.Interface.Pipes[count].PipeType); 570 printf("%sUrbSelectInterface.Interface.Pipes[%x].PipeHandle: %x\n", sp, count, (int)purb->UrbSelectInterface.Interface.Pipes[count].PipeHandle); 571 printf("%sUrbSelectInterface.Interface.Pipes[%x].MaximumTransferSize: %x\n", sp, count, purb->UrbSelectInterface.Interface.Pipes[count].MaximumTransferSize); 572 printf("%sUrbSelectInterface.Interface.Pipes[%x].PipeFlags: %x\n", sp, count, purb->UrbSelectInterface.Interface.Pipes[count].PipeFlags); 573 printf("%sUrbSelectInterface.Interface.Pipes[%x].MaximumPacketSize: %x\n", sp, count, purb->UrbSelectInterface.Interface.Pipes[count].MaximumPacketSize); 574 printf("%sUrbSelectInterface.Interface.Pipes[%x].EndpointAddress: %x\n", sp, count, purb->UrbSelectInterface.Interface.Pipes[count].EndpointAddress); 575 printf("%sUrbSelectInterface.Interface.Pipes[%x].Interval: %x\n", sp, count, purb->UrbSelectInterface.Interface.Pipes[count].Interval); 576 } 577 break; // URB_FUNCTION_SELECT_INTERFACE 0x0001 578 579 case URB_FUNCTION_CONTROL_TRANSFER: // 0x0008 580 printf("\n%sURB_FUNCTION_CONTROL_TRANSFER\n", sp); 581 printf("%sUrbControlTransfer.PipeHandle: %x\n", sp, (int)purb->UrbControlTransfer.PipeHandle); 582 printf("%sUrbControlTransfer.TransferFlags: %x\n", sp, purb->UrbControlTransfer.TransferFlags); 583 printf("%sUrbControlTransfer.TransferBufferLength: %x\n", sp, purb->UrbControlTransfer.TransferBufferLength); 584 printf("%sUrbControlTransfer.TransferBuffer: %x\n", sp, (int)purb->UrbControlTransfer.TransferBuffer); 585 printf("%sUrbControlTransfer.TransferBufferMDL: %x\n", sp, (int)purb->UrbControlTransfer.TransferBufferMDL); 586 printf("%sUrbControlTransfer.UrbLink: %x\n", sp, (int)purb->UrbControlTransfer.UrbLink); 587 printf("%sUrbControlTransfer.SetupPacket:", sp); 588 589 590 for(count=0;count<8;count++) 591 { 592 printf("%02x", purb->UrbControlTransfer.SetupPacket[count]); 593 } 594 printf("\n"); 595 break; 596 597 case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: // 0x0009 598 printf("\n%sURB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER\n", sp); 599 printf("%sUrbBulkOrInterruptTransfer.PipeHandle: %x\n", sp, (int)purb->UrbBulkOrInterruptTransfer.PipeHandle); 600 printf("%sUrbBulkOrInterruptTransfer.TransferFlags: %x\n", sp, purb->UrbBulkOrInterruptTransfer.TransferFlags); 601 printf("%sUrbBulkOrInterruptTransfer.TransferBufferLength: %x\n", sp, (int)purb->UrbBulkOrInterruptTransfer.TransferBufferLength); 602 printf("%sUrbBulkOrInterruptTransfer.TransferBuffer: %x\n", sp, (int)purb->UrbBulkOrInterruptTransfer.TransferBuffer); 603 printf("%sUrbBulkOrInterruptTransfer.TransferBufferMDL: %x\n", sp, (int)purb->UrbBulkOrInterruptTransfer.TransferBufferMDL); 604 printf("%sUrbBulkOrInterruptTransfer.UrbLink: %x\n", sp, (int)purb->UrbBulkOrInterruptTransfer.UrbLink); 605 printf("%sUrbBulkOrInterruptTransfer.hca.HcdEndpoint: %x\n", sp, (int)purb->UrbBulkOrInterruptTransfer.hca.HcdEndpoint); 606 printf("%sUrbBulkOrInterruptTransfer.hca.HcdIrp: %x\n", sp, (int)purb->UrbBulkOrInterruptTransfer.hca.HcdIrp); 607 printf("%sUrbBulkOrInterruptTransfer.hca.HcdCurrentIoFlushPointer: %x\n", sp, (int)purb->UrbBulkOrInterruptTransfer.hca.HcdCurrentIoFlushPointer); 608 printf("%sUrbBulkOrInterruptTransfer.hca.HcdExtension: %x\n", sp, (int)purb->UrbBulkOrInterruptTransfer.hca.HcdExtension); 609 break; 610 611 case URB_FUNCTION_VENDOR_DEVICE: 612 case URB_FUNCTION_VENDOR_INTERFACE: 613 case URB_FUNCTION_VENDOR_ENDPOINT: 614 case URB_FUNCTION_VENDOR_OTHER: 615 case URB_FUNCTION_CLASS_DEVICE: 616 case URB_FUNCTION_CLASS_INTERFACE: 617 case URB_FUNCTION_CLASS_ENDPOINT: 618 case URB_FUNCTION_CLASS_OTHER: 619 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_DEVICE) 620 printf("\n%sURB_FUNCTION_VENDOR_DEVICE\n", sp); 621 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_INTERFACE) 622 printf("\n%sURB_FUNCTION_VENDOR_INTERFACE\n", sp); 623 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_ENDPOINT) 624 printf("\n%sURB_FUNCTION_VENDOR_ENDPOINT\n", sp); 625 if(purb->UrbHeader.Function==URB_FUNCTION_VENDOR_OTHER) 626 printf("\n%sURB_FUNCTION_VENDOR_OTHER\n", sp); 627 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_DEVICE) 628 printf("\n%sURB_FUNCTION_CLASS_DEVICE\n", sp); 629 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_INTERFACE) 630 printf("\n%sURB_FUNCTION_CLASS_INTERFACE\n", sp); 631 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_ENDPOINT) 632 printf("\n%sURB_FUNCTION_CLASS_ENDPOINT\n", sp); 633 if(purb->UrbHeader.Function==URB_FUNCTION_CLASS_OTHER) 634 printf("\n%sURB_FUNCTION_CLASS_OTHER\n", sp); 635 printf("%sUrbControlVendorClassRequest.Reserved: %x\n", sp, (int)purb->UrbControlVendorClassRequest.Reserved); 636 printf("%sUrbControlVendorClassRequest.TransferFlags: %x\n", sp, purb->UrbControlVendorClassRequest.TransferFlags); 637 printf("%sUrbControlVendorClassRequest.TransferBufferLength: %x\n", sp, purb->UrbControlVendorClassRequest.TransferBufferLength); 638 printf("%sUrbControlVendorClassRequest.TransferBuffer: %x\n", sp, (int)purb->UrbControlVendorClassRequest.TransferBuffer); 639 printf("%sUrbControlVendorClassRequest.TransferBufferMDL: %x\n", sp, (int)purb->UrbControlVendorClassRequest.TransferBufferMDL); 640 printf("%sUrbControlVendorClassRequest.UrbLink: %x\n", sp, (int)purb->UrbControlVendorClassRequest.UrbLink); 641 printf("%sUrbControlVendorClassRequest.RequestTypeReservedBits: %x\n", sp, purb->UrbControlVendorClassRequest.RequestTypeReservedBits); 642 printf("%sUrbControlVendorClassRequest.Request: %x\n", sp, purb->UrbControlVendorClassRequest.Request); 643 printf("%sUrbControlVendorClassRequest.Value: %x\n", sp, purb->UrbControlVendorClassRequest.Value); 644 printf("%sUrbControlVendorClassRequest.Index: %x\n", sp, purb->UrbControlVendorClassRequest.Index); 645 printf("%sUrbControlVendorClassRequest.Reserved1: %x\n", sp, purb->UrbControlVendorClassRequest.Reserved1); 646 break; 647 648 default: 649 printf("%sUnknown URB(%x)\n", sp, purb->UrbHeader.Function); 650 break; 651 } // end of switch urb function 652} 653 654void inline print_irp(PIRP_SAVE pirp_save, int flag) 655{ 656 if(flag) 657 PDEBUG("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); 658 else 659 PDEBUG("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); 660 PDEBUG("usb_connection received IRP: irp number: %d\n", pirp_save->Irp); 661 PDEBUG("\tIRP_SAVE:\n"); 662 PDEBUG("\t Size: \t%d\n", pirp_save->Size); 663 PDEBUG("\t NeedSize: %d\n", pirp_save->NeedSize); 664 PDEBUG("\t Device: %lld\n", pirp_save->Device); 665 PDEBUG("\t res1: \t%d\n", pirp_save->Res1); 666 PDEBUG("\t irp number: %d\n", pirp_save->Irp); 667 PDEBUG("\t Status: %d\n", pirp_save->Status); 668 PDEBUG("\t Information:\t%lld\n", pirp_save->Information); 669 PDEBUG("\t BufferSize: %d\n", pirp_save->BufferSize); 670 PDEBUG("\t Reserv: %d\n", pirp_save->Reserv); 671 PDEBUG("\t empty: %lld\n", pirp_save->StackLocation.empty); 672 PDEBUG("\t major function: %x\n", pirp_save->StackLocation.MajorFunction); 673 PDEBUG("\t minor function: %x\n", pirp_save->StackLocation.MinorFunction); 674 PDEBUG("\t Argument1: %lld\n", pirp_save->StackLocation.Parameters.Others.Argument1); 675 PDEBUG("\t Argument2: %lld\n", pirp_save->StackLocation.Parameters.Others.Argument2); 676 PDEBUG("\t Argument3: %lld\n", pirp_save->StackLocation.Parameters.Others.Argument3); 677 PDEBUG("\t Argument4: %lld\n", pirp_save->StackLocation.Parameters.Others.Argument4); 678 PDEBUG("\n"); 679 680 if(pirp_save->BufferSize) { 681 PDEBUG("\tIRP_SAVE buffer:\n"); 682 if(pirp_save->StackLocation.MajorFunction==0x0f) { 683 PDEBUG("\n"); 684 PDEBUG("\tURB buffer:\n"); 685 if(pirp_save->Is64 == 0){ 686 PURB purb = (PURB)pirp_save->Buffer; 687 print_urb(purb); 688 if(pirp_save->BufferSize > purb->UrbHeader.Length) 689 ppktbuf((char*)pirp_save->Buffer + purb->UrbHeader.Length, 690 pirp_save->BufferSize - purb->UrbHeader.Length); 691 } else { 692 PURB_64 purb_64 = (PURB_64)pirp_save->Buffer; 693 print_urb_64(purb_64); 694 if(pirp_save->BufferSize > purb_64->UrbHeader.Length) 695 ppktbuf((char*)pirp_save->Buffer + purb_64->UrbHeader.Length, 696 pirp_save->BufferSize - purb_64->UrbHeader.Length); 697 } 698 } 699 else 700 ppktbuf((char*)pirp_save->Buffer, pirp_save->BufferSize); 701 } 702} 703 704void decodeIRP(char *sp) 705{ 706 PIRP_SAVE pirp; 707 PURB purb; 708 int i, j; 709 710 pirp = (PIRP_SAVE)&packets[U2EC_L4_IRP_SAVE]; 711 712 printf("%sSize :%x\n", sp, pirp->Size); 713 printf("%sNeedSize:%x\n", sp, pirp->NeedSize); 714 printf("%sDevice :%llx\n", sp, pirp->Device); 715 printf("%sIs64 :%x\n", sp, pirp->Is64); 716 printf("%sIsIsoch :%x\n", sp, pirp->IsIsoch); 717 printf("%sRes1 :%x\n", sp, pirp->Res1); 718 printf("%sIrp :%x\n", sp, pirp->Irp); 719 printf("%sStatus :%x\n", sp, pirp->Status); 720 printf("%sInfo :%llx\n", sp, pirp->Information); 721 printf("%sCancel :%x\n\n", sp, pirp->Cancel); 722 723 printf("%sIO empty:%llx\n", sp, pirp->StackLocation.empty); 724 printf("%sIO Major:%s(%x)\n", sp, MajorFunctionString(pirp), pirp->StackLocation.MajorFunction); 725 printf("%sIO Minor:%s(%x)\n", sp, MinorFunctionString(pirp), pirp->StackLocation.MinorFunction); 726 printf("%sIO Argu1:%llx\n", sp, pirp->StackLocation.Parameters.Others.Argument1); 727 printf("%sIO Argu2:%llx\n", sp, pirp->StackLocation.Parameters.Others.Argument2); 728 printf("%sIO Argu3:%llx\n", sp, pirp->StackLocation.Parameters.Others.Argument3); 729 printf("%sIO Argu4:%llx\n", sp, pirp->StackLocation.Parameters.Others.Argument4); 730 731 printf("\n%sBuffSize:%x\n", sp, pirp->BufferSize); 732 printf("%sReserv :%x\n", sp, pirp->Reserv); 733 734 if(pirp->BufferSize) 735 { 736 if(pirp->StackLocation.MajorFunction==0x0f) 737 { 738 purb = (PURB)pirp->Buffer; 739 decodeURB(purb, sp); 740 if(pirp->BufferSize>purb->UrbHeader.Length) 741 decodeBuf(sp, (char*)&pirp->Buffer[purb->UrbHeader.Length], pirp->BufferSize-purb->UrbHeader.Length); 742 } 743 else 744 { 745 j=0; 746 for(i=0;i<pirp->BufferSize&&i<512;i++) 747 { 748 if(i%8==0) 749 { 750 if(i==0) 751 printf("\n%sIRP:%02x", sp, (unsigned char)pirp->Buffer[i]); 752 else printf("\n%s %02x", sp, (unsigned char)pirp->Buffer[i]); 753 } 754 else printf("%02x", (unsigned char)pirp->Buffer[i]); 755 756 if(i%2==0) 757 pstr_ascii[j++]=pirp->Buffer[i]; 758 } 759 printf("\n%s %s\n", sp, pstr_ascii); 760 } 761 } 762} 763 764 765void decodeU2EC() 766{ 767 if(IS_IP&&IS_TCP&&IS_U2EC_IRP&&IS_U2EC_IRP_CONTENT) 768 { 769 if(IS_U2EC_IRP_CLIENT) 770 { 771 printf("\n\n--------------->\n"); 772 printf("\t%s\n", pktname); 773 decodeIRP(""); 774 } 775 else if(IS_U2EC_IRP_SERVER) 776 { 777 printf("\n\n\t\t<---------------\n"); 778 printf("\t\t%s\n", pktname); 779 decodeIRP("\t\t\t"); 780 } 781 } 782} 783 784int getpacket(FILE *fp, unsigned char *packets, int *size) 785{ 786 char buffer[MAX_BUFFER_SIZE]; 787 char hex[10]; 788 int j; 789 790 while(fgets(buffer, MAX_BUFFER_SIZE, fp)) 791 { 792 if (strcmp(buffer, "\n")==0) 793 { 794 } 795 else if(strstr(buffer, "pkt")) // start to capture 796 { 797 strcpy(pktname, buffer); 798 *size = 0; 799 } 800 else 801 { 802 for(j=0;j<8;j++) 803 { 804 strncpy(hex, buffer+j*6, 4); 805 hex[5] = 0; 806 packets[(*size)++] = strtol(hex, NULL, 16); 807 if(*(buffer+j*6+5)=='}') 808 { 809 return 1; 810 } 811 } 812 } 813 } 814 return 0; 815} 816 817void decode(char *file) 818{ 819 FILE *fp; 820 821 printf("decode %s\n", file); 822 823 fp = fopen(file, "r+"); 824 while(getpacket(fp, packets, &plen)) 825 { 826 decodeU2EC(); 827 } 828 fclose(fp); 829} 830