亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2010-05-11 03:48:36劉洋吳熠銘黃可嘉林創(chuàng)魯
        自動化與信息工程 2010年3期
        關(guān)鍵詞:用戶程序串口無線

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

        1 引言

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

        2 虛擬串口

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

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

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

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

        2.2 API Hook鉤子技術(shù)

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

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

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

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

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

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

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

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

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

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

        (1)、加載器:負責創(chuàng)建目標進程和加載虛擬串口接口。

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

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

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

        3.1 加載虛擬串口接口

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

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

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

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

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

        3.3 創(chuàng)建 Pipe接口

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

        3.4 虛擬串口的讀寫流程

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

        圖4 虛擬串口讀寫處理流程圖

        4 結(jié)論

        通過API Hook虛擬串口實現(xiàn)的用戶層虛擬串口設(shè)備,不僅系統(tǒng)性能不受影響,還無需注冊系統(tǒng)設(shè)備,沒有驅(qū)動級串口的兼容問題,且能替換現(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

        猜你喜歡
        用戶程序串口無線
        《無線互聯(lián)科技》征稿詞(2021)
        淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
        變速箱控制系統(tǒng)Bootloader設(shè)計與實現(xiàn)
        無線追蹤3
        基于ARM的無線WiFi插排的設(shè)計
        電子制作(2018年23期)2018-12-26 01:01:08
        嵌入式設(shè)備遠程升級方案設(shè)計
        ADF7021-N在無線尋呼發(fā)射系統(tǒng)中的應(yīng)用
        電子制作(2016年15期)2017-01-15 13:39:03
        USB接口的多串口數(shù)據(jù)并行接收方法探索
        基于藍牙串口適配器的GPS接收機與AutoCAD的實時無線通信
        地礦測繪(2015年3期)2015-12-22 06:27:26
        C8051F410單片機BootLoader的實現(xiàn)
        久久精品国产亚洲一区二区| 天堂蜜桃视频在线观看| 国产亚洲欧洲aⅴ综合一区| 亚洲乱码中文字幕在线播放| 给你免费播放的视频| 伊人久久大香线蕉av一区| 精品国产制服丝袜高跟| 不卡a v无码在线| 美腿丝袜美腿国产在线| 一区二区三区高清视频在线| 美女扒开内裤让我捅的视频| 国产做国产爱免费视频| 国产高清在线精品一区| 亚洲AV秘 无套一区二区三区| 国产精品麻豆一区二区三区| 免费a级毛片在线播放不收费| 国产亚洲日韩在线三区| 亚洲国产精品久久久性色av| 我的美艳丝袜美腿情缘| 粉嫩av国产一区二区三区| 色狠狠一区二区三区香蕉| 99久久久69精品一区二区三区 | 久久综合激情的五月天| 久久狠狠爱亚洲综合影院| 国产麻豆md传媒视频| 国产偷国产偷亚洲欧美高清| 国产免费一区二区三区在线观看 | 日本一区中文字幕在线播放| 公和我做好爽添厨房| 日日猛噜噜狠狠扒开双腿小说| 国产精品欧美韩国日本久久| 水蜜桃视频在线观看入口| 在线观看av网站永久| 久久久无码中文字幕久...| 亚洲欧美日韩高清一区二区三区| 视频区一区二在线观看| 先锋中文字幕在线资源| 亚洲国产精品尤物yw在线观看| 亚洲中文字幕第二十三页| 亚洲av日韩av卡二| 国产精品一区二区在线观看|