private bool ParseDescriptor(int length, UsbDescriptorStructure des) { byte[] temp = new byte[length]; if (length != ms.Read(temp, 0, length)) { return(false); } return(PduMarshaler.Unmarshal(temp, des)); }
private UsbDescriptorStructure GetNextDescriptor(UsbDescriptorTypes descriptorType) { byte[] temp = new byte[2]; UsbDescriptorStructure result = null; while (ms.Position < ms.Length - 2) { if (2 != ms.Read(temp, 0, 2)) { return(null); } UsbDescriptorStructure des = new UsbDescriptorStructure(); PduMarshaler.Unmarshal(temp, des); if (des.bDescriptorType == descriptorType) { ms.Seek(-2, SeekOrigin.Current); switch (des.bDescriptorType) { case UsbDescriptorTypes.USB_INTERFACE_DESCRIPTOR_TYPE: result = new USB_INTERFACE_DESCRIPTOR(); if (ParseDescriptor(USB_INTERFACE_DESCRIPTOR.DefaultSize, result)) { return(result); } break; default: throw new NotImplementedException(); //break; } } else { ms.Seek(des.bLength - 1, SeekOrigin.Current); } } return(result); }