如何获得U盘的详细信息

 
一、目的:
    当計算機有一個或者多個 U 盤插入時,系統識別后,該應用可以自動獲取 U 盤的相關信息,如生産廠商信息,產品名,版本號, VID&PID ,產品序列號等等一些 U 盤的相關信息。
二、實現思路:
    1 、通過獲得 U 盤盤符獲得設備句柄
    首先必須檢測當前系統連接的 U 盤設備,在這一方面最便捷的方法是掃描當前系統的各個驅動器,判斷當前系統所連設備屬性是否為 DRIVE_REMOVABLE ,如果是,表明設備是可移動設備,儅我們排除軟盤后,剩下的就是 U 盤設備了。
// 得到 U 盘盘 符;
LPTSTR lpDrives = new TCHAR[MAX_PATH];
DWORD dwLen = ::GetLogicalDriveStrings(MAX_PATH, lpDrives);
CString sDrives[26] = {""};
for(DWORD nIndex = 0; nIndex < dwLen / 4; nIndex++)
{
    if(::GetDriveType(lpDrives + nIndex * 4) == DRIVE_REMOVABLE)
               sDrives[nIndex] += (CString)(lpDrives + nIndex * 4);
               if(sDrives[nIndex]!= A:// && sDrives[nIndex]!= B:// )
{
   // …具體操作 代碼
}
}
delete lpDrives;
   
    獲得上面這段代碼,獲得了具體的形如“ H:/ ”的設備盤符,並且將這一組盤符存儲在 sDevice[26] 這樣一個字符串數組中。然後通過具體操作獲得的盤符經過一定的處理將其轉化為形如 ”?//H:” 的設備路徑,然後再通過 CreateFile 獲得這個設備的句柄:
    HANDLE hDeviceHandle = CreateFile(PATH,
               GENERIC_READ | GENERIC_WRITE,
               FILE_SHARE_READ | FILE_SHARE_WRITE,
               NULL,
               OPEN_EXISTING,
               0,
               NULL);
    注意,這裡的第三項參數必須是 FILE_SHARE_READ | FILE_SHARE_WRITE, 因爲 U 盤設備是共享設備,第五個參數必須是 OPEN_EXISTING ,打開現有設備。 hDeviceHandle 就是我們所需要的 U 盤句柄了。
     獲得這個句柄之後我們將用到一個比較關鍵的函數 DeviceIoControl ,儅我們對系統的各種設備進行操作時,這個函數是經常要用到的。這個函數中控制碼的種類很多,這裡我們主要討論利用 IOCTL_STORAGE_QUERY_PROPERTY 這個控制碼,获取设备属性信息,得到系统中所安装的各种固定的和可移动的硬盘、优盘和 CD/DVD-ROM/R/W 的接口类型、序列号、产品 ID 等信息。
    這裡給出這樣一個函數:
// 设备 属性信息
// in hDevice -- 设备 句柄
// out pDevDesc -- 出的 设备 描述和属性信息 冲区指 ( 包含 接在一起的两部分 )
BOOL GetDriveProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc)
{
    STORAGE_PROPERTY_QUERY Query;    // 查询输 入参数
    DWORD dwOutBytes;                // IOCTL 出数据
    BOOL bResult;                    // IOCTL 返回
 
    // 指定 查询 方式
    Query.PropertyId = StorageDeviceProperty;
    Query.QueryType = PropertyStandardQuery;
 
    // IOCTL_STORAGE_QUERY_PROPERTY 设备 属性信息
  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值