本書著眼于無線通信安全領域,以無線通信距離由近及遠的順序,討論各種無線通信系統的安全問題。協議分析結合攻防實例,深入介紹安全攻防技術。案例題材囊括物聯網、車聯網、移動通信、衛星導航及相關的軟硬件安全。本書共分 9 章,其中第 1 章介紹作者在無線安全攻防領域多年來的思路、理念及對該領域未來的展望;第 2~8 章分別介紹各種無線通信系統的安全攻防(RFID、無線遙控、ADS-B、BLE、ZigBee、移動通信、衛星通信等)及實例測試;第9 章介紹無線安全研究的重要手段,軟件無線電工具GNU Radio和相關硬件的詳細使用。希望本書可以為對無線通信安全感興趣的同學、從業者、產品研發人員提供有價值的安全參考。
標簽: 無線電
上傳時間: 2022-07-11
上傳用戶:
目前國內井下水泵電機多數采用傳統的人工進行控制,即人工加繼電器進行控制的方法。這種方法控制線路復雜,設備運行的自動化程度低,可靠性差,工人勞動強度大,應急能力差等缺點。針對當前國家對煤礦企業安全生產要求的不斷提高和企業自身發展所遇到的實際問題,研制了基于ARM的煤礦井下水泵電機網絡監控系統,不僅可以完成水位檢測、軸溫檢測、流量檢測、水泵起動、停止及其過程控制,而且還可以進行數據傳輸、處理等工作。它具有以下特點:水位實時在線檢測與顯示;水泵啟動與停止控制;多臺水泵實時“輪班工作制”;根據涌水量大小和用電“避峰就谷”原則,控制投入運行的水泵臺數;與監控中心聯網,實行集中控制。 本文所設計的監控系統由監控中心、監控終端和遠程訪問三部分組成,分別介紹了監控系統的硬件設計、電機保護算法設計、系統通訊網絡的設計和監控系統軟件的設計。 監控系統的硬件設計主要針對監控終端的硬件設計,它采用S3C440X作為監控終端的處理芯片。根據監測的主要參數如水泵電機電流、電壓、水泵開停狀態、電機溫度、井底水倉水位、水泵出口流量的實際特點,通過ARM芯片的快速處理運算能力,實時計算出水泵的三相有功功率和無功功率、功率因數等參量,井底水倉的水位和水泵出水口的流量、水泵的三相電壓和電流準確值。把處理運算的結果通過以太網傳到監控中心進行存儲、顯示和打印,同時監控中心根據傳上來的結果進行判斷,然后根據判斷的情況確定是否需要給監控終端發送控制命令。 電機保護算法設計方面,主要針對系統數據采集的特點,對相電流、相電壓進行交流信號采樣。對采樣后的數據運用快速傅立葉變換(FFT)進行數值計算,獲得了高精度的測量。 系統通訊網絡的設計主要針對系統兩層通訊網絡的協議進行分析與設計。監控中心軟件采用基于Basic的可視化的程序設計語言Visual Basic6.0進行開發。客戶端利用計算機網絡技術,使用B/S模式遠程實現對系統運行數據的傳輸,以便可以查詢實時數據和歷史數據,實現資源共享。
上傳時間: 2013-06-25
上傳用戶:q123321
近年來,嵌入式Internet遠程測控系統已成為計算機控制領域一個重要組成部分,它將計算機網絡、通信與自動控制技術相結合并成為新興的研究熱點。通過嵌入式Internet控制系統,用戶只要在有網絡接入的地方,就可以對與網絡連接的任何現場設備進行遠程測控。嵌入式系統可以根據應用進行軟硬件的定制,特別適用于對成本、體積、功耗有嚴格要求的各種遠程測控設備。該項技術的研究具有廣闊的應用前景。 嵌入式Web遠程監控不同于以往的C/S和B/S網絡監控技術,它通常采用嵌入式系統作為Web服務器,使得系統的成本大大降低,且設備體積小巧,便于安裝、易于維護,安全可靠,此技術自問世以來得到了業界的廣泛關注,各式各樣的解決方案和實現方式層出不窮。 本文提出了一種基于ARM的嵌入式網絡控制系統。該系統以嵌入式Boa服務器作為遠程信號的傳輸平臺。首先對網絡的系統結構和工作原理作了詳細介紹,然后對嵌入式網絡控制系統的實現作了深入的探討和研究。 整個嵌入式網絡控制系統主要劃分為三個部分:嵌入式網絡控制系統硬件設計;嵌入式網絡控制器的軟件設計;嵌入式網絡控制系統Web服務器實現。系統選用主流的ARM微處理器LPC2210作為系統主控制器,并根據需要給出了具體的硬件電路設計,包括:存儲器接口電路、網絡接口電路、串行通信接口電路以及信號調理電路設計。鑒于μ Clinux對ARM技術的有力支持,且μ Clinux具有內核可裁減、網絡功能強大、低成本、代碼開放等特點,通過對μ Clinux的裁減、配置和編譯,成功地將μ Clinux移植到LPC2210中。然后完成設備驅動開發、嵌入式網絡控制系統Boa服務器的構建及系統應用開發。 該嵌入式網絡控制系統融合監控網與信息網,實現了遠程分布式測控和通訊。系統穩定性高、實時性好、性價比高,具有廣泛的應用價值,適用于工業、交通、電力、能源等眾多控制領域。
上傳時間: 2013-04-24
上傳用戶:xc216
近年來,嵌入式Internet遠程測控系統已成為計算機控制領域一個重要組成部分,它將計算機網絡、通信與自動控制技術相結合并成為新興的研究熱點。通過嵌入式Internet控制系統,用戶只要在有網絡接入的地方,就可以對與網絡連接的任何現場設備進行遠程測控。嵌入式系統可以根據應用進行軟硬件的定制,特別適用于對成本、體積、功耗有嚴格要求的各種遠程測控設備。該項技術的研究具有廣闊的應用前景。 嵌入式Web遠程監控不同于以往的C/S和B/S網絡監控技術,它通常采用嵌入式系統作為Web服務器,使得系統的成本大大降低,且設備體積小巧,便于安裝、易于維護,安全可靠,此技術自問世以來得到了業界的廣泛關注,各式各樣的解決方案和實現方式層出不窮。 本文提出了一種基于ARM的嵌入式網絡控制系統。該系統以嵌入式Boa服務器作為遠程信號的傳輸平臺。首先對網絡的系統結構和工作原理作了詳細介紹,然后對嵌入式網絡控制系統的實現作了深入的探討和研究。 整個嵌入式網絡控制系統主要劃分為三個部分:嵌入式網絡控制系統硬件設計;嵌入式網絡控制器的軟件設計;嵌入式網絡控制系統Web服務器實現。系統選用主流的ARM微處理器LPC2210作為系統主控制器,并根據需要給出了具體的硬件電路設計,包括:存儲器接口電路、網絡接口電路、串行通信接口電路以及信號調理電路設計。鑒于μ Clinux對ARM技術的有力支持,且μ Clinux具有內核可裁減、網絡功能強大、低成本、代碼開放等特點,通過對μ Clinux的裁減、配置和編譯,成功地將μ Clinux移植到LPC2210中。然后完成設備驅動開發、嵌入式網絡控制系統Boa服務器的構建及系統應用開發。 該嵌入式網絡控制系統融合監控網與信息網,實現了遠程分布式測控和通訊。系統穩定性高、實時性好、性價比高,具有廣泛的應用價值,適用于工業、交通、電力、能源等眾多控制領域。
上傳時間: 2013-06-13
上傳用戶:牛津鞋
隨著嵌入式技術的發展,ARM處理器以其獨特的優勢在計算機、電子和通信的各個領域得到廣泛應用,將網絡技術、控制技術和視頻監控技術相融合,在更大程度上促進了家庭生活的信息化和自動化。系統采用先進的ARM處理器作為控制平臺,與使用C51單片機相比,提高了性能,縮短了開發周期;與使用傳統的PC機相比,兼顧了系統功能,又節約了成本,在家庭自動化領域具有較好的理論價值和廣闊的應用前景。 本文在分析國內外家庭自動化發展現狀的基礎上,采用先進的ARM技術,給出了多模式網絡通信方案,解決了家庭自動化系統對不同通信網絡的兼容性問題,在公用電話網語音通信中,提出了通信狀態機模型,討論了電話按鍵檢測和超時無選擇的問題,對語音處理技術的實現進行了研究;在無線網絡通信中,通過短消息的發送和接收,實現了遠程用戶和系統之間的信號傳輸,對系統無線GPRS通信的實現進行了技術研究;在遠程圖像監控的實現中,給出了單幀圖像采集的實現方法,對C/S模式下遠程監控技術進行了研究;為實現系統與終端之間的信號傳輸,給出了家庭內部控制網絡接口設計方案,實現了家電設備控制和自動報警功能,在系統安全問題方面,給出了系統身份認證的實現方法。在此基礎上,構建了一個低成本、高性能、高可靠性的家庭自動化系統。
上傳時間: 2013-06-21
上傳用戶:yy307115118
隨著信息產業和集成電路技術的進步,嵌入式應用領域得到了蓬勃和快速的發展。嵌入式應用開發的重要特點是滿足應用門類的多樣化需求,嵌入式應用的多樣化主要體現在目標機硬件平臺的多樣化,而硬件平臺的多樣化則對嵌入式系統平臺的底層構建提出了嚴格要求,因此不同硬件平臺底層構建研究是嵌入式開發中的一個重要問題。 嵌入式軟硬件平臺的底層構建主要涉及以下幾個部分: 1、嵌入式開發環境構建,涉及交叉編譯環境、交叉調試環境等; 2、嵌入式硬件平臺構建,涉及硬件平臺選型、地址分配等; 3、U.Boot移植,涉及U-Boot啟動分析、移植分析等; 4、嵌入式操作系統移植,涉及uClinux內核結構、移植分析等; 5、驅動程序的開發,涉及硬件分析、Linux下驅動分析等; 與此同時,安全防范系統作為現代化的安全警衛手段,近年來正越來越多地進入各個行業的各種應用領域,智能家居已經成為高科技發展必然的趨勢。另外,運營商寬帶網絡缺乏新的利潤增長點,在已有的寬帶網絡上開發新的業務迫在眉睫。基于ARM的家庭安防網關與局端設備相結合,配備無線報警信號自學習型編解碼收發模塊,完全解決了上述兩個問題。 本文以多媒體綜合報警系統項目中的終端產品XXX型家庭安防網關為依托,以開發流程為主線,就ARM+uClinux嵌入式平臺給出了以上五個嵌入式開發過程中底層平臺構建的關鍵技術解決方案。正文中將依次介紹項目概述、目標硬件平臺分析、交叉開發環境構建以及U-Boot的移植、uClinux的移植和具體驅動程序的開發。
上傳時間: 2013-05-25
上傳用戶:李彥東
近年來,隨著計算機技術及網絡通信技術的發展,在家庭中實現生活的現代化、安全化,提高居住環境等要求,使家庭設備智能化成為未來生活發展的趨勢。 本文提出以嵌入式計算機為主控設備,將家庭網絡中主要的電器設備和服務系統通過藍牙技術構建一個家庭局域網絡,同時把GPRS遠程通信技術加入到智能家居系統中,不僅解決了在家庭內部復雜的布線問題,而且使用戶能夠在遠程控制家庭中的各種服務設備。 本文介紹了課題研究的背景和意義,分析了智能家居系統的發展現狀和趨勢,討論了嵌入式計算機系統和無線網絡技術相結合在智能家居系統中的應用情況。論文闡述了家庭無線網絡控制系統的設計思想和實現方法。 系統選擇S3C2410處理器為家庭無線控制器的主控制芯片,GPRS SIM300為遠程控制芯片,藍牙無線收發模塊101 007為控制各個家用電器的通信模塊。并設計了各模塊間的接口電路。系統完成了Windows CE在嵌入式S3C2410處理器上BSP的定制與開發,著重分析了系統啟動的過程,并成功實現了Windows CE在S3C2410上的移植。通過對家庭內部局域網絡協議藍牙協議和外部移動網絡GPRS的分析,在Windows CE上實現了藍牙主機控制器HCI協議和GPRS通信程序,完成了采用GPRS無線通信模塊與藍牙通信模塊相結合,實現對設備的監控。
上傳時間: 2013-06-24
上傳用戶:moerwang
簡易負離子發生器負離子增加,對人有催眠、止汗、鎮痛、增進食欲,使人精神爽快,消除疲勞的作用。圖1是負離子發生器電路圖。220V交流市電經D1整流后向C3和C2充電,當C2充電至氖泡導通并觸發SCR導通時,C3經SCR、B的L1放電,經B感應升壓后,由D2反向整流得8kV直流高壓使發生器M的分子電離而產生負離子。調整R3的阻值可以改變觸發頻率和輸出電壓。調整時必須注意安全,更換元件需撥下電源插頭
標簽: 負離子發生器
上傳時間: 2013-10-29
上傳用戶:731140412
MSP430系列flash型超低功耗16位單片機MSP430系列單片機在超低功耗和功能集成等方面有明顯的特點。該系列單片機自問世以來,頗受用戶關注。在2000年該系列單片機又出現了幾個FLASH型的成員,它們除了仍然具備適合應用在自動信號采集系統、電池供電便攜式裝置、超長時間連續工作的設備等領域的特點外,更具有開發方便、可以現場編程等優點。這些技術特點正是應用工程師特別感興趣的。《MSP430系列FLASH型超低功耗16位單片機》對該系列單片機的FLASH型成員的原理、結構、內部各功能模塊及開發方法與工具作詳細介紹。MSP430系列FLASH型超低功耗16位單片機 目錄 第1章 引 論1.1 MSP430系列單片機1.2 MSP430F11x系列1.3 MSP430F11x1系列1.4 MSP430F13x系列1.5 MSP430F14x系列第2章 結構概述2.1 引 言2.2 CPU2.3 程序存儲器2.4 數據存儲器2.5 運行控制2.6 外圍模塊2.7 振蕩器與時鐘發生器第3章 系統復位、中斷及工作模式3.1 系統復位和初始化3.1.1 引 言3.1.2 系統復位后的設備初始化3.2 中斷系統結構3.3 MSP430 中斷優先級3.3.1 中斷操作--復位/NMI3.3.2 中斷操作--振蕩器失效控制3.4 中斷處理 3.4.1 SFR中的中斷控制位3.4.2 中斷向量地址3.4.3 外部中斷3.5 工作模式3.5.1 低功耗模式0、1(LPM0和LPM1)3.5.2 低功耗模式2、3(LPM2和LPM3)3.5.3 低功耗模式4(LPM4)22 3.6 低功耗應用的要點23第4章 存儲空間4.1 引 言4.2 存儲器中的數據4.3 片內ROM組織4.3.1 ROM 表的處理4.3.2 計算分支跳轉和子程序調用4.4 RAM 和外圍模塊組織4.4.1 RAM4.4.2 外圍模塊--地址定位4.4.3 外圍模塊--SFR4.5 FLASH存儲器4.5.1 FLASH存儲器的組織4.5.2 FALSH存儲器的數據結構4.5.3 FLASH存儲器的控制寄存器4.5.4 FLASH存儲器的安全鍵值與中斷4.5.5 經JTAG接口訪問FLASH存儲器39第5章 16位CPU5.1 CPU寄存器5.1.1 程序計數器PC5.1.2 系統堆棧指針SP5.1.3 狀態寄存器SR5.1.4 常數發生寄存器CG1和CG25.2 尋址模式5.2.1 寄存器模式5.2.2 變址模式5.2.3 符號模式5.2.4 絕對模式5.2.5 間接模式5.2.6 間接增量模式5.2.7 立即模式5.2.8 指令的時鐘周期與長度5.3 指令組概述5.3.1 雙操作數指令5.3.2 單操作數指令5.3.3 條件跳轉5.3.4 模擬指令的簡短格式5.3.5 其他指令第6章 硬件乘法器6.1 硬件乘法器6.2 硬件乘法器操作6.2.1 無符號數相乘(16位×16位、16位×8位、8位×16位、8位×8位)6.2.2 有符號數相乘(16位×16位、16位×8位、8位×16位、8位×8位)6.2.3 無符號數乘加(16位×16位、16位×8位、8位×16位、8位×8位)6.2.4 有符號數乘加(16位×16位、16位×8位、8位×16位、8位×8位)6.3 硬件乘法器寄存器6.4 硬件乘法器的軟件限制6.4.1 尋址模式6.4.2 中斷程序6.4.3 MACS第7章 基礎時鐘模塊7.1 基礎時鐘模塊7.2 LFXT1與XT27.2.1 LFXT1振蕩器7.2.2 XT2振蕩器7.2.3 振蕩器失效檢測7.2.4 XT振蕩器失效時的DCO7.3 DCO振蕩器7.3.1 DCO振蕩器的特性7.3.2 DCO調整器7.4 時鐘與運行模式7.4.1 由PUC啟動7.4.2 基礎時鐘調整7.4.3 用于低功耗的基礎時鐘特性7.4.4 選擇晶振產生MCLK7.4.5 時鐘信號的同步7.5 基礎時鐘模塊控制寄存器7.5.1 DCO時鐘頻率控制7.5.2 振蕩器與時鐘控制寄存器7.5.3 SFR控制位第8章 輸入輸出端口8.1 引 言8.2 端口P1、P28.2.1 P1、P2的控制寄存器8.2.2 P1、P2的原理8.2.3 P1、P2的中斷控制功能8.3 端口P3、P4、P5和P68.3.1 端口P3、P4、P5和P6的控制寄存器8.3.2 端口P3、P4、P5和P6的端口邏輯第9章 看門狗定時器WDT9.1 看門狗定時器9.2 WDT寄存器9.3 WDT中斷控制功能9.4 WDT操作第10章 16位定時器Timer_A10.1 引 言10.2 Timer_A的操作10.2.1 定時器模式控制10.2.2 時鐘源選擇和分頻10.2.3 定時器啟動10.3 定時器模式10.3.1 停止模式10.3.2 增計數模式10.3.3 連續模式10.3.4 增/減計數模式10.4 捕獲/比較模塊10.4.1 捕獲模式10.4.2 比較模式10.5 輸出單元10.5.1 輸出模式10.5.2 輸出控制模塊10.5.3 輸出舉例10.6 Timer_A的寄存器10.6.1 Timer_A控制寄存器TACTL10.6.2 Timer_A寄存器TAR10.6.3 捕獲/比較控制寄存器CCTLx10.6.4 Timer_A中斷向量寄存器10.7 Timer_A的UART應用 第11章 16位定時器Timer_B11.1 引 言11.2 Timer_B的操作11.2.1 定時器長度11.2.2 定時器模式控制11.2.3 時鐘源選擇和分頻11.2.4 定時器啟動11.3 定時器模式11.3.1 停止模式11.3.2 增計數模式11.3.3 連續模式11.3.4 增/減計數模式11.4 捕獲/比較模塊11.4.1 捕獲模式11.4.2 比較模式11.5 輸出單元11.5.1 輸出模式11.5.2 輸出控制模塊11.5.3 輸出舉例11.6 Timer_B的寄存器11.6.1 Timer_B控制寄存器TBCTL11.6.2 Timer_B寄存器TBR11.6.3 捕獲/比較控制寄存器CCTLx11.6.4 Timer_B中斷向量寄存器第12章 USART通信模塊的UART功能12.1 異步模式12.1.1 異步幀格式12.1.2 異步通信的波特率發生器12.1.3 異步通信格式12.1.4 線路空閑多機模式12.1.5 地址位多機通信格式12.2 中斷和中斷允許12.2.1 USART接收允許12.2.2 USART發送允許12.2.3 USART接收中斷操作12.2.4 USART發送中斷操作12.3 控制和狀態寄存器12.3.1 USART控制寄存器UCTL12.3.2 發送控制寄存器UTCTL12.3.3 接收控制寄存器URCTL12.3.4 波特率選擇和調整控制寄存器12.3.5 USART接收數據緩存URXBUF12.3.6 USART發送數據緩存UTXBUF12.4 UART模式,低功耗模式應用特性12.4.1 由UART幀啟動接收操作12.4.2 時鐘頻率的充分利用與UART的波特率12.4.3 多處理機模式對節約MSP430資源的支持12.5 波特率計算 第13章 USART通信模塊的SPI功能13.1 USART同步操作13.1.1 SPI模式中的主模式13.1.2 SPI模式中的從模式13.2 中斷與控制功能 13.2.1 USART接收/發送允許位及接收操作13.2.2 USART接收/發送允許位及發送操作13.2.3 USART接收中斷操作13.2.4 USART發送中斷操作13.3 控制與狀態寄存器13.3.1 USART控制寄存器13.3.2 發送控制寄存器UTCTL13.3.3 接收控制寄存器URCTL13.3.4 波特率選擇和調制控制寄存器13.3.5 USART接收數據緩存URXBUF13.3.6 USART發送數據緩存UTXBUF第14章 比較器Comparator_A14.1 概 述14.2 比較器A原理14.2.1 輸入模擬開關14.2.2 輸入多路切換14.2.3 比較器14.2.4 輸出濾波器14.2.5 參考電平發生器14.2.6 比較器A中斷電路14.3 比較器A控制寄存器14.3.1 控制寄存器CACTL114.3.2 控制寄存器CACTL214.3.3 端口禁止寄存器CAPD14.4 比較器A應用14.4.1 模擬信號在數字端口的輸入14.4.2 比較器A測量電阻元件14.4.3 兩個獨立電阻元件的測量系統14.4.4 比較器A檢測電流或電壓14.4.5 比較器A測量電流或電壓14.4.6 測量比較器A的偏壓14.4.7 比較器A的偏壓補償14.4.8 增加比較器A的回差第15章 模數轉換器ADC1215.1 概 述15.2 ADC12的工作原理及操作15.2.1 ADC內核15.2.2 參考電平15.3 模擬輸入與多路切換15.3.1 模擬多路切換15.3.2 輸入信號15.3.3 熱敏二極管的使用15.4 轉換存儲15.5 轉換模式15.5.1 單通道單次轉換模式15.5.2 序列通道單次轉換模式15.5.3 單通道重復轉換模式15.5.4 序列通道重復轉換模式15.5.5 轉換模式之間的切換15.5.6 低功耗15.6 轉換時鐘與轉換速度15.7 采 樣15.7.1 采樣操作15.7.2 采樣信號輸入選擇15.7.3 采樣模式15.7.4 MSC位的使用15.7.5 采樣時序15.8 ADC12控制寄存器15.8.1 控制寄存器ADC12CTL0和ADC12CTL115.8.2 轉換存儲寄存器ADC12MEMx15.8.3 控制寄存器ADC12MCTLx15.8.4 中斷標志寄存器ADC12IFG.x和中斷允許寄存器ADC12IEN.x15.8.5 中斷向量寄存器ADC12IV15.9 ADC12接地與降噪第16章 FLASH型芯片的開發16.1 開發系統概述16.1.1 開發技術16.1.2 MSP430系列的開發16.1.3 MSP430F系列的開發16.2 FLASH型的FET開發方法16.2.1 MSP430芯片的JTAG接口16.2.2 FLASH型仿真工具16.3 FLASH型的BOOT ROM16.3.1 標準復位過程和進入BSL過程16.3.2 BSL的UART協議16.3.3 數據格式16.3.4 退出BSL16.3.5 保護口令16.3.6 BSL的內部設置和資源附錄A 尋址空間附錄B 指令說明B.1 指令匯總B.2 指令格式B.3 不增加ROM開銷的模擬指令B.4 指令說明(字母順序)B.5 用幾條指令模擬的宏指令附錄C MSP430系列單片機參數表附錄D MSP430系列單片機封裝形式附錄E MSP430系列器件命名
上傳時間: 2014-04-28
上傳用戶:sssnaxie
有兩種方式可以讓設備和應用程序之間聯系:1. 通過為設備創建的一個符號鏈;2. 通過輸出到一個接口WDM驅動程序建議使用輸出到一個接口而不推薦使用創建符號鏈的方法。這個接口保證PDO的安全,也保證安全地創建一個惟一的、獨立于語言的訪問設備的方法。一個應用程序使用Win32APIs來調用設備。在某個Win32 APIs和設備對象的分發函數之間存在一個映射關系。獲得對設備對象訪問的第一步就是打開一個設備對象的句柄。 用符號鏈打開一個設備的句柄為了打開一個設備,應用程序需要使用CreateFile。如果該設備有一個符號鏈出口,應用程序可以用下面這個例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統本調用希望打開一個設備。這個設備必須有一個符號鏈,以便應用程序能夠打開它。有關細節查看有關Kdevice和CreateLink的內容。在上述調用中第一個參數中前綴后的部分就是這個符號鏈的名字。注意:CreatFile中的第一個參數不是Windows 98/2000中驅動程序(.sys文件)的路徑。是到設備對象的符號鏈。如果使用DriverWizard產生驅動程序,它通常使用類KunitizedName來構成設備的符號鏈。這意味著符號鏈名有一個附加的數字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應用程序需要被覆蓋的I/O,第六個參數(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個輸出接口打開句柄用這種方式打開一個句柄會稍微麻煩一些。DriverWorks庫提供兩個助手類來使獲得對該接口的訪問容易一些,這兩個類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個設備信息集,該信息集包含了特殊類中的所有設備接口信息。應用程序能有用CdeviceInterfaceClass類的一個實例來獲得一個或更多的CdeviceInterface類的實例。CdeviceInterface類是一個單一設備接口的抽象。它的成員函數DevicePath()返回一個路徑名的指針,該指針可以在CreateFile中使用來打開設備。下面用一個小例子來顯示這些類最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在設備中執行I/O操作一旦應用程序獲得一個有效的設備句柄,它就能使用Win32 APIs來產生到設備對象的IRPs。下面的表顯示了這種對應關系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解釋一下設備類成員的Close和CleanUp:CreateFile使內核為設備創建一個新的文件對象。這使得多個句柄可以映射同一個文件對象。當這個文件對象的最后一個用戶級句柄被撤銷后,I/O管理器調用CleanUp。當沒有任何用戶級和核心級的對文件對象的訪問的時候,I/O管理器調用Close。如果被打開的設備不支持指定的功能,則調用相應的Win32將引起錯誤(無效功能)。以前為Windows95編寫的VxD的應用程序代碼中可能會在打開設備的時候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個屬性,因為它將導致沒有特權的用戶企圖打開這個設備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數轉換成IRP域的方法依賴于設備對象的屬性。當設備設置DO_DIRECT_IO標志,I/O管理器將buff鎖住在存儲器中,并且創建了一個存儲在IRP中的MDL域。一個設備可以通過調用Kirp::Mdl來存取MDL。當設備設置DO_BUFFERED_IO標志,設備對象分別通過KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或寫操作獲得buff地址。當設備不設置DO_BUFFERED_IO標志也不設置DO_DIRECT_IO,內核設置IRP 的UserBuffer域來對應ReadFile或WriteFile中的buff參數。然而,存儲區并沒有被鎖住而且地址只對調用進程有效。驅動程序可以使用KIrp::UserBuffer來存取IRP域。對于DeviceIoControl調用,buffer參數的轉換依賴于特殊的I/O控制代碼,它不在設備對象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構造控制代碼。這個宏的其中一個參數指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對應的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數:Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代碼指明METHOD_BUFFERED,系統分配一個單一的緩沖來作為輸入與輸出。驅動程序必須在向輸出緩沖放數據之前拷貝輸入數據。驅動程序通過調用KIrp::IoctlBuffer獲得緩沖地址。在完成時,I/O管理器從系統緩沖拷貝數據到提供給Ring 3級調用者使用的緩沖中。驅動程序必須在結束前存儲拷貝到IRP的Information成員中的數據個數。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數呈現不同的含義。參數InputBuffer被拷貝到一個系統緩沖,這個緩沖驅動程序可以通過調用KIrp::IoctlBuffer。參數OutputBuffer被映射到KMemory對象,驅動程序對這個對象的訪問通過調用KIrp::Mdl來實現。對于METHOD_OUT_DIRECT,調用者必須有對緩沖的寫訪問權限。注意,對METHOD_NEITHER,內核只提供虛擬地址;它不會做映射來配置緩沖。虛擬地址只對調用進程有效。這里是一個用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現在使用一個DeviceIoControl調用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,這里放的是包含有執行操作命令的字符串指針 0, FirmwareRev, //這里是output串指針,存放從驅動程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設備拷貝串到里面并將拷貝的資結束設置到FirmwareRevSize中。在驅動程序中,代碼看起來如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
上傳時間: 2013-10-17
上傳用戶:gai928943