石喜富,楊俊生,石增天
(1,2.中國傳媒大學(xué)計(jì)算機(jī)與網(wǎng)絡(luò)中心,北京 100024;3.北京郵電大學(xué)國際學(xué)院,北京 102209)
Windows環(huán)境下禁用USB存儲(chǔ)設(shè)備程序設(shè)計(jì)與實(shí)現(xiàn)
石喜富1,楊俊生2,石增天3
(1,2.中國傳媒大學(xué)計(jì)算機(jī)與網(wǎng)絡(luò)中心,北京 100024;3.北京郵電大學(xué)國際學(xué)院,北京 102209)
提供了USB存儲(chǔ)設(shè)備驅(qū)動(dòng)的工作原理,并用C語言在Windows XP操作系統(tǒng)中實(shí)現(xiàn)了禁用和啟用USB存儲(chǔ)設(shè)備的同時(shí)并不影響其他USB設(shè)備的使用。
Windows XP操作系統(tǒng);禁用USB存儲(chǔ)設(shè)備;軟件實(shí)現(xiàn);計(jì)算機(jī)房;管理
Microsoft win2k,winxp,win7 等操作系統(tǒng)由于其運(yùn)行穩(wěn)定、可靠、速度快并且具有良好的用戶體驗(yàn),因此應(yīng)用比較廣泛。在Windows XP運(yùn)行平臺(tái)支持下,USB(UniversalSerial Bus,通用串行總線)具有連接單一化、即插即用、支持熱插拔等特點(diǎn),簡化了PC和外圍設(shè)備的連接過程,所以,USB接口存儲(chǔ)器的使用也很普及。在某些環(huán)境下需要禁用USB存儲(chǔ)設(shè)備,例如:使用計(jì)算機(jī)進(jìn)行的各種無紙化考試,為了防止考題泄露、考生作弊和計(jì)算機(jī)病毒侵入考試系統(tǒng)就需要禁用USB存儲(chǔ)設(shè)備的同時(shí)讓鼠標(biāo)等其它USB接口設(shè)備工作正常。
本文使用C語言設(shè)計(jì)了應(yīng)用程序,通過修改USB設(shè)備驅(qū)動(dòng)程序和Windows注冊(cè)表的方法,用軟件手段實(shí)現(xiàn)了禁用USB存儲(chǔ)設(shè)備的同時(shí)讓其它USB接口設(shè)備工作正常的目標(biāo);在需要USB存儲(chǔ)設(shè)備時(shí)又可以方便恢復(fù)使用。實(shí)現(xiàn)了在Windows環(huán)境下,設(shè)備管理者根據(jù)需要,方便的禁用和啟用USB存儲(chǔ)設(shè)備的目的。
在Windows操作系統(tǒng)下,計(jì)算機(jī)的USB接口、支持熱插拔,具有即插即用的特點(diǎn),要想禁用USB存儲(chǔ)設(shè)備又要保證其他USB接口的設(shè)備工作正常,需要做兩項(xiàng)工作:即修改注冊(cè)表中的鍵值和修改USB設(shè)備驅(qū)動(dòng)程序usbstor.inf中的鍵值,二者缺一不可。
注冊(cè)表中HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTOR下的Start鍵值默認(rèn)為3,當(dāng)該鍵值為3時(shí),USB存儲(chǔ)設(shè)備工作正常;當(dāng)此鍵值為4時(shí),USB存儲(chǔ)設(shè)備被禁用,但是其它USB接口設(shè)備工作仍正常。以后本文中提到的Start鍵值均為這里的鍵值,不在另外說明。
對(duì)于一臺(tái)個(gè)人計(jì)算機(jī),當(dāng)其Start鍵值改為 4后,只能保證該計(jì)算機(jī)已經(jīng)使用過的USB存儲(chǔ)設(shè)備不能再使用,因?yàn)椋咽褂眠^的的USB存儲(chǔ)設(shè)備再次插入U(xiǎn)SB接口,USB設(shè)備驅(qū)動(dòng)程序不再檢查和安裝驅(qū)動(dòng)程序,因而不被識(shí)別;但從未在此計(jì)算機(jī)上使用過的的USB存儲(chǔ)設(shè)備插入U(xiǎn)SB接口時(shí),Windows操作系統(tǒng)USB設(shè)備驅(qū)動(dòng)程序usbstor.inf將自動(dòng)檢查和安裝USB設(shè)備驅(qū)動(dòng)程序,同時(shí)會(huì)自動(dòng)將Start鍵值改回3,此時(shí)所有USB存儲(chǔ)設(shè)備均可用。因此要完全禁用USB存儲(chǔ)設(shè)備,還需要手動(dòng)修改USB設(shè)備驅(qū)動(dòng)程序usbstor.inf中的鍵值。
為了解釋修改USB設(shè)備驅(qū)動(dòng)程序usbstor.inf中的鍵值的原因,首先需要了解Windows XP系統(tǒng)及其WDM驅(qū)動(dòng)程序。
2.2.1 Windows XP系統(tǒng)及其WDM驅(qū)動(dòng)程序簡單介紹
Windows XP運(yùn)行平臺(tái)支持兩種模式:用戶模式和內(nèi)核模式。用戶模式下,應(yīng)用程序接口調(diào)用函數(shù)在一些例程的幫助下可完成向設(shè)備讀寫數(shù)據(jù)功能。操作系統(tǒng)創(chuàng)建一個(gè)稱為I/O請(qǐng)求包(IRP)的數(shù)據(jù)結(jié)構(gòu),并將IRP送入設(shè)備驅(qū)動(dòng)的一個(gè)入口點(diǎn)。而在內(nèi)核模式下,設(shè)備驅(qū)動(dòng)執(zhí)行IRP并最終完成與硬件的數(shù)據(jù)訪問。驅(qū)動(dòng)程序工作于內(nèi)核模式,既可以直接訪問硬件,也可以通過硬件抽象層提供的一些功能實(shí)現(xiàn)對(duì)硬件的訪問。
WDM(Windows Driver Mode,Windows驅(qū)動(dòng)程序模型)是Microsoft推出的一種驅(qū)動(dòng)程序模型,由運(yùn)行于內(nèi)核模式的系統(tǒng)級(jí)代碼組成,在應(yīng)用程序和設(shè)備之間采用分層驅(qū)動(dòng)的方法,其中包含三種類型的驅(qū)動(dòng)程序,其可能的一種結(jié)構(gòu)如圖1所示。

圖1WDM驅(qū)動(dòng)程序結(jié)構(gòu)
過濾驅(qū)動(dòng)程序用于過濾向設(shè)備、設(shè)備類或總線I/O發(fā)送請(qǐng)求,可服務(wù)于多個(gè)設(shè)備,還可進(jìn)一步劃分,這部分是可選的。總線驅(qū)動(dòng)程序負(fù)責(zé)驅(qū)動(dòng)I/O總線,處理總線上的全部事務(wù),控制對(duì)其總線所有設(shè)備的訪問。功能驅(qū)動(dòng)程序用于驅(qū)動(dòng)一個(gè)單獨(dú)的設(shè)備,控制并實(shí)現(xiàn)該設(shè)備的主要功能。
2.2.2 USB存儲(chǔ)設(shè)備驅(qū)動(dòng)文件usbstor.inf簡單介紹
USB設(shè)備所采用的驅(qū)動(dòng)程序是一種典型的WDM驅(qū)動(dòng)程序。在WDM驅(qū)動(dòng)程序中,即插即用管理器(PnP)負(fù)責(zé)通知操作系統(tǒng)何時(shí)添加(或刪除)設(shè)備,并使用INF(Device Information File,設(shè)備信息文件)文件來查找新設(shè)備的驅(qū)動(dòng)程序。
INF是 Information File的縮寫,是微軟公司為硬件設(shè)備制造商發(fā)布其設(shè)備驅(qū)動(dòng)程序而開發(fā)的,許多硬件設(shè)備的驅(qū)動(dòng)程序都是使用.INF文件來安裝的。.INF文件從Windows3.X時(shí)代就開始大量被使用了。.INF文件是一種具有特定格式的純文本文件,我們可說它是一種安裝腳本(SetupScript)。雖然.INF只是純文本文件,但是當(dāng)我們?cè)赪indows操作系統(tǒng)運(yùn)行環(huán)境下對(duì).INF文件按鼠標(biāo)右鍵后,在右鍵菜單上就會(huì)出現(xiàn)“安裝I”命令,這是因?yàn)槲④浌疽言谄洳僮飨到y(tǒng) Windows中內(nèi)置提供了 Setup API解析INF腳本文件,我們只需用文本編輯軟件編寫.INF文件,便可完成大部份的安裝工作,所以尤其是在軟體的大小并不是很大的情況下,安裝工作不是很復(fù)雜的時(shí)候,使用.INF文件來進(jìn)行安裝工作將會(huì)是一個(gè)較好選擇。而且如果要安裝設(shè)備驅(qū)動(dòng)程序,.INF文件是目前唯一的選擇。.INF文件可以提供有限的平臺(tái)獨(dú)立性,并指定有限的軟件依賴性。目前.INF文件最普遍的應(yīng)用是為安裝硬件設(shè)備的驅(qū)動(dòng)程序服務(wù)的。
usbstor.inf文件是由許多節(jié)(Section)組成,節(jié)名用方括號(hào)擴(kuò)起來,如version節(jié),Manufacturer節(jié),和Strings節(jié)等等。而每個(gè)節(jié)又由一系列的條目組成,每個(gè)條目都是由一個(gè)鍵(Key)與一個(gè)值(Value)組成,都是“Key=Value”這樣的形式,在這些節(jié)中定義的項(xiàng)目可以完成硬件的自動(dòng)檢測(cè)和軟件(包括驅(qū)動(dòng)程序)的安裝。.INF文件中分號(hào)后面的字符串是注釋。在一個(gè).INF文件中,所有跟隨在分號(hào)(;)后的文字都會(huì)被視為注釋。注釋并不一定要在新行開始,可以在一行文字后面加入注釋。
2.2.3 修改USB存儲(chǔ)設(shè)備驅(qū)動(dòng)程序文件usbstor.inf
在Windows XP的usbstor.inf文件中:QV2KUX節(jié)中“StartType=3”;Common節(jié)中“StartType=3”我們稱之為USB存儲(chǔ)設(shè)備初始狀態(tài)值,或USB存儲(chǔ)設(shè)備驅(qū)動(dòng)文件默認(rèn)狀態(tài)值,此時(shí),USB存儲(chǔ)設(shè)備處于可用狀態(tài)。將文件“usbstor.inf”復(fù)制一個(gè)副本命名為“EnableUsbstor.inf”,作為以后恢復(fù)文件之用。此時(shí),從未插過USB接口的存儲(chǔ)設(shè)備插入U(xiǎn)SB接口時(shí),USB設(shè)備驅(qū)動(dòng)程序usbstor.inf將自動(dòng)檢查和安裝USB設(shè)備驅(qū)動(dòng)程序,同時(shí)將Start鍵值改為3,USB存儲(chǔ)設(shè)備可用。
在Windows XP環(huán)境下可使用文本編輯器將usbstor.inf文件中的兩處StartType鍵值進(jìn)行修改:即QV2KUX 節(jié)中“StartType=4”;Common節(jié)中“Start-Type=4”稱為USB存儲(chǔ)設(shè)備禁用狀態(tài)值,此時(shí),USB存儲(chǔ)設(shè)備處于禁用狀態(tài)。將文件另存為“DisableUsbstor.inf”。
此時(shí),從未插過USB接口的存儲(chǔ)設(shè)備插入U(xiǎn)SB接口時(shí),USB設(shè)備驅(qū)動(dòng)程序usbstor.inf將能夠自動(dòng)檢查但不能自動(dòng)安裝USB設(shè)備驅(qū)動(dòng)程序,同時(shí)也不能將Start鍵值改為3,USB存儲(chǔ)設(shè)備將不可用。
我們把計(jì)算機(jī)管理者或機(jī)房管理者給定義為administrator角色,他負(fù)責(zé)管理所有計(jì)算機(jī),有權(quán)設(shè)定計(jì)算機(jī)的使用權(quán)限,包括USB存儲(chǔ)設(shè)備的禁用和啟用設(shè)定,Administrator可以使用兩個(gè)用例即Disable USB Storage Device用例和Enable USB Storage Device用例,Disable USB Storage Device用例完成禁用USB存儲(chǔ)設(shè)備的功能,Enable USB Storage Device用例完成啟用USB存儲(chǔ)設(shè)備的功能。禁用與啟用USB存儲(chǔ)設(shè)備用例圖如Figure 2所示。

Figure 2 Disable and Enable USB storage devices use casediagram
USB存儲(chǔ)設(shè)備的禁用和啟用設(shè)定是用兩個(gè)程序來完成的,他們分別用于禁用和啟用USB設(shè)備,程序的工作原理是修改注冊(cè)表中的鍵值和修改USB設(shè)備驅(qū)動(dòng)程序usbstor.inf中的鍵值。DisableUSB.c程序完成Disable USB Storage Device功能,Enable-USB.c完成 Enable USB Storage Device功能,DisableUSB.c和 EnableUSB.c程序在 Turbo C Version2.0開發(fā)環(huán)境下編譯通過后,可以生成Disable-USB.exe和EnableUSB.exe可執(zhí)行文件以備運(yùn)行。





本文使用C語言設(shè)計(jì)的程序,在Windows XP中,將 DisableUSB.exe 、EnableUSB.exe、DisableUsbstor.inf、EnableUsbstor.inf四個(gè)文件放在同一個(gè)文件夾里。當(dāng)需要禁用USB存儲(chǔ)設(shè)備時(shí),運(yùn)行Disable-USB.exe文件,回答預(yù)先設(shè)定的密碼如“cuc”即可;當(dāng)需要啟用USB存儲(chǔ)設(shè)備時(shí),運(yùn)行EnableUSB.exe文件,回答預(yù)先設(shè)定的密碼如“cuc”即可。本文禁用USB存儲(chǔ)設(shè)備的思路簡單,以純軟件手段的實(shí)現(xiàn)方法也存在其不可避免的弊端,即高手可以以純軟件手段解鎖USB設(shè)備,所以本文只是提供一個(gè)實(shí)現(xiàn)禁用USB設(shè)備的基本思路,而其實(shí)際應(yīng)用中的安全性還有待研究和討論
[1]陸原,魏杰,孟瑋.Windows XP環(huán)境下USB設(shè)備驅(qū)動(dòng)程序的開發(fā)[J].國外電子元器件,2007,(7):28.
[2]譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].北京:清華大學(xué)出版社,2008.
[3]袁濤,孫蕾蕾.統(tǒng)一建模語言 UML[M].北京:清華大學(xué)出版社,2009.
A Research&Implementation of Disabling the USB Storage Equipment in Windows System
SHI Xi-fu1,YANG Jun-sheng2,SHI Zeng-tian3
(1,2.Computer and Network Center,Communication University of China,Beijing 100024,China 3.International College ,Beijing University of Posts and Telecommunications,Beijing 102209,China)
This paper provides a software solution of disabling USB storage equipment such as flash disk or portable hard drive while other USB equipment could work as normal under the Windows XP operating system.The program is implemented in C language.
windows XP operating system;disable USB storage equipment;software solution;Computer room;Management
TP311.1
A
1673-4793(2012)02-0060-05
2012-3-22
石喜富(1962-),男(漢族),北京市人,中國傳媒大學(xué)高級(jí)工程師.E-mail:ston@cuc.edu.cn
(責(zé)任編輯
:王 謙)