且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Qt 获取usb设备信息 hacking

更新时间:2022-08-12 21:03:49

/**************************************************************************
 *                       Qt 获取usb设备信息 hacking
 * 声明:
 *     本文主要是为了查看之前朋友留下的Qt获取usb设备信息软件运作机制。
 *
 *                                       2015-12-31 深圳 南山平山村 曾剑锋
 *************************************************************************/

一、usbfs 文件系统
    需要在Linux内核中打开usbfs选项:
    ───────────────────────────────────────────────────────────────────────────
    ┌────────────────────────────── USB support ──────────────────────────────┐
    │  Arrow keys navigate the menu.  <Enter> selects submenus --->.          │  
    │  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, │  
    │  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> │  
    │  for Search.  Legend: [*] built-in  [ ] excluded  <M> module  < >       │  
    │ ┌─────────────────────────────────────────────────────────────────────┐ │  
    │ │    --- USB support                                                  │ │  
    │ │    <*>   Support for Host-side USB                                  │ │  
    │ │    [*]     USB verbose debug messages                               │ │  
    │ │    [*]     USB announce new devices                                 │ │  
    │ │            *** Miscellaneous USB options ***                        │ │  
    │ │    [*]     USB device filesystem (DEPRECATED)    <----------- these │ │  
    │ │    [*]     USB device class-devices (DEPRECATED)                    │ │  
    │ │    [ ]     Dynamic USB minor allocation                             │ │  
    │ │    [*]     USB runtime power management (autosuspend) and wakeup    │ │  
    │ │    [*]       OTG support                                            │ │  
    │ └────v(+)─────────────────────────────────────────────────────────────┘ │  
    ├─────────────────────────────────────────────────────────────────────────┤  
    │                    <Select>    < Exit >    < Help >                     │  
    └─────────────────────────────────────────────────────────────────────────┘

二、cat mainwindow.cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_pushButton_clicked()
    {
        if(myprocess)
            delete myprocess;
    
        myprocess = new QProcess(this);
        connect(myprocess, SIGNAL(readyReadStandardOutput()),this, SLOT(result()));
        connect(myprocess, SIGNAL(readyReadStandardError()),this, SLOT(result()));

        /**
         * If you say Y here (and to "/proc file system support" in the "File     
         * systems" section, above), you will get a file /proc/bus/usb/devices    
         * which lists the devices currently connected to your USB bus or         
         * busses, and for every connected device a file named                    
         * "/proc/bus/usb/xxx/yyy", where xxx is the bus number and yyy the       
         * device number; the latter files can be used by user space programs     
         * to talk directly to the device. These files are "virtual", meaning     
         * they are generated on the fly and not stored on the hard drive.        
         *                                                                        
         * You may need to mount the usbfs file system to see the files, use      
         * mount -t usbfs none /proc/bus/usb                                      
         *                                                                        
         * For the format of the various /proc/bus/usb/ files, please read        
         * <file:Documentation/usb/proc_usb_info.txt>. 
         */
        myprocess->start("cat /proc/bus/usb/devices");
        ui->result->clear();
    }
    void MainWindow::result()
    {
        QString abc = myprocess->readAllStandardOutput();
        ui->result->append(abc.trimmed());
        QString efg = myprocess->readAllStandardError();
        if(efg.length()>1)ui->result->append(efg.trimmed());
    }