中文字幕日韩一区二区不卡,亚洲av永久无码精品天堂动漫,亚洲av无码国产精品麻豆天美,最新版天堂中文在线,中文字幕视频在线看

a&s專(zhuān)業(yè)的自動(dòng)化&安全生態(tài)服務(wù)平臺(tái)
公眾號(hào)
安全自動(dòng)化

安全自動(dòng)化

安防知識(shí)網(wǎng)

安防知識(shí)網(wǎng)

手機(jī)站
手機(jī)站

手機(jī)站

大安防供需平臺(tái)
大安防供需平臺(tái)

大安防供需平臺(tái)

資訊頻道橫幅A1
首頁(yè) > 資訊 > 正文

基于KMDF 的USB 指紋采集儀驅(qū)動(dòng)程序

指紋識(shí)別利用了人體指紋的唯一性和不變性,是生物特征識(shí)別領(lǐng)域的重要手段,已廣泛應(yīng)用于信息安全領(lǐng)域。自動(dòng)指紋識(shí)別系統(tǒng)(AIFS)[1]包含如下過(guò)程...
資訊頻道文章B

【安防知識(shí)網(wǎng)】指紋識(shí)別利用了人體指紋的唯一性和不變性,是生物特征識(shí)別領(lǐng)域的重要手段,已廣泛應(yīng)用于信息安全領(lǐng)域。自動(dòng)指紋識(shí)別系統(tǒng)(AIFS)[1]包含如下過(guò)程:

  

  圖 1 AIFS 系統(tǒng)過(guò)程

  指紋采集過(guò)程作為指紋識(shí)別系統(tǒng)的第一步,負(fù)責(zé)原始指紋圖像的采集,采集圖像的質(zhì)量直接影響到指紋處理結(jié)果。所以指紋采集儀的選取至關(guān)重要,影響整個(gè)系統(tǒng)的性能。較早出現(xiàn)的活體指紋采集儀主要采用光學(xué)方法,采用光的全反射原理取像;后來(lái)陸續(xù)出現(xiàn)了超聲波掃描型、熱敏型和半導(dǎo)體型的指紋采集儀。超聲波采集儀雖然采集質(zhì)量出色,但是由于造價(jià)高,不適于大批量應(yīng)用;熱敏型采集儀則由于采集質(zhì)量差、采集面積小,使用較少。半導(dǎo)體型的大多是基于CMOS 壓感特性,由于性?xún)r(jià)比高,占據(jù)了大部分的指紋采集設(shè)備市場(chǎng)。MBF200 是市場(chǎng)上先進(jìn)的高性能、低功耗半導(dǎo)體型傳感器。

  指紋采集器在系統(tǒng)中使用時(shí),由于大多數(shù)產(chǎn)品和Windows 系統(tǒng)相連,所以在Windows操作系統(tǒng)下的驅(qū)動(dòng)開(kāi)發(fā)顯得尤為重要。WDF 是微軟下一代驅(qū)動(dòng)模型[3],兼容Windows2000以后的所有平臺(tái),在Vista 操作系統(tǒng)和即將發(fā)布的Windows7 操作系統(tǒng)中均被采用,代表了驅(qū)動(dòng)設(shè)計(jì)領(lǐng)域最先進(jìn)的技術(shù)方向。

  WDF 封裝了驅(qū)動(dòng)程序中的某些共同行為:例如即插即用和電源管理就屬于這種共同行為。因?yàn)榇蠖鄶?shù)驅(qū)動(dòng)程序中都需要處理即插即用和電源管理問(wèn)題,據(jù)說(shuō)這大概要上千行的代碼,況且,沒(méi)有相當(dāng)水平還不一定能處理好。為了一勞永逸,WDF 干脆將即插即用和電源管理封裝了進(jìn)了對(duì)象之內(nèi),一舉成了對(duì)象的缺省(默認(rèn))行為。

  WDF 改變了操作系統(tǒng)內(nèi)核與驅(qū)動(dòng)程序之間的關(guān)系,WDM 驅(qū)動(dòng)程序中,一方面要處理硬件,另一方面要處理驅(qū)動(dòng)程序與操作系統(tǒng)內(nèi)核的交互?,F(xiàn)在WDF 則將驅(qū)動(dòng)程序與操作系統(tǒng)內(nèi)核之間進(jìn)行了分離,驅(qū)動(dòng)程序與操作系統(tǒng)交互工作交給框架內(nèi)封裝的方法(函數(shù))完成,這樣驅(qū)動(dòng)開(kāi)發(fā)者只需專(zhuān)注處理硬件的行為即可。這不僅避免了顧此失彼兩面不周的弊端,也指紋采集預(yù)處理 特征提取 比對(duì) 識(shí)別結(jié)果

  由于雙方的分離,對(duì)操作系統(tǒng)內(nèi)的某些改動(dòng)和硬件制造商配套驅(qū)動(dòng)程序的開(kāi)發(fā)都有莫大的好處。

  1 MFB200 的結(jié)構(gòu)和特性

  MBF200[4]具有256×300 傳感器陣列和500dpi 的分辨率,集成8 位A/D 轉(zhuǎn)換器,工作電壓為3.3~5V,且有指紋自動(dòng)檢測(cè)功能。它提供3 種總線(xiàn)接口:8 位微處理器總線(xiàn)接口(MCU)、串行外圍設(shè)備接口(SPI)和集成USB 全速接口。在計(jì)算機(jī)系統(tǒng)中采用它作為采集設(shè)備時(shí),大多采用USB 接口。

  MBF200 的電容傳感器陣列由二維金屬電極組成.所有金屬電極充當(dāng)一個(gè)電容板,接觸的手指充當(dāng)?shù)诙€(gè)電容板。器件表面的鈍化層作為兩板的絕緣層。當(dāng)手指觸摸傳感器表面時(shí),指紋的高低不平就會(huì)在傳感器陣列上產(chǎn)生變化的電容,從而引起二維陣列上電壓的變化,并形成8 位灰度級(jí)的數(shù)字指紋圖像。分辨率高達(dá)500DPI,信噪比高,反應(yīng)速度快。傳感器的靈敏度可通過(guò)讀寫(xiě)其內(nèi)部的放電電流寄存器(DCR)、放電時(shí)間寄存器(DTR)和增益控制寄存器(PGC)來(lái)進(jìn)行控制。

[nextpage]  2 指紋采集儀電路設(shè)計(jì)

  指紋采集儀分為電源模塊、USB 連接模塊、時(shí)鐘模塊、模式控制模塊和輔助外圍電路。電源模塊負(fù)責(zé)向傳感器芯片提供3.3~3.6V 的電壓;時(shí)鐘模塊采用外部晶體振蕩電路,有助于降低功耗;模式控制模塊負(fù)責(zé)選擇芯片的接口模式和ROM 配置方式;USB 連接模塊負(fù)責(zé)芯片和USB 連接器的連接,為了使采集器在數(shù)據(jù)傳輸速度和信號(hào)質(zhì)量上取得較好的效果,該模式下采用帶屏蔽層的電纜。USB 設(shè)備與主機(jī)相連接的控制電路如圖2 所示,其中R3 是全速USB 設(shè)備必須要求的上拉電阻,為1.5K,R1、R2 是起阻抗匹配用,均為43。

  

  圖 2 USB 連接模塊

  MBF200 內(nèi)部嵌有USB 控制器,F(xiàn)irmware 也已經(jīng)固化在了芯片中。芯片主要用到的引腳如圖2:MODE 分別置為1、0,表示采用USB 模式并使用內(nèi)部ROM;XTAL1 和XTAL2連接12MHz 晶振,ISET 用于設(shè)置內(nèi)部參考電流,F(xiàn)SET 用于設(shè)置內(nèi)部多頻振蕩器及自動(dòng)指紋檢測(cè)速率。AIN 用于模擬信號(hào)輸入方式選擇,USB 接口使用三個(gè)端點(diǎn);其中端點(diǎn)0 是控制端點(diǎn),用來(lái)控制對(duì)功能寄存器的讀寫(xiě);端點(diǎn)1 是讀端點(diǎn),用來(lái)讀取經(jīng)過(guò)AD 轉(zhuǎn)換后的指紋圖像數(shù)據(jù),它是以塊方式進(jìn)行讀取的,每次64 個(gè)字節(jié);端點(diǎn)2 是中斷端點(diǎn),當(dāng)ISR 被置位時(shí),由它向端點(diǎn)2 發(fā)送中斷信號(hào)。

  

  圖 3 指紋采集儀原理圖

[nextpage]  3 基于KMDF 的USB 驅(qū)動(dòng)架構(gòu)

  3.1 WDF 框架

  微軟操作系統(tǒng)下的驅(qū)動(dòng)模型,最開(kāi)始采用的是VxD(VIRTUAL X DRIVER),現(xiàn)早已經(jīng)廢棄。自Windows 2000 開(kāi)始,驅(qū)動(dòng)開(kāi)發(fā)基于WDM(Windows Driver Model)標(biāo)準(zhǔn)驅(qū)動(dòng)模型。WDF[5] (Windows Driver Foundation)是微軟提出的下一代全新的驅(qū)動(dòng)程序模型,它是在WDM(windows Driver Model)的基礎(chǔ)上發(fā)展而來(lái)的;WDF 是Vista 系統(tǒng)及其以后的版本采用的驅(qū)動(dòng)模型,全面向上兼容WDM。最新發(fā)布的Windows7 中就采用了WDF。WDF 支持面向?qū)ο?、事件?qū)動(dòng)的驅(qū)動(dòng)程序開(kāi)發(fā),提供了比WDM 更高層次抽象的高度靈活、可擴(kuò)展、可診斷的驅(qū)動(dòng)程序框架。WDF 框架管理了大多數(shù)與操作系統(tǒng)相關(guān)的交互,實(shí)現(xiàn)了公共的驅(qū)動(dòng)程序功能(如電源管理、PnP 支持),隔離了設(shè)備驅(qū)動(dòng)程序與操作系統(tǒng)內(nèi)核,降低了驅(qū)動(dòng)程序?qū)?nèi)核的影響。

  

  圖 4 WDF 驅(qū)動(dòng)棧模型

  對(duì)應(yīng)于驅(qū)動(dòng)模型,分別有相應(yīng)的驅(qū)動(dòng)開(kāi)發(fā)套件。WDM 驅(qū)動(dòng)模型對(duì)應(yīng)于DDK(Driver Develop Kit),而WDF 驅(qū)動(dòng)模型對(duì)應(yīng)于WDK(Windows Driver Kit)。WDK 提供了兩個(gè)框架:KMDF(內(nèi)核模式驅(qū)動(dòng)程序框架)和UMDF(用戶(hù)模式驅(qū)動(dòng)程序框架)。對(duì)內(nèi)核模式和用戶(hù)模式對(duì)象來(lái)說(shuō),WDF 是兩者的父對(duì)象。相對(duì)于內(nèi)核模式,派生出的對(duì)象稱(chēng)為“KMD 框架”,即KMDF;相對(duì)于用戶(hù)模式,派生出的模型稱(chēng)為“UMD 框架”,即UMDF。具體到實(shí)現(xiàn),KMDF 對(duì)應(yīng)于.Sys 文件,負(fù)責(zé)硬件交互和處理;UMDF 對(duì)應(yīng)于.Dll 文件,負(fù)責(zé)和用戶(hù)的交互。

  3.2.Windows USB 驅(qū)動(dòng)原理

  在 KMDF 中,USB 通信使用分層驅(qū)動(dòng)模型,每層處理一部分通信任務(wù)。把通信分成層,可以使不同的設(shè)備在一些任務(wù)上使用相同的驅(qū)動(dòng)。如圖5 所示,Windows 對(duì)構(gòu)成一個(gè)USB主機(jī)的不同軟件部分進(jìn)行了清楚的劃分。USB 設(shè)備驅(qū)動(dòng)程序通過(guò)Windows 定義的軟件接口與根集線(xiàn)器驅(qū)動(dòng)程序進(jìn)行通信,而USB 總線(xiàn)根集線(xiàn)器驅(qū)動(dòng)程序則通過(guò)包含在USBD 中的USBDI(通用串行總線(xiàn)驅(qū)動(dòng)程序接口)實(shí)現(xiàn)與通用串行總線(xiàn)驅(qū)動(dòng)程序(USBD)的通信。然后,USBD 選擇兩種主機(jī)控制器驅(qū)動(dòng)程序之一,同其下方的主控制器通信。最后,主控制器驅(qū)動(dòng)程序通過(guò)PCI 枚舉器軟件直接實(shí)現(xiàn)對(duì)USB 物理總線(xiàn)的訪問(wèn)。

  USB 總線(xiàn)驅(qū)動(dòng)程序由操作系統(tǒng)提供,它位于USB 功能驅(qū)動(dòng)程序的下面,負(fù)責(zé)與實(shí)際的硬件打交道,實(shí)現(xiàn)繁瑣的底層通信[6]。USB 功能驅(qū)動(dòng)程序由設(shè)備開(kāi)發(fā)者編寫(xiě),位于USB 總線(xiàn)驅(qū)動(dòng)程序的上面,不與實(shí)際的硬件打交道,而是通過(guò)向USB 總線(xiàn)驅(qū)動(dòng)程序發(fā)送包含URB(USB Request Block,USB 請(qǐng)求塊)的IRP(I/0 Request Packet,I/O 請(qǐng)求包),來(lái)實(shí)現(xiàn)對(duì)USB設(shè)備信息的發(fā)送或接收。

  

  圖 5 USB 分層結(jié)構(gòu)

  如圖 5 所示,總線(xiàn)驅(qū)動(dòng)對(duì)應(yīng)于PDO(Physical Device Object),功能驅(qū)動(dòng)對(duì)應(yīng)于FDO(Functional Device Object)。在功能驅(qū)動(dòng)程序之上以及功能驅(qū)動(dòng)程序和總線(xiàn)驅(qū)動(dòng)程序之間可能存在著各種的過(guò)濾驅(qū)動(dòng)程序(Filter Driver)。過(guò)濾驅(qū)動(dòng)程序也可以創(chuàng)建過(guò)濾設(shè)備對(duì)象FiDO(Filter Device Object)。過(guò)濾驅(qū)動(dòng)程序是一個(gè)中間層的驅(qū)動(dòng)程序,它可以截獲并處理經(jīng)過(guò)它的I/O 請(qǐng)求。過(guò)濾驅(qū)動(dòng)程序用于變更標(biāo)準(zhǔn)設(shè)備驅(qū)動(dòng)程序的行為。

  USB 設(shè)備驅(qū)動(dòng)程序的工作原理如下:當(dāng)應(yīng)用程序和指紋采集儀進(jìn)行通信時(shí),必須設(shè)置DeviceControl 例程,然后使用Windows API 函數(shù)DeviceIoCtrl()對(duì)WIN32 子系統(tǒng)進(jìn)行WIN32調(diào)用。此調(diào)用由I/O 系統(tǒng)服務(wù)接收并通知I/O 管理器,I/O 管理器將此請(qǐng)求構(gòu)造成一個(gè)合適的I/O 請(qǐng)求包(I/O Request Packet,IRP)并把它傳遞給USB 功能驅(qū)動(dòng)程序。

  USB 功能驅(qū)動(dòng)程序接收到這個(gè)IRP 以后,根據(jù)IRP 中包含的具體操作代碼,構(gòu)造相應(yīng)的USB 請(qǐng)求塊并把此URB 放到一個(gè)新的IRP 中,然后把此IRP 傳遞到USB 總線(xiàn)驅(qū)動(dòng)程序,USB 總線(xiàn)驅(qū)動(dòng)程序根據(jù)IRP 中所含的URB 執(zhí)行相應(yīng)的操作(如從USB 設(shè)備讀取數(shù)據(jù)),并把操作結(jié)果通過(guò)IRP 返還給USB 功能驅(qū)動(dòng)程序。USB 功能驅(qū)動(dòng)程序接收到此IRP 后,將操作結(jié)果通過(guò)IRP 返還給I/O 管理器,最后I/O 管理器將此IRP 中的操作結(jié)果返還給應(yīng)用程序,至此應(yīng)用程序?qū)SB設(shè)備的一次I/O 操作完成。USB 功能驅(qū)動(dòng)程序除負(fù)責(zé)處理應(yīng)用程序的I/O 請(qǐng)求外,還要處理PnP 管理器發(fā)送給它的PnP 請(qǐng)求。通過(guò)對(duì)這些PnP 請(qǐng)求的處理,USB 功能驅(qū)動(dòng)程序可支持設(shè)備的熱插拔和即插即用功能。

[nextpage]  3.3.指紋采集儀通信與傳輸方式

  USB 定義了四種傳輸類(lèi)型:控制傳輸、中斷傳輸、等時(shí)傳輸、批量傳輸。控制傳輸:可靠的、非周期性的、由主機(jī)軟件發(fā)起的請(qǐng)求或者回應(yīng)的傳輸,通常用于命令事務(wù)和狀態(tài)事務(wù)。控制傳輸有兩個(gè)功能,攜帶USB 規(guī)范的要求,讓主機(jī)了解設(shè)備的功能與配置;攜帶群組或廠商定義的要求??刂苽鬏斢糜谠诳蛻?hù)軟件和它的應(yīng)用設(shè)備之間的設(shè)置信息、命令信息、狀態(tài)信息的傳輸,允許訪問(wèn)一個(gè)設(shè)備的不同部分。中斷傳輸:小規(guī)模數(shù)據(jù)的、低速的、固定延遲的傳輸。中斷傳輸用于只傳送或接收少量數(shù)據(jù),而且并不經(jīng)常進(jìn)行傳送,但卻有一個(gè)確定的服務(wù)周期。等時(shí)傳輸:在主機(jī)與設(shè)備之間的周期性的、連續(xù)的通信,一般用于傳輸與時(shí)間相關(guān)的信息。這種類(lèi)型保留了將時(shí)間概念包含于數(shù)據(jù)中的能力。但這并不意味著,傳送這樣數(shù)據(jù)的時(shí)間總是很重要的,即傳輸并不一定很緊急。批量傳輸:非周期性的,大包的可靠的傳輸。典型地用于傳輸那些可以利用任何帶寬的數(shù)據(jù),而且這些數(shù)據(jù)當(dāng)沒(méi)有可用帶寬時(shí),可以容忍等待。批量傳輸是為了支持在某些在不確定的時(shí)間進(jìn)行的相當(dāng)大量的數(shù)據(jù)通信,對(duì)連續(xù)性不做要求。它可以利用任何可獲得的帶寬。

  MBF200 使用內(nèi)部ROM 作為配置寄存器,在主機(jī)發(fā)出GET--DESCRIPTOR 命令時(shí),可以從內(nèi)部ROM 中讀取USB 的描述符來(lái)配置USB 接口。在MBF200 的USB 接口中,使用了以下三個(gè)端點(diǎn):端點(diǎn)0:端點(diǎn)O 是控制端點(diǎn),常用于設(shè)備的枚舉和配置。FPS200 傳感器的功能寄存器的讀寫(xiě),都是使用控制傳輸方式向端點(diǎn)O 寫(xiě)入廠商規(guī)定的命令字來(lái)完成。芯片初始化過(guò)程如圖6。端點(diǎn)1 采用批量輸入方式,專(zhuān)用來(lái)讀取寄存器CTRLA,即A/D 轉(zhuǎn)換器的輸出緩沖區(qū)。數(shù)據(jù)以64 字節(jié)的長(zhǎng)度包傳送。如果是在GETROW 的圖像讀取方式下,根據(jù)行數(shù)的不同,最后一個(gè)數(shù)據(jù)包的長(zhǎng)度可能會(huì)少于64 字節(jié)。端點(diǎn)2 是中斷端點(diǎn),如果有中斷產(chǎn)生,ISR(Interrupt Status Register)的內(nèi)容就被傳送到端點(diǎn)2。如圖6 所示。

  

  圖 6 MBF 初始化

  4 指紋采集儀驅(qū)動(dòng)設(shè)計(jì)

  4.1 驅(qū)動(dòng)程序設(shè)計(jì)

  和 WDM 模型相同,KMDF 框架是面向?qū)ο?、事件?qū)動(dòng)的驅(qū)動(dòng)程序模型。它定義了一系列的對(duì)象用來(lái)表示設(shè)備、驅(qū)動(dòng)、中斷、內(nèi)存等,每個(gè)對(duì)象有對(duì)應(yīng)的屬性、方法和事件。驅(qū)動(dòng)程序利用這些方法創(chuàng)建對(duì)象、設(shè)置屬性和響應(yīng)事件??蚣芏x的主要對(duì)象有:WDFDRIVER對(duì)象、WDFDEVICE 對(duì)象、WDFREQUEST 對(duì)象、WDFQUEUE 對(duì)象、WDFQUEUE 對(duì)象、WDFINTERRUPT 對(duì)象等。

  WDF 的對(duì)象模型是層次化的模型。WDFDRIVER 對(duì)象是根對(duì)象,其他對(duì)象都是它的子對(duì)象。對(duì)于大多數(shù)對(duì)象,驅(qū)動(dòng)程序在創(chuàng)建它們的時(shí)候可以指定父對(duì)象,如果沒(méi)有指定,則框架默認(rèn)其父對(duì)象為WDFDRIVER 對(duì)象。WDF 大大簡(jiǎn)化了WDM 中的PNP 和電源管理的開(kāi)發(fā)。WDF 框架為設(shè)備停止、設(shè)備刪除、電源狀態(tài)切換等PNP 和電源管理事件提供了適合的缺省行為,驅(qū)動(dòng)程序本身不再糾纏于復(fù)雜的PNP 和電源管理事件處理。在WDM 驅(qū)動(dòng)程序中, I/O 請(qǐng)求的取消是一個(gè)復(fù)雜難以理解的過(guò)程,開(kāi)發(fā)人員必須有對(duì)內(nèi)核深刻的理解才能正確處理I/O 請(qǐng)求的取消。WDF 框架支持內(nèi)建的I/O 請(qǐng)求取消處理,使得驅(qū)動(dòng)程序處理取消I/O請(qǐng)求的工作大大簡(jiǎn)化。

  USB 驅(qū)動(dòng)入口函數(shù)[7]為DriverEntry(),其主要工作是把各種函數(shù)指針填入驅(qū)動(dòng)程序?qū)ο?。這些指針為操作系統(tǒng)指明了驅(qū)動(dòng)程序容器中各種子例程的位置。根據(jù) WDFUSBINTERFACE 和WDFUSBPIPE 對(duì)象方法,分別進(jìn)行初始化。接口對(duì)象的初始化函數(shù):m_Interface.Initialize()。端點(diǎn)對(duì)象的初始化函數(shù):Pipe0.Initialize()和Pipe1.Initialize()。

  例程的分發(fā)使用DeviceControl 函數(shù),自己定義好要實(shí)現(xiàn)的具體例程,如下:

  switch (I.IoctlCode())

  {

  case IOCTL_VENDOR_REQUEST:

  status = IOCTL_VENDOR_REQUEST_Handler(I);//初始化

  break;

  case IOCTL_BULK_READ:

  status = IOCTL_BULK_READ_Handler(I);//批量讀

  break;

  case IOCTL_READ_INT:

  status = IOCTL_READ_INT_Handler(I);//中斷讀

  break;

  default:

  status = STATUS_INVALID_DEVICE_REQUEST;

  break; }

  在 IOCTL_VENDOR_REQUEST_Handler 中配置MBF200_DTR 為0x14,MBF200_DCR為0x06,MBF200_PGC 為0x08,MBF200_ICR 為0x09,MBF200_CTRLB 為0x0D。

[nextpage]  4.2 軟中斷和硬中斷設(shè)計(jì)

  指紋的自動(dòng)檢測(cè)分為基于中斷寄存器的檢測(cè)和基于軟中斷的自動(dòng)檢測(cè)?;谥袛嗉拇嫫鞯臋z測(cè)就是讀取中斷狀態(tài)寄存器的值,當(dāng)有指紋按下時(shí),讀取ISR 的值;基于軟中斷的自動(dòng)檢測(cè)是指自己設(shè)定檢測(cè)窗口和閾值,根據(jù)窗口內(nèi)指紋點(diǎn)的數(shù)目判斷是否有指紋按下,這樣,也可以濾出質(zhì)量不合格的指紋。

  MBF200 的中斷狀態(tài)寄存器非常靈敏,只要有手指按下,就能被捕捉,改變狀態(tài)值。如果嚴(yán)格按照硬中斷來(lái)采集指紋,容易捕捉到不合格的指紋。故本文采用了兩級(jí)中斷。當(dāng)根據(jù)硬中斷采集到指紋時(shí),采用軟中斷判斷是否符合所要求的指紋圖像標(biāo)準(zhǔn)。最后濾去不合格圖像(模糊、偏離中心等),送到特征提取和比對(duì)模塊進(jìn)行處理。采用軟中斷,需要自己實(shí)現(xiàn)指紋圖像的判決函數(shù)Read_Threshold()。所用算法如下:

  

  圖 7 軟中斷檢測(cè)指紋圖像

  4.3 應(yīng)用程序與驅(qū)動(dòng)程序的接口

  應(yīng)用程序和驅(qū)動(dòng)程序通信,主要有兩種方式:為設(shè)備創(chuàng)建的一個(gè)符號(hào)鏈;輸出到一個(gè)接口。

  WDM 驅(qū)動(dòng)程序建議使用輸出到一個(gè)接口而不推薦使用創(chuàng)建符號(hào)鏈的方法。這個(gè)接口保證PDO 的安全,也保證安全地創(chuàng)建一個(gè)惟一的、獨(dú)立于語(yǔ)言的訪問(wèn)設(shè)備的方法。一個(gè)應(yīng)用程序使用Win32APIs 來(lái)調(diào)用設(shè)備。在某個(gè)Win32 APIs 和設(shè)備對(duì)象的分發(fā)函數(shù)之間存在一個(gè)映射關(guān)系。獲得對(duì)設(shè)備對(duì)象訪問(wèn)的第一步就是打開(kāi)一個(gè)設(shè)備對(duì)象的句柄。

  1.用符號(hào)鏈打開(kāi)一個(gè)設(shè)備的句柄

  為了打開(kāi)一個(gè)設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個(gè)符號(hào)鏈出口,應(yīng)用程序可以用下面這個(gè)例子的形式打開(kāi)句柄:hDevice = CreateFile(…);文件路徑名需要一個(gè)前綴,用來(lái)告訴系統(tǒng)本調(diào)用希望打開(kāi)一個(gè)設(shè)備。這個(gè)設(shè)備必須有一個(gè)符號(hào)鏈,以便應(yīng)用程序能夠打開(kāi)它。

  2.使用一個(gè)輸出接口打開(kāi)句柄

  DriverWorks 庫(kù)提供兩個(gè)助手類(lèi)來(lái)使獲得對(duì)該接口的訪問(wèn)容易一些,這兩個(gè)類(lèi)是CDeviceInterface, 和 CdeviceInterfaceClasCdeviceInterfaceClass 類(lèi)封裝了一個(gè)設(shè)備信息集,該信息集包含了特殊類(lèi)中的所有設(shè)備接口信息。

  應(yīng)用程序能有用CdeviceInterfaceClass 類(lèi)的一個(gè)實(shí)例來(lái)獲得一個(gè)或更多的CdeviceInterface 類(lèi)的實(shí)例。CdeviceInterface 類(lèi)是一個(gè)單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個(gè)路徑名的指針,該指針可以在CreateFile 中使用來(lái)打開(kāi)設(shè)備。

  采用第二種方法如下:

  自己構(gòu)造通信函數(shù)OpenByInterface,根據(jù)ClassGuid 號(hào)來(lái)識(shí)別驅(qū)動(dòng)程序。

  CDeviceInterfaceClass DevClass(pClassGuid)

  ClassGuid 號(hào)在驅(qū)動(dòng)程序的INF 文件中可以讀?。?/P>

  [Version]

  Signature="$WINDOWS NT$"

  Class=mbf200_4

  ClassGUID={83999D72-9A60-4D5A-A611-F9934FEBDDDB}

  Provider=%Provider%

  DriverVer=4/8/2008,1.00.0000

  CatalogFile=mbf200_4.cat

  在應(yīng)用程序中,若想調(diào)用調(diào)用驅(qū)動(dòng),只需要使用函數(shù)DeviceIoControl()即可:

  4.4 驅(qū)動(dòng)的安裝和發(fā)布

  把驅(qū)動(dòng)程序的INF 文件和SYS 文件打包,系統(tǒng)會(huì)根據(jù)INF 文件,自動(dòng)搜索SYS 文件,并安裝,拷貝到系統(tǒng)目錄下。如圖7 所示:

  

  圖 8 驅(qū)動(dòng)安裝

  4.5 試驗(yàn)結(jié)果

  經(jīng)過(guò)測(cè)試,采集的指紋圖像如圖8 所示:

  

  圖 9 采集結(jié)果

  5 結(jié)語(yǔ)

  本文研究了基于MBF200 芯片的指紋采集儀的硬件設(shè)計(jì),基于KMDF 架構(gòu)設(shè)計(jì)了USB驅(qū)動(dòng)程序。采用MBF200 芯片,輔以外圍芯片和電路,實(shí)現(xiàn)了指紋采集儀的硬件電路設(shè)計(jì)。并設(shè)計(jì)了應(yīng)用程序和驅(qū)動(dòng)程序的接口,通過(guò)這個(gè)接口,用戶(hù)可以方便的設(shè)計(jì)Windows 應(yīng)用程序,只要根據(jù)自己設(shè)計(jì)的驅(qū)動(dòng)例程,設(shè)計(jì)好輸入輸出緩沖區(qū),使用DeviceIoControl 調(diào)用即可。

參與評(píng)論
回復(fù):
0/300
文明上網(wǎng)理性發(fā)言,評(píng)論區(qū)僅供其表達(dá)個(gè)人看法,并不表明a&s觀點(diǎn)。
0
關(guān)于我們

a&s傳媒是全球知名展覽公司法蘭克福展覽集團(tuán)旗下的專(zhuān)業(yè)媒體平臺(tái),自1994年品牌成立以來(lái),一直專(zhuān)注于安全&自動(dòng)化產(chǎn)業(yè)前沿產(chǎn)品、技術(shù)及市場(chǎng)趨勢(shì)的專(zhuān)業(yè)媒體傳播和品牌服務(wù)。從安全管理到產(chǎn)業(yè)數(shù)字化,a&s傳媒擁有首屈一指的國(guó)際行業(yè)展覽會(huì)資源以及豐富的媒體經(jīng)驗(yàn),提供媒體、活動(dòng)、展會(huì)等整合營(yíng)銷(xiāo)服務(wù)。

免責(zé)聲明:本站所使用的字體和圖片文字等素材部分來(lái)源于互聯(lián)網(wǎng)共享平臺(tái)。如使用任何字體和圖片文字有冒犯其版權(quán)所有方的,皆為無(wú)意。如您是字體廠商、圖片文字廠商等版權(quán)方,且不允許本站使用您的字體和圖片文字等素材,請(qǐng)聯(lián)系我們,本站核實(shí)后將立即刪除!任何版權(quán)方從未通知聯(lián)系本站管理者停止使用,并索要賠償或上訴法院的,均視為新型網(wǎng)絡(luò)碰瓷及敲詐勒索,將不予任何的法律和經(jīng)濟(jì)賠償!敬請(qǐng)諒解!
? 2024 - 2030 Messe Frankfurt (Shenzhen) Co., Ltd, All rights reserved.
法蘭克福展覽(深圳)有限公司版權(quán)所有 粵ICP備12072668號(hào) 粵公網(wǎng)安備 44030402000264號(hào)
用戶(hù)
反饋