基于USB的存儲設備信息安全防護設計
其次是應為驅動(dòng)程序函數選擇名字。由于每個(gè)驅動(dòng)程序中都要包含標準的驅動(dòng)程序函數,因此,應使用一套區別于其他驅動(dòng)程序的函數命名機制,由于使程序更容易開(kāi)發(fā)、調試和測試。
此外,還要編寫(xiě)一個(gè)為AddDevice、DispatchPnP、DispatchPower和DispatchCreate函數設置入口點(diǎn)的DriverEntry函數,同時(shí)要編寫(xiě)一個(gè)完成內容的AddDevice函數。這四個(gè)內容。第一是調用IoCreateDevice以創(chuàng )建一個(gè)獨立設備對象:第二是調用IoAttachDeviceToDeviceStack。以把它自己加入設備棧,同時(shí)填寫(xiě)PDEVICE_EXTENSION;第三是調用IoRegisterDeviceInterface,并為它的設備暴露一個(gè)接口,暴露的接口可為訪(fǎng)問(wèn)該設備的應用程序提供途徑:第四調用IoSetDevi.ceInterfaceState,以激活它先前注冊的接口。
至此,過(guò)濾設備就可以在DeviceTree中看到了。
最后,應為IRP_MJ_PNP請求編寫(xiě)一個(gè)基本DispatchPnP函數。該DispatchPnP函數必須準備處理具體的PnP IRP,然后為IRP_MJ_POWER編寫(xiě)一個(gè)基本DispatchPower函數,再為IRP_MJ_CREATE請求編寫(xiě)一個(gè)基本Dispatch Create函數,同時(shí)攔截相應的IRP請求,接著(zhù)再為I/O控制請求編寫(xiě)一個(gè)基本DispatchDevCtrl函數,以與應用程序進(jìn)行通訊和處理具體的控制請求。
2單向控制關(guān)鍵技術(shù)分析
2.1 SCSI命令的分析
對應于不同的過(guò)濾功能,其需要攔截的IRP也不相同。要對U盤(pán)進(jìn)行單向控制。就需要攔截所有的寫(xiě)操作,使U盤(pán)成為只讀的。但是,寫(xiě)U盤(pán)的時(shí)候,發(fā)送的并不是通常的IRP_MJ_WRITE請求,而是要分析相應的SCSI命令,對SCSI命令的取得和操作大致有兩種。
第一種是得到當前的SCSI命令,其格式為:
2.2單向控制的實(shí)現
系統進(jìn)行寫(xiě)操作時(shí),通常都是先寫(xiě)在緩存區,然后經(jīng)過(guò)一定的延時(shí)后,才會(huì )寫(xiě)到真正的磁盤(pán)中。所以,當攔截到SCSI命令中的SCSIOP WRITE后,雖然系統不會(huì )真正的寫(xiě)東西到U盤(pán)上,但卻要過(guò)很久才會(huì )提示延時(shí)寫(xiě)錯誤。所以,本文采用了另外一種方法,即用軟件實(shí)現“帶寫(xiě)保護功能”的U盤(pán),其效果與硬件實(shí)現的寫(xiě)保護方式一樣,從而實(shí)現了U盤(pán)的只讀。其軟件實(shí)現方法如下:
評論