Windows系統U盤的檢測

2021-10-04 15:04:39 字數 2395 閱讀 3955

一、登錄檔中與u盤相關的鍵

1. \\hkey_local_machinesystem\\currentcontrolset\\services\\usbstor\\enum ,該鍵中有本機連線的所有u盤的裝置路徑,count為u盤的數量,數字鍵對應的值為u盤的裝置路徑,形如:usb\vid_1e3d&pid_2096\ccbb123456ee012b;

2. \\hkey_local_machinesystem\\currentcontrolset\\services\\disk\\enum,該鍵中儲存有物理磁碟裝置的路徑;count為磁碟數量,數字鍵對應的值為裝置路徑,形如:usbstor\disk&ven_2.0&prod_flash_disk&rev_2.61\ccbb123456ee012b&1;

3. \\hkey_local_machinesystem\\currentcontrolset\\services\\cdrom\\enum,該鍵中儲存有光碟機的裝置路徑,count為數量,數字鍵名對應的鍵值為裝置路徑,形如:usbstor\cdrom&ven_2.0&prod_flash_disk&rev_2.60\ccbb123456ee012b&0;

4. \\hkey_local_machinesystem\\mounteddevices,該鍵中有\dosdevices\x:的鍵名,x為碟符,其值為對應裝置的路徑,如:「\dosdevices\e:」的鍵值為:\??\usbstor#cdrom&ven_2.0&prod_flash_disk&rev_2.60#ccbb123456ee012b&0#,「\dosdevices\f:」的鍵值為:_??_usbstor#disk&ven_2.0&prod_flash_disk&rev_2.61#ccbb123456ee012b&1#;

二、檢測u盤的流程

1. 查詢上述1-3所有的鍵值,儲存在三個vector中,然後逐個遍歷通過關鍵字找出各自的對應關係,把對應的值存入usbnod中,usbnode定義如下:

struct usbnod               //檢索本機u盤節點,通過檢索登錄檔獲取

;

遍歷對應關係的**如下:

//構造系統usb裝置的節點陣列

char* usbstor_key = "system\\currentcontrolset\\services\\usbstor\\enum";

vectorusbstor_vals;

getregenumvalues(usbstor_key , usbstor_vals);

char* usbdisk_key = "system\\currentcontrolset\\services\\disk\\enum";

vectorusbdisk_vals;

getregenumvalues(usbdisk_key , usbdisk_vals);

char* usbcdrom_key = "system\\currentcontrolset\\services\\cdrom\\enum";

vectorusbcdrom_vals;

getregenumvalues(usbcdrom_key , usbcdrom_vals);

usbnod usbdisknod[26];

int count = 0;

for (unsigned int i = 0; i < usbcdrom_vals.size(); i++)

}}

讀取登錄檔鍵值構造vector的函式

//檢索emnu型別的usb裝置相關的登錄檔鍵值,返回獲取到的數量,迴圈讀取內容內容儲存在 vector&values

int getregenumvalues(lpctstr key, vector&values)

", pdpath.data());

devicenum = getphysicaldrivefromdevicepath(ph_path);

//獲取磁碟裝置位址對應的物理磁碟號

}string vol; //得到u盤碟符;

lptstr lpdrives = new tchar[max_path];

dword dwlen = ::getlogicaldrivestrings(max_path, lpdrives);

char* sdrives[26] = ;

for (dword nindex = 0; nindex < dwlen / 4; nindex++)}}

}delete lpdrives;

return vol;

}

以上登錄檔鍵值由windows系統服務維持,經使用還是比較可靠的,未盡問題是對於u盤僅檢測有乙個u盤碟符的情況,多個u盤碟符未做處理,不過根據原始碼應該很容易寫出。

通過csdn學習了很多,今天終於自己寫了一點東西,不對之處歡迎拍磚。

Windows 檢測碟符是否為U盤

storage property query結構體 typedef struct storage property query storage property query,pstorage property query 用於儲存將要查詢的碟符裝置的屬性 storage device descrip...

使用U盤安裝windows系統大全

u盤一枚 8g以上 u盤一枚 8g以上 如何製作pe系統 為什麼要製作pe系統 在安裝系統的時候,往往會出現 windows系統無法安裝到gpt分割槽格式的磁碟 這時候需要對計算機的磁碟重新分割槽成mrb格式等,這些需要用到磁碟分割槽工具。pe系統,就是可以從u盤進入系統,將計算機磁碟分割槽,十分方...

將windows10系統裝入u盤

背景 自win8.1的企業版開始才可以通過window to go 工具將win系統裝入u盤,但是有很多侷限,對u盤要求也很高,解決不了大部分實際問題。用途 將win系統裝入u盤,就可以隨時隨地的攜帶自己的系統。對於需要一些開發環境,或對軟體有要求的工作非常方便,只用插入u盤就可以再其它電腦上打自己...