如题,有代码最好。

解决方案 »

  1.   

    没有发现C#版本的,下面是我搜索来的,希望对你有帮助。void CGetUDiskDriverDlg::SearchUDISK() 

    int nCount, len;//标记同一设备个数 
    HDEVINFO hDevInfoSet; 
    BOOL bResult; 
    char * devicename; 
    char volume[MAX_PATH]; 
    char ch[100]; memset(volume, 0, MAX_PATH); PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail =NULL; // 取得一个该GUID相关的设备信息集句柄 
    hDevInfoSet = ::SetupDiGetClassDevs((LPGUID)&HARDDISK_GUID,//GUID_CLASS_USB_DEVICE, // class GUID 
    NULL, // 无关键字 
    NULL, // 不指定父窗口句柄 
    DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // 目前存在的设备 // 失败... 
    if (hDevInfoSet == INVALID_HANDLE_VALUE) 

    return; 
    } // 申请设备接口数据空间 nCount = 0; 
    bResult = TRUE; SP_DEVICE_INTERFACE_DATA ifdata; 
    // 设备序号=0,1,2... 逐一测试设备接口,到失败为止 
    while (bResult) 
    { ifdata.cbSize = sizeof(ifdata); 
    // 枚举符合该GUID的设备接口 
    bResult = ::SetupDiEnumDeviceInterfaces( 
    hDevInfoSet, // 设备信息集句柄 
    NULL, // 不需额外的设备描述 
    (LPGUID)&HARDDISK_GUID,//GUID_CLASS_USB_DEVICE, // GUID 
    (ULONG)nCount, // 设备信息集里的设备序号 
    &ifdata); // 设备接口信息 if (bResult) 

    ULONG predictedLength = 0; 
    ULONG requiredLength = 0; 
    // 取得该设备接口的细节(设备路径) 
    bResult = SetupDiGetInterfaceDeviceDetail( 
    hDevInfoSet, // 设备信息集句柄 
    &ifdata, // 设备接口信息 
    NULL, // 设备接口细节(设备路径) 
    0, // 输出缓冲区大小 
    &requiredLength, // 不需计算输出缓冲区大小(直接用设定值) 
    NULL); // 不需额外的设备描述 
    // 取得该设备接口的细节(设备路径) 
    predictedLength=requiredLength; // if(pDetail) 
    // { 
    // pDetail =NULL; 
    // } 
    pDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, predictedLength); 
    pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); 
    bResult = SetupDiGetInterfaceDeviceDetail( 
    hDevInfoSet, // 设备信息集句柄 
    &ifdata, // 设备接口信息 
    pDetail, // 设备接口细节(设备路径) 
    predictedLength, // 输出缓冲区大小 
    &requiredLength, // 不需计算输出缓冲区大小(直接用设定值) 
    NULL); // 不需额外的设备描述 if (bResult) 

    // 复制设备路径到输出缓冲区 
    for(int i=0;i<17;i++){ 
    ch[i]=*(pDetail->DevicePath+8+i); 

    ch[17]='\0'; 
    if (strcmp(ch,"vid_11dd&pid_0101")==0 || 
    strcmp(ch,"vid_11dd&pid_11dd")==0 || 
    strcmp(ch,"vid_0101&pid_0101")==0 || 
    strcmp(ch,"vid_0101&pid_11dd")==0) //比较版本号,防止意外出错 

    len = strlen(pDetail->DevicePath); 
    devicename = new char[len]; 
    memset(devicename, 0, len); 
    for(int i=0;i<(len-38);i++) 

    ch[i]=*(pDetail->DevicePath+i); 

    ch[len-38]='\0'; 
    memset(volume, 0, MAX_PATH); 



    nCount++; 

    // 释放设备接口数据空间 
    ::GlobalFree(pDetail); // 关闭设备信息集句柄 
    ::SetupDiDestroyDeviceInfoList(hDevInfoSet); 
    }
    参考答案来源于:bbs.driverdevelop.com我正在使用《Csdn收音机》第一时间获取最新动态!
      

  2.   

    http://topic.csdn.net/u/20090907/11/09a7df49-8ed3-43e6-b239-732f4117b511.html
      

  3.   


    是吗贴图片很累吧,用《Csdn收音机》截图功能轻松解决!