關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于USB的存儲(chǔ)設(shè)備信息安全防護(hù)設(shè)計(jì)

基于USB的存儲(chǔ)設(shè)備信息安全防護(hù)設(shè)計(jì)

作者: 時(shí)間:2009-11-20 來(lái)源:網(wǎng)絡(luò) 收藏

  其次是應(yīng)為驅(qū)動(dòng)程序函數(shù)選擇名字。由于每個(gè)驅(qū)動(dòng)程序中都要包含標(biāo)準(zhǔn)的驅(qū)動(dòng)程序函數(shù),因此,應(yīng)使用一套區(qū)別于其他驅(qū)動(dòng)程序的函數(shù)命名機(jī)制,由于使程序更容易開(kāi)發(fā)、調(diào)試和測(cè)試。

  此外,還要編寫(xiě)一個(gè)為AddDevice、DispatchPnP、DispatchPower和DispatchCreate函數(shù)設(shè)置入口點(diǎn)的DriverEntry函數(shù),同時(shí)要編寫(xiě)一個(gè)完成內(nèi)容的AddDevice函數(shù)。這四個(gè)內(nèi)容。第一是調(diào)用IoCreateDevice以創(chuàng)建一個(gè)獨(dú)立設(shè)備對(duì)象:第二是調(diào)用IoAttachDeviceToDeviceStack。以把它自己加入設(shè)備棧,同時(shí)填寫(xiě)PDEVICE_EXTENSION;第三是調(diào)用IoRegisterDeviceInterface,并為它的設(shè)備暴露一個(gè)接口,暴露的接口可為訪問(wèn)該設(shè)備的應(yīng)用程序提供途徑:第四調(diào)用IoSetDevi.ceInterfaceState,以激活它先前注冊(cè)的接口。

  至此,過(guò)濾設(shè)備就可以在DeviceTree中看到了。

  最后,應(yīng)為IRP_MJ_PNP請(qǐng)求編寫(xiě)一個(gè)基本DispatchPnP函數(shù)。該DispatchPnP函數(shù)必須準(zhǔn)備處理具體的PnP IRP,然后為IRP_MJ_POWER編寫(xiě)一個(gè)基本DispatchPower函數(shù),再為IRP_MJ_CREATE請(qǐng)求編寫(xiě)一個(gè)基本Dispatch Create函數(shù),同時(shí)攔截相應(yīng)的IRP請(qǐng)求,接著再為I/O控制請(qǐng)求編寫(xiě)一個(gè)基本DispatchDevCtrl函數(shù),以與應(yīng)用程序進(jìn)行通訊和處理具體的控制請(qǐng)求。

  2單向控制關(guān)鍵技術(shù)分析

  2.1 SCSI命令的分析

  對(duì)應(yīng)于不同的過(guò)濾功能,其需要攔截的IRP也不相同。要對(duì)U盤(pán)進(jìn)行單向控制。就需要攔截所有的寫(xiě)操作,使U盤(pán)成為只讀的。但是,寫(xiě)U盤(pán)的時(shí)候,發(fā)送的并不是通常的IRP_MJ_WRITE請(qǐng)求,而是要分析相應(yīng)的SCSI命令,對(duì)SCSI命令的取得和操作大致有兩種。

  第一種是得到當(dāng)前的SCSI命令,其格式為:

  2.2單向控制的實(shí)現(xiàn)

  系統(tǒng)進(jìn)行寫(xiě)操作時(shí),通常都是先寫(xiě)在緩存區(qū),然后經(jīng)過(guò)一定的延時(shí)后,才會(huì)寫(xiě)到真正的磁盤(pán)中。所以,當(dāng)攔截到SCSI命令中的SCSIOP WRITE后,雖然系統(tǒng)不會(huì)真正的寫(xiě)東西到U盤(pán)上,但卻要過(guò)很久才會(huì)提示延時(shí)寫(xiě)錯(cuò)誤。所以,本文采用了另外一種方法,即用軟件實(shí)現(xiàn)“帶寫(xiě)保護(hù)功能”的U盤(pán),其效果與硬件實(shí)現(xiàn)的寫(xiě)保護(hù)方式一樣,從而實(shí)現(xiàn)了U盤(pán)的只讀。其軟件實(shí)現(xiàn)方法如下:



評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉