// USBDOSAP.cpp : A simple USB DOS application. // Author: Doug Lovett // Birth: 04/17/20011 // History #define VERSION "0.5" #include #include #include #include // you may have to manually include this library. #include #include DEFINE_GUID(USBIO_GUID, 0xb5157d69, 0x75f8, 0x11d3, 0x8c, 0xe0, 0x0, 0x20, 0x78, 0x15, 0xe6, 0x11); #define CTL_CODE( DeviceType, Function, Method, Access ) ( \ ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) #define METHOD_BUFFERED 0 #define FILE_ANY_ACCESS 0 #define FILE_DEVICE_UNKNOWN 0x00000022 #define USBIO_IOCTL_VENDOR_INDEX 0x0800 #define IOCTL_USBIO_SEND_PACKET CTL_CODE(FILE_DEVICE_UNKNOWN, \ USBIO_IOCTL_VENDOR_INDEX+10,\ METHOD_BUFFERED, \ FILE_ANY_ACCESS) typedef unsigned char uchar; typedef struct { uchar Recipient; uchar DeviceModel; uchar MajorCmd; uchar MinorCmd; uchar DataLSB; uchar DataMSB; SHORT Length; } PacketStruct,*pPacketStruct; // Function prototypes int UsbScan(char* ); // Global Variables HANDLE hUsb; // Handle to the USB pipe void main(int argc, char* argv[]) { BOOLEAN Verbose = 1; char DeviceName[MAX_PATH]; ULONG nBytes; BOOLEAN Success; PacketStruct Packet; char *stopstring; uchar Major; if( argc < 5 ) { printf("USBDOSAP - USB I/O Dos Application - Delcom Engineering\n"); printf("Syntax: USBDOSAP MajorCmd MinorCmd DataLSB DataMSB [V/v]\nV=Verbose On, v=Verbose Off.\n"); exit(0); } Packet.Recipient = 8; Packet.DeviceModel = 18; Packet.MajorCmd = Major = (uchar)strtol(argv[1],&stopstring,10); Packet.MinorCmd = (uchar)strtol(argv[2],&stopstring,10); Packet.DataLSB = (uchar)strtol(argv[3],&stopstring,10); Packet.DataMSB = (uchar)strtol(argv[4],&stopstring,10); Packet.Length = 0; if( (argc > 5) && !strcmp("v",argv[5])) Verbose = 0; else Verbose = 1; if(Verbose) printf("USBDOSAP - Version %s %s %s\n",VERSION,__DATE__, __TIME__); // Scan for the Usb Device if( !UsbScan(DeviceName) ) { if(Verbose) printf("No devices found!\n"); if(Verbose) printf("Press any key to exit.\n"); if(Verbose) while(!kbhit()); return; } if(Verbose) printf("Device Found: %s\n",DeviceName); hUsb = CreateFile(DeviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if( hUsb == INVALID_HANDLE_VALUE ) { if(Verbose) printf("Error %d: Failed to open USB file handle.\n", GetLastError()); return; } Success = DeviceIoControl(hUsb, IOCTL_USBIO_SEND_PACKET, &Packet, sizeof(Packet), &Packet, sizeof(Packet), &nBytes, NULL) ; if(!Success ) { if (Verbose) printf("ERROR: Returned from DeviceIoControl.\n"); CloseHandle(hUsb); exit(0); } CloseHandle(hUsb); // if a read command display the results if( Major == 11) { for(nBytes=0; nBytescbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); if (!SetupDiGetInterfaceDeviceDetail(hInfo, &Interface_Info, detail, needed,NULL, NULL)) { free((PVOID) detail); SetupDiDestroyDeviceInfoList(hInfo); return(0); } strncpy(DeviceName, detail->DevicePath, MAX_PATH ); free((PVOID) detail); SetupDiDestroyDeviceInfoList(hInfo); return(1); // return true, USB device found } // ---------------- e - o - f -------------------