大家好!我刚开始学习USB,看了一些贴子,结果好象越看越迷糊,特向各位高手请教,希望大家能帮帮我!
1.看了一些贴子,在侦测USB时要用到SetupDiGetClassDevs((LPGUID)&guidHID_1,//GUID_CLASS_USB_DEVICE,     // class GUID 
        NULL,                    //  
        NULL,                    //
        DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); 
其中的guidHID_1是怎样定义的,是根据注册表中的数据定义,还是直接定义为GUID guidHID_1;
而且我在一些例子中并没看见使用GUID,
      wsprintf(HCName, "\\\\.\\HCD%d", HCNum);
        hHCDev = CreateFile(HCName,
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL);同样可以找到USB
2.如果我要对U盘进行读、写,如果有多个U盘,怎样才能确定是我想读、写的U盘呢?应该怎样去读、写
3.如果我要对U盘的存储芯片进行擦出,如果知道指令,应该怎样从USB上送到U盘上去呢?

解决方案 »

  1.   

    1.GUID定义:
    DEFINE_GUID(DiskClassGuid,               0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(CdRomClassGuid,              0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(PartitionClassGuid,          0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(TapeClassGuid,               0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);2.如果有多个U盘,用盘符来确定,
    // 打开设备
    hDevice= ::CreateFile(pszDevicePath, // 设备路径
    GENERIC_READ | GENERIC_WRITE, // 读写方式
    FILE_SHARE_READ | FILE_SHARE_WRITE, // 共享方式
    NULL, // 默认的安全描述符
    OPEN_EXISTING, // 创建方式
    0, // 不需设置文件属性
    NULL); // 不需参照模板文件
    // 用IOCTL_STORAGE_QUERY_PROPERTY取设备属性信息
    bResult = ::DeviceIoControl(hDevice, // 设备句柄
    IOCTL_STORAGE_QUERY_PROPERTY, // 取设备属性信息
    &Query, sizeof(STORAGE_PROPERTY_QUERY), // 输入数据缓冲区
    pDevDesc, pDevDesc->Size, // 输出数据缓冲区
    &dwOutBytes, // 输出数据长度
    (LPOVERLAPPED)NULL); // 用同步I/O
    3.不会
      

  2.   

    对FLASH的擦写是通过USB驱动进行的,你只需要调用驱动里的接口函数就可以了。
      

  3.   

    大家新年好!
    我在程序中并没有定义GUID,但同样能检测到USB,是不是在DDK中已经有GUID的定义?
    SetupDiGetClassDevs((LPGUID)&guidHID_1,//GUID_CLASS_USB_DEVICE,     // class GUID 
            NULL,                    //  
            NULL,                    //
            DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); 
    这里的guidHID_1是不是只需要定义我GUID就行呢?
    alec626(月吻长河),可以给我介绍一下这些接口函数吗?