国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于API Hook技術(shù)的虛擬串口的實(shí)現(xiàn)

2010-05-11 03:48劉洋吳熠銘黃可嘉林創(chuàng)魯
自動(dòng)化與信息工程 2010年3期
關(guān)鍵詞:串口無(wú)線(xiàn)監(jiān)控

劉洋 吳熠銘 黃可嘉 林創(chuàng)魯

1 引言

串行通信接口(簡(jiǎn)稱(chēng)串口),按電氣標(biāo)準(zhǔn)及協(xié)議可分為RS-232-C、RS-422與RS-485,無(wú)論那種標(biāo)準(zhǔn),都只對(duì)接口的電氣特性做出規(guī)定,其軟件協(xié)議都是一致的。串口作為工業(yè)控制領(lǐng)域最常用的一種通訊接口,自1970年標(biāo)準(zhǔn)化至今已近40年時(shí)間[1]。然而隨著無(wú)線(xiàn)技術(shù)的日益發(fā)展,無(wú)線(xiàn)傳輸技術(shù)應(yīng)用越來(lái)越被各行各業(yè)所接受。無(wú)線(xiàn)監(jiān)控作為一個(gè)特殊使用方式也逐漸被廣大用戶(hù)看好,其安裝方便、靈活性強(qiáng)、性?xún)r(jià)比高等特性,使更多行業(yè)的監(jiān)控系統(tǒng)樂(lè)于采用無(wú)線(xiàn)監(jiān)控方式,用于建立被監(jiān)控點(diǎn)和監(jiān)控中心之間的連接。無(wú)線(xiàn)監(jiān)控技術(shù)已經(jīng)在現(xiàn)代化住宅小區(qū)、交通、運(yùn)輸、水利、航運(yùn)、治安、消防等領(lǐng)域得到了廣泛的應(yīng)用。但現(xiàn)有的很多成熟應(yīng)用系統(tǒng)依然使用RS232方式,有迫切的需要把它們從傳統(tǒng)的有線(xiàn)方式遷移到無(wú)線(xiàn)監(jiān)控領(lǐng)域,虛擬串口于是應(yīng)運(yùn)而生。

2 虛擬串口

串口通訊,不論RS-232-C、RS-422或是RS-485標(biāo)準(zhǔn),其通訊協(xié)議都是一樣的。對(duì)于 Windows系統(tǒng)而言,都叫做COM口。虛擬串口并不是物理上存在的串口,而是使用虛擬手段模擬出來(lái)的,具備物理串口全部的邏輯特征。使用戶(hù)程序在操作上無(wú)法判斷所使用的究竟是物理串口還是虛擬串口。

2.1 常規(guī)的虛擬串口

常規(guī)的虛擬串口(如圖1所示)是通過(guò)虛擬驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)的。它是在操作系統(tǒng)上利用虛擬I/O技術(shù)建立虛擬串口設(shè)備來(lái)模擬一個(gè)串口。它的特點(diǎn)是全局性和便捷性。但其缺點(diǎn)也相當(dāng)明顯,就是穩(wěn)定性欠佳。

圖1 普通虛擬串口結(jié)構(gòu)

2.2 API Hook鉤子技術(shù)

API Hook(鉤子)技術(shù)是消息處理中的一個(gè)環(huán)節(jié),用于監(jiān)控消息在系統(tǒng)中的傳遞,并在這些消息到達(dá)最終的消息處理過(guò)程前,處理某些特定的消息。簡(jiǎn)單的說(shuō)就是改變程序流程的技術(shù)。它有一個(gè)重要原則:被Hook的API的原有功能不能受到任何影響。如果API被Hook之后,其原有功能失效,這樣操作不能稱(chēng)之為 Hook,而是替換取代。因?yàn)椴僮飨到y(tǒng)的正常功能受到影響,甚至可能會(huì)引發(fā)系統(tǒng)崩潰。

2.3 基于API Hook技術(shù)的虛擬串口

圖2為本文所提出的創(chuàng)新型API Hook虛擬串口,它采用API Hook技術(shù)[2],避免使用系統(tǒng)內(nèi)核驅(qū)動(dòng)程序,很好的解決了常規(guī)虛擬串口的穩(wěn)定性問(wèn)題。因?yàn)锳PI Hook虛擬串口是工作在用戶(hù)態(tài)的,它通過(guò) API Hook手段,改變系統(tǒng)API函數(shù)的功能,重定向串口數(shù)據(jù),“欺騙”用戶(hù)程序來(lái)實(shí)現(xiàn)的[3]。而且由于在Windows系統(tǒng)上,程序空間的獨(dú)立性,使得基于API Hook虛擬串口只針對(duì)特定程序有效,這能大幅提高系統(tǒng)的安全性和可靠性。

圖2 基于API Hook技術(shù)的虛擬串口結(jié)構(gòu)

基于API Hook技術(shù)的虛擬串口和普通虛擬串口的技術(shù)優(yōu)勢(shì)比較如表1所示:

表1 技術(shù)優(yōu)勢(shì)比較表

2.4 基于API Hook的虛擬串口的實(shí)現(xiàn)

API Hook虛擬串口使用API Hook技術(shù),在系統(tǒng)用戶(hù)層注入一個(gè)接口模塊。這個(gè)接口模塊在系統(tǒng)中起到 Filter(過(guò)濾)的作用。對(duì)于普通的文件操作全部放行(即交由操作系統(tǒng)來(lái)處理),而針對(duì)虛擬串口的操作都全部攔截下來(lái),由Pipe(管道,Windows下進(jìn)程間通訊最常使用的技術(shù)手段)接口發(fā)送給用戶(hù)預(yù)先定義好的I/O設(shè)備來(lái)處理。這里的I/O設(shè)備是廣義上的I/O設(shè)備,即可以是網(wǎng)絡(luò),文件,USB,串口,虛擬I/O等。采用此方案的虛擬串口,實(shí)現(xiàn)了形式上的多樣化,不再局限于常規(guī)的串口轉(zhuǎn)以太網(wǎng),還能實(shí)現(xiàn)串口轉(zhuǎn)文件,串口轉(zhuǎn)串口,串口數(shù)據(jù)廣播等多項(xiàng)功能。

3 系統(tǒng)架構(gòu)

基于API Hook的虛擬串口軟件主要由3個(gè)獨(dú)立的模塊實(shí)現(xiàn):加載器(Loader),虛擬串口接口,管道(Pipe)模塊:

(1)、加載器:負(fù)責(zé)創(chuàng)建目標(biāo)進(jìn)程和加載虛擬串口接口。

(2)、虛擬串口接口:所有虛擬串口的操作都在這個(gè)模塊實(shí)現(xiàn),包括注冊(cè)虛擬串口設(shè)備,創(chuàng)建 Pipe,初始化虛擬串口,讀寫(xiě)虛擬串口,卸載關(guān)閉接口,共5部分。

(3)、Pipe模塊:由虛擬串口接口所創(chuàng)建,單獨(dú)負(fù)責(zé)與外部I/O設(shè)備通訊。

系統(tǒng)工作流程如圖3所示。

3.1 加載虛擬串口接口

基于API Hook技術(shù)的虛擬串口是以DLL(動(dòng)態(tài)鏈接庫(kù))的形式存在的,需要加載至目標(biāo)用戶(hù)程序的代碼空間才能發(fā)揮作用,使用加載器 Loader就能達(dá)到這一目的。

Loader的結(jié)構(gòu)比較簡(jiǎn)單:通過(guò) CreateProcess帶CREATE_SUSPENDED標(biāo)志創(chuàng)建并掛起目標(biāo)進(jìn)程,讓目標(biāo)程序暫停運(yùn)行后,通過(guò) WriteProcessMemory寫(xiě)入啟動(dòng)代碼,然后調(diào)用CreateRemoteThread以執(zhí)行LoadLibrary命令來(lái)加載虛擬串口接口庫(kù),最后調(diào)用ResumeThread來(lái)繼續(xù)執(zhí)行用戶(hù)程序,至此加載過(guò)程全部完成,加載器停止運(yùn)行。

3.2 注冊(cè)虛擬串口設(shè)備

在加載器調(diào)用完LoadLibrary命令后,虛擬串口接口即進(jìn)入執(zhí)行狀態(tài)。首先它需要向注冊(cè)表登記虛擬串口的相關(guān)信息,其中最重要的就是虛擬串口的設(shè)備名字,其形式為COMx(x是1~99的整數(shù))。然后通過(guò)API Hook技術(shù),修改系統(tǒng)API函數(shù)的入口,需要偵聽(tīng)并處理 CreateFile, Set(Get)CommMask,ReadFile,WriteFile,CloseHandle和PurgeComm這7個(gè)API函數(shù)。它們依次對(duì)應(yīng):打開(kāi),設(shè)置(查詢(xún)),讀取,寫(xiě)入,關(guān)閉和刷新緩存的操作。完成這一步驟后,虛擬串口就可正常進(jìn)入讀寫(xiě)流程了。

圖3 系統(tǒng)工作流程圖

3.3 創(chuàng)建 Pipe接口

Pipe是由操作系統(tǒng)提供的一種IPC(InterProcess Communication 進(jìn)程間通信)接口。這里使用的是Named Pipe(命名管道)。它可以在同一臺(tái)機(jī)器的不同進(jìn)程間以及不同機(jī)器上的不同進(jìn)程間進(jìn)行雙向通信(需使用UNC命名規(guī)范)。管道的最大好處在于:它可以象對(duì)普通文件一樣進(jìn)行操作,也就是說(shuō),它可以使用ReadFile和WriteFile函數(shù)進(jìn)行與底層實(shí)現(xiàn)無(wú)關(guān)的讀寫(xiě)操作,這與串口讀寫(xiě)操作完全一致。故使用此方法能簡(jiǎn)化開(kāi)發(fā)的工作量和提高程序的兼容性。

3.4 虛擬串口的讀寫(xiě)流程

虛擬串口的讀寫(xiě)處理流程如圖4所示:第一步,按照用戶(hù)程序所指定的參數(shù)設(shè)置虛擬串口設(shè)備。由于虛擬串口并非物理串口,所以它沒(méi)有波特率、數(shù)據(jù)位、起始位、停止位和硬件流等設(shè)置,故不論GetCommMask和SetCommMask如何配置,其接口函數(shù)均返回正確即可。第二步,通過(guò)偵聽(tīng)函數(shù)來(lái)監(jiān)視用戶(hù)程序是否將要操作一個(gè)串口設(shè)備,如為非虛擬串口設(shè)備,則調(diào)用操作系統(tǒng)自身的系統(tǒng) API函數(shù)來(lái)處理,如為虛擬串口設(shè)備則通過(guò) Pipe來(lái)轉(zhuǎn)發(fā)數(shù)據(jù),而Pipe的另一端按照要求處理數(shù)據(jù)。最后系統(tǒng)重新進(jìn)入第二步,繼續(xù)偵聽(tīng)串口操作,直到用戶(hù)程序請(qǐng)求關(guān)閉設(shè)備為止。

圖4 虛擬串口讀寫(xiě)處理流程圖

4 結(jié)論

通過(guò)API Hook虛擬串口實(shí)現(xiàn)的用戶(hù)層虛擬串口設(shè)備,不僅系統(tǒng)性能不受影響,還無(wú)需注冊(cè)系統(tǒng)設(shè)備,沒(méi)有驅(qū)動(dòng)級(jí)串口的兼容問(wèn)題,且能替換現(xiàn)有物理串口(虛擬轉(zhuǎn)發(fā)),是遷移現(xiàn)有串口接入軟件到網(wǎng)絡(luò)接入方式的最優(yōu)方案。

[1] Wikipedia. “Serial port”http://en.wikipedia.org/ wiki/Serial_port

[2] Holy Father. "Hooking Windows API - Technics of hooking API functions on Windows 1.1”

[3] Windows Developer Center (MSDN). “Hooks”http://msdn.microsoft.com/en-us/library/ms632589(VS.85).aspx

[4] Eltima Software Inc. “Virtual Serial Port Driver”(vspd)http://wiki.eltima.com/user-guides/vspd/intro.html

猜你喜歡
串口無(wú)線(xiàn)監(jiān)控
The Great Barrier Reef shows coral comeback
《無(wú)線(xiàn)互聯(lián)科技》征稿詞(2021)
淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
你被監(jiān)控了嗎?
Zabbix在ATS系統(tǒng)集中監(jiān)控中的應(yīng)用
無(wú)線(xiàn)追蹤3
基于ARM的無(wú)線(xiàn)WiFi插排的設(shè)計(jì)
一種PP型無(wú)線(xiàn)供電系統(tǒng)的分析
USB接口的多串口數(shù)據(jù)并行接收方法探索
串口技術(shù)的實(shí)物調(diào)試和虛擬仿真聯(lián)合教學(xué)模式
南昌县| 云南省| 河曲县| 遂昌县| 汾西县| 阳谷县| 辛集市| 濮阳县| 弥渡县| 宁波市| 黎平县| 大港区| 翁牛特旗| 弥勒县| 柞水县| 泽库县| 新绛县| 昭苏县| 临汾市| 沽源县| 武平县| 广饶县| 香河县| 门头沟区| 安国市| 南郑县| 枞阳县| 伊通| 将乐县| 若羌县| 光泽县| 佛冈县| 嘉黎县| 庆云县| 江门市| 西丰县| 内黄县| 蒲江县| 隆昌县| 平邑县| 托克托县|