设为首页收藏本站

鑫郁飞网络技术-郁金香灬外挂技术

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

郁金香 外挂开发(实战)郁金香 终身VIP 尊贵特权郁金香 VIP学员办理任鸟飞2015外挂教程
◆招传奇霸业辅助作者◆论坛VIP会员账号郁金香游戏外挂制作 终极教程   ◆招传奇霸业辅助作者◆
查看: 458|回复: 0

原创 USB 端口遍历 及通信

[复制链接]
发表于 2017-8-31 00:54:03 | 显示全部楼层 |阅读模式
// EnumUSb.cpp : 定义控制台应用程序的入口点。
// QQ 150330575

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <windows.h>
#include <dbt.h>
#include <initguid.h>
#include <winioctl.h>
#include <setupapi.h>
extern "C" {
#include "cfgmgr32.h"

#include "setupapi.h"  // Must link in setupapi.lib
#include "hidsdi.h"   // Must link in hid.lib
}
#pragma   comment(lib,"hid.lib")     
#pragma   comment(lib,"cfgmgr32.lib")
#pragma   comment(lib,"setupapi.lib")
#define USB_DEVICE_DESCRIPTOR_TYPE                0x01
#define USB_CONFIGURATION_DESCRIPTOR_TYPE         0x02
#define USB_STRING_DESCRIPTOR_TYPE                0x03
#define USB_INTERFACE_DESCRIPTOR_TYPE             0x04
#define USB_ENDPOINT_DESCRIPTOR_TYPE              0x05
#define USB_GET_HUB_NAME            8
#define USB_GET_NODE_INFORMATION                    258
#define FILE_DEVICE_USB         FILE_DEVICE_UNKNOWN
#define FILE_DEVICE_USB_SCAN    0x8000
#define IOCTL_INDEX             0x0800
#define IOCTL_GET_USB_DESCRIPTOR        0xB01A8  //CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+8, METHOD_BUFFERED,FILE_ANY_ACCESS)
DEFINE_GUID(GUID_DEVINTERFACE_USB_HUB,    0x4d1e55b2, 0xf16f, 0x11cf, 0xcb,0x88,0x30,0x00,0x00,0x11,0x11,0x00); //4d1e55b2-f16f-11cf-88cb-001111000030
#define IOCTL_INTERNAL_USB_GET_HUB_NAME  0xB01A8 //CTL_CODE(FILE_DEVICE_USB,USB_GET_HUB_NAME,METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_GET_NODE_INFORMATION   0xB01A8 //CTL_CODE(FILE_DEVICE_USB,USB_GET_NODE_INFORMATION,METHOD_BUFFERED,FILE_ANY_ACCESS)
typedef struct _USBSCAN_GET_DESCRIPTOR {
  IN UCHAR  DescriptorType;
  IN UCHAR  Index;
  IN USHORT  LanguageId;
} USBSCAN_GET_DESCRIPTOR, *PUSBSCAN_GET_DESCRIPTOR;
typedef struct _USB_DEVICE_DESCRIPTOR {
  UCHAR  bLength ;
  UCHAR  bDescriptorType ;
  USHORT  bcdUSB ;
  UCHAR  bDeviceClass ;
  UCHAR  bDeviceSubClass ;
  UCHAR  bDeviceProtocol ;
  UCHAR  bMaxPacketSize0 ;
  USHORT  idVendor ;
  USHORT  idProduct ;
  USHORT  bcdDevice ;
  UCHAR  iManufacturer ;
  UCHAR  iProduct ;
  UCHAR  iSerialNumber ;
  UCHAR  bNumConfigurations ;
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR ;
typedef enum _USB_HUB_NODE {
    UsbHub,
    UsbMIParent
} USB_HUB_NODE;
typedef struct _USB_HUB_DESCRIPTOR {  UCHAR  bDescriptorLength;  UCHAR  bDescriptorType;  UCHAR  bNumberOfPorts;  USHORT  wHubCharacteristics;  UCHAR  bPowerOnToPowerGood;  UCHAR  bHubControlCurrent;  UCHAR  bRemoveAndPowerMask[64];       } USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;
typedef struct _USB_HUB_INFORMATION {
    /*
       copy of data from hub descriptor
    */
    USB_HUB_DESCRIPTOR HubDescriptor;
    BOOLEAN HubIsBusPowered;
} USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;
typedef struct _USB_MI_PARENT_INFORMATION {
    ULONG NumberOfInterfaces;
} USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;
typedef struct _USB_NODE_INFORMATION {
    USB_HUB_NODE NodeType;        /* hub, mi parent */
    union {
        USB_HUB_INFORMATION HubInformation;
        USB_MI_PARENT_INFORMATION MiParentInformation;
    } u;
} USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;


int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE                              hHub;
    HDEVINFO                            hDeviceInfo;
    SP_DEVICE_INTERFACE_DATA            _sdid;
    PSP_DEVICE_INTERFACE_DETAIL_DATA    _psdidd;
    DWORD dwLength;
    DWORD dwBytesX;
        GUID myguid={0};//0x3E8,0x40FD58,0x0,0x2b08F4
        HidD_GetHidGuid(&myguid);
        printf("myguid=%08X-%08X-%08x-%08X \n ",myguid.Data1,myguid.Data2,myguid.Data3,myguid.Data4);
        printf("entern tmain.....\n");
    __try{
                //PVOID hDeviceInfo
        hDeviceInfo = SetupDiGetClassDevsA(
            &myguid,
            NULL,
            NULL,
           0x12 // DIGCF_PRESENT | DIGCF_DEVICEINTERFACE|DIGCF_ALLCLASSES   //返回所有已安装的设备。如果这个标志设置了,ClassGuid参数将被忽略。
        );

                printf("hDeviceInfo=%08X \n",hDeviceInfo);
        if( hDeviceInfo == INVALID_HANDLE_VALUE ){
            printf("error:hDevInfo == INVALID_HANDLE_VALUE \n");
            return -1;
        }
        _sdid.cbSize    = sizeof(SP_DEVICE_INTERFACE_DATA);

                printf("_sdid.cbSize =%08X \n");
                //遍历
        for( int i = 0; SetupDiEnumDeviceInterfaces( hDeviceInfo, NULL, &myguid, i, &_sdid ); i++ )
               
                {
                        printf("Enter For .....i=%0d \n",i);
            SetupDiGetDeviceInterfaceDetail
                                (
                hDeviceInfo,
                &_sdid,
                NULL,
                0,
                &dwBytesX,
                NULL );

                        //printf("for i=%d \n",i);
            dwLength        = dwBytesX;
            _psdidd         = (PSP_DEVICE_INTERFACE_DETAIL_DATA)GlobalAlloc( GPTR, dwLength ); //注意
            if( _psdidd == NULL ){
                                printf("error  _psdidd==NULL \n");
                continue;
            }

            _psdidd->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
            if( !SetupDiGetDeviceInterfaceDetail(
                hDeviceInfo,
                &_sdid,
                _psdidd,
                dwLength,
                &dwBytesX,
                NULL ) )
            {
                GlobalFree( _psdidd );
                                printf("i=%d \n",i);
                continue;
            }

                //        printf("------------i=%d,,,_sdid.InterfaceClassGuid=%08X DevicePath=%s  \n",i,_sdid.InterfaceClassGuid,_psdidd->DevicePath);
                        if (_psdidd->DevicePath)
                        {
                                //printf("_psdidd->DevicePath=%s \n",(char*)&_psdidd->DevicePath);  //关键
                                printf(" DevicePath=%s  \n", _psdidd->DevicePath);
                        }
                       
            hHub    = CreateFile(
                _psdidd->DevicePath,
                0,//GENERIC_READ,
                FILE_SHARE_READ | FILE_SHARE_WRITE,
                NULL,
                OPEN_EXISTING,
                                FILE_ATTRIBUTE_NORMAL, //正常访问 011F4D53  |.  68 80000000   |PUSH 80                                                                    ; |Attributes = NORMAL


                NULL
            );

            if( hDeviceInfo == INVALID_HANDLE_VALUE ){
                continue;
            }
            USBSCAN_GET_DESCRIPTOR  _usb_nif;
            memset( &_usb_nif, 0, sizeof(USBSCAN_GET_DESCRIPTOR) );
            _usb_nif.DescriptorType = USB_DEVICE_DESCRIPTOR_TYPE;
            _usb_nif.Index          = 1;
            _usb_nif.LanguageId     = 0;
            USB_DEVICE_DESCRIPTOR   _usbdd;
            memset( &_usbdd, 0, sizeof(USB_DEVICE_DESCRIPTOR) );
            dwLength    = sizeof(USB_DEVICE_DESCRIPTOR);
            if( !DeviceIoControl(
                hHub,
                IOCTL_GET_USB_DESCRIPTOR,
                &_usb_nif,
                sizeof(USBSCAN_GET_DESCRIPTOR),
                &_usbdd,
                dwLength,
                &dwBytesX,
                NULL ) )
            {   
                CloseHandle( hHub );
                printf( "GetLastError()=%d ------\n", GetLastError() );  //6 句柄无效
                continue;
            }
                        _HIDD_ATTRIBUTES  hidAttributes;
            HidD_GetAttributes(hHub,&hidAttributes);
                        //关键
                        printf("%08X-%08X-%08X-%08X \n",hidAttributes.Size,hidAttributes.VendorID,hidAttributes.ProductID,hidAttributes.VersionNumber);
//
//01423194  02 1E 01 00 00 00 00 00 00 00 00 00 00  //点亮
//
//01423194  02 1E 00 00 00 00 00 00 00 00 00 00 00  //关闭
                        unsigned char szTurnOff[9]={0x02,0x1A ,0x00 };
                        unsigned char  szTurnOn[9]={0x02,0x1A ,0x01};
                        _OVERLAPPED parg4={0,9,0,0,(HANDLE)0};
           if (hidAttributes.VendorID==0x8888)
           {
                           if (hidAttributes.ProductID==0x0006)
                           {
                                   //002AF15C   40000080  
郁金香外挂教程,学习中...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|鑫郁飞网络技术-郁金香灬老师 ( 苏ICP备10059359号   

GMT+8, 2017-11-20 23:19 , Processed in 0.353061 second(s), 22 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表