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

        ?

        Windows7系統(tǒng)事件日志分析與編程

        2014-08-07 12:08:34
        微處理機 2014年4期
        關(guān)鍵詞:鍵值日志應用程序

        周 鵬

        (92124部隊計算機應用技術(shù),大連116023)

        Windows7系統(tǒng)事件日志分析與編程

        周 鵬

        (92124部隊計算機應用技術(shù),大連116023)

        事件日志作為一種重要的系統(tǒng)管理工具,主要用于監(jiān)視系統(tǒng)運行情況、查找系統(tǒng)故障根源和分析軟件的執(zhí)行流程等。對軟件開發(fā)者而言,有必要從編程角度分析Windows7系統(tǒng)的事件日志架構(gòu)體系。簡要介紹NET Framework一個重要的事件日志類EventLog,以及使用EventLog類和C++/CLI語言實現(xiàn)事件日志創(chuàng)建、寫入和刪除的編程方法。

        事件日志;事件源;EventLog類

        1 引 言

        Windows7系統(tǒng)有許多應用程序的活動都需要進行記錄。對于大多數(shù)長時間不間斷運行的服務(Service)而言,日志(Log)是管理員了解系統(tǒng)運行情況的最重要途徑之一,如果有問題出現(xiàn),日志也是發(fā)現(xiàn)和定位故障(Trouble Shooting)的第一手資料[1]。在開發(fā)應用程序時,如果使用常規(guī)的調(diào)試工具難以發(fā)現(xiàn)程序出錯的原因,可以使用日志來記錄程序的運行信息,幫助程序員分析查找問題。

        Windows7使用事件日志(Event Log)機制來存儲、記錄、瀏覽和維護日志。該機制從NT 3.5開始得到支持,在Windows7中得到了進一步增強,是Windows平臺上關(guān)鍵系統(tǒng)技術(shù)之一[2]。系統(tǒng)管理員可以使用事件查看器獲得系統(tǒng)和應用程序的重要信息和警告信息。事件日志機制允許寫入應用程序的信息。如果應用程序出現(xiàn)問題,應將錯誤信息寫入事件日志,再用事件查看器讀取這些信息。

        以下將分析Windows7事件日志的架構(gòu)體系,介紹.NET Framework事件日志類以及用C++/CLI代碼片段展示事件日志的編程方法。

        2 事件日志的架構(gòu)體系

        應用程序進程通過遠程過程調(diào)用機制(RPC,Remote Procedure Call)向系統(tǒng)的服務進程發(fā)出操作事件日志的調(diào)用請求,經(jīng)過RPC機制的一系列操作后,服務進程調(diào)用系統(tǒng)API函數(shù)WriteToLog()將事件日志記錄寫入日志文件。事件日志機制的基本架構(gòu)圖如圖1所示,左側(cè)表示調(diào)用日志記錄服務的應用程序進程,中間表示承擔日志服務的服務進程,右側(cè)表示集中存儲日志記錄的日志文件。

        圖1 事件日志機制的基本架構(gòu)圖

        2.1 日志文件

        Windows7有三個默認的事件日志:一個應用程序事件日志,一個安全事件日志,一個系統(tǒng)事件日志。除這些日志外,還可能會有應用程序安裝到服務器上的其它日志,以及用戶創(chuàng)建的自定義日志。每一類事件日志信息分別保存在一個文件中,如應用程序日志、安全日志和系統(tǒng)日志的文件分別是AppEvent.Evt、SecEvent.Evt和SysEvent.Evt,這些文件存放在用于存儲注冊表文件和系統(tǒng)配置信息的%SystemRoot%\SYSTEM32\CONFIG\目錄中。需要注意的是,從啟動到關(guān)閉,系統(tǒng)都以獨占(Exclusive)方式使用系統(tǒng)日志文件,刪除或其它寫訪問都會被拒絕。

        查看事件日志服務的注冊表配置,會注意到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl-Set\Services\EventLog下的幾個表項帶有指向特定文件的配置。系統(tǒng)日志文件用于系統(tǒng)和設備驅(qū)動程序,應用程序和服務則將事件寫入應用程序日志,安全日志是應用程序的只讀日志。操作系統(tǒng)的審計功能使用安全日志。每個應用程序還可以創(chuàng)建定制的類別和日志文件,在其中寫入事件日志項。

        管理工具“事件查看器”用于瀏覽和管理事件日志,是監(jiān)視系統(tǒng)運行狀況以及在出現(xiàn)問題時解決問題的必不可少的工具。在事件日志記錄中通常含有類型、級別、日期和時間、來源、事件ID、任務類別等信息。

        2.2 事件源

        在向一個事件日志寫入日志前,必須注冊一個事件源,就是在事件日志的注冊表鍵下建立一個子鍵,并賦予子鍵合適的鍵值。例如,在應用程序日志中注冊了名為EventLog_Source的事件源,注冊表入口為HKEY_LOCAL_MACHINE\SYSTEM\Current-ControlSet\Services\EventLog\Application\EventLog_ Source,鍵EventMessageFile的鍵值為%SystemRoot%\System32\wersvc.dll,鍵TypesSupported的鍵值為0x00000007。

        其中,鍵EventMessageFile用來指定這個事件源消息文件(Message File)的位置和名稱。消息文件就是包含消息資源(message resource)的文件,消息資源與字符串資源和對話框資源的性質(zhì)是相同的,不過它的作用是充當模板來格式化日志事件或其它消息。消息資源是由消息源文件通過消息編譯器(Message Compiler)編譯成二進制格式,然后連接到EXE文件或DLL文件中的。一個事件源必須至少有一個消息文件。鍵TypesSupported是16位無符號整數(shù),用來指定該事件源所支持的事件類型。

        使用事件類屬的事件源可以通過鍵值Category-Count定義該事件源支持的事件類屬個數(shù),通過鍵值CategoryMessageFile指定類屬消息文件位置和名稱。對于使用參數(shù)文件的事件源,可以通過鍵值ParameterMessageFile指定參數(shù)文件位置和名稱,多個文件的需要使用分號分開。

        2.3 事件日志服務

        Windows系統(tǒng)默認啟動的服務中包含負責事件日志的服務Event Log,對它的描述是“此服務管理事件和事件日志。它支持日志記錄事件、查詢事件、訂閱事件、歸檔事件日志以及管理事件元數(shù)據(jù)。它可以用XML和純文本兩種格式顯示事件。停止該服務可能危及系統(tǒng)的安全性和可靠性”。在Windows7中,事件日志服務運行在進程svchost.exe中,是自動啟動并且不可停止的。svchost.exe進程是關(guān)鍵系統(tǒng)進程,使用任務管理器也無法終止該進程,如果使用其它工具強行中止,那么系統(tǒng)檢測到后會自動關(guān)機。

        事件日志服務的功能是管理和維護事件日志文件,并通過RPC機制向應用程序提供各種日志服務,包括添加、刪除日志記錄,獲取日志信息,備份日志文件等。

        2.4 事件日志的數(shù)據(jù)組織

        作為一種通用的日志記錄機制,事件日志必須以一種統(tǒng)一的方式組織和存儲不同信息量和不同結(jié)構(gòu)的事件記錄。Windows7將事件的格式信息與實際數(shù)據(jù)分別存儲,并將二者通過一個ID聯(lián)系起來。其中,事件的格式信息存儲在消息文件中,事件描述中的變化部分存儲在日志文件中。

        事件日志以表格的形式存儲日志記錄,表格的每一行對應一條日志記錄,存儲著這條記錄的基本信息和附屬信息的偏移地址。事件日志文件中的數(shù)據(jù)表結(jié)構(gòu)用EVENTLOGRECORD結(jié)構(gòu)來描述,每個字段相當于表格的一列。該數(shù)據(jù)結(jié)構(gòu)沒有包含事件源和計算機名信息,因為事件源和計算機名是在上一層次記錄的,當打開一個事件日志時就已經(jīng)指定了這些信息,隨后的所有操作都是針對該事件日志進行的。

        3 事件日志類

        為了便于在Windows7的應用程序中使用和定制事件日志,.NET Framework的System.Diagnostics命名空間中提供了用于實現(xiàn)事件日志操作的類,包括EventLog、EventLogEntry、EventLogInstaller等[3]。其中,EventLog類是事件日志的核心。EventLog類提供在本地或遠程計算機上寫入事件日志、讀取事件日志項、創(chuàng)建和刪除事件日志與事件日志源的功能[4]。

        EventLog類的重要屬性包括:①Entries:讀取事件日志;②Log:指定用于讀寫事件日志的記錄;③LogDisplayName:返回日志的顯示名稱;④Machine Name指定讀寫日志項的系統(tǒng);⑤Source:指定要寫入日志項的源。

        EventLog類的重要方法包括:①CreateEvent Source():創(chuàng)建一個新的事件源和一個新的日志文件;②DeleteEventSource():刪除一個事件源;③Source Exists():驗證事件源是否存在;④WriteEntry()或WriteEvent():寫入事件日志項;⑤Clear():刪除事件日志的所有項;⑥D(zhuǎn)elete():刪除一個完整的事件日志。

        以下將展示使用EventLog類和C++/CLI語言實現(xiàn)事件日志的創(chuàng)建、寫入和刪除的編程方法。

        3.1 創(chuàng)建事件源

        事件源的名稱是寫入事件的應用程序標識符。在讀取事件日志時,該信息有助于識別事件的日志項,將它們映射到應用程序類別上。事件源的名稱可以任意命名,如果設置事件日志的名稱為Application,就會把事件日志項寫入應用程序日志。設置不同的應用程序日志名可以創(chuàng)建其自己的日志。

        在寫入事件日志之前,必須創(chuàng)建一個事件源。為此,可以使用EventLog類或EventLogInstaller類的CreateEventSource()方法。

        以下的代碼首先驗證事件源MySource是否存在,若不存在,則實例化EventSourceCreationData類型對象,定義事件源名字MySource和日志名字My-Log,然后調(diào)用CreateEventSource()方法創(chuàng)建事件源MySource,產(chǎn)生的事件將全部寫入MyLog事件日志。

        需要注意的是,創(chuàng)建事件源時需要有管理員權(quán)限。

        使用EventSourceCreationData類型的屬性參數(shù),可以為事件日志指定更多的重要信息。屬性Source可獲取或設置事件源的名稱;屬性LogName定義事件日志項寫入的日志名稱,默認為應用程序日志;屬性MachineName定義讀寫日志項的系統(tǒng)或者遠程主機;屬性CategoryResourceFile定義類別的資源文件,類別可以用于過濾單一源中的事件日志項;屬性CategoryCount定義類別資源文件中的類別數(shù)量;屬性MessageResource File指定應用程序在事件日志中寫入資源文件定義的信息;ParameterResourceFile指定在資源文件中定義字符串為資源文件的信息提供參數(shù)。

        3.2 寫入事件日志

        向事件日志中寫入信息,首先需要創(chuàng)建一個EventLog類的實例并指定事件源,然后調(diào)用該類的靜態(tài)方法WriteEntry()或動態(tài)方法WriteEvent()向事件日志中寫入信息。

        WriteEntry()的參數(shù)是事件源,該事件源也可以用EventLog類的構(gòu)造函數(shù)設置。在下面的構(gòu)造函數(shù)中,定義了日志名、本地機器和事件源名。接著將信息作為WriteEntry()的第一個參數(shù),寫入三個時間日志項。第二個參數(shù)是EventLogEntryType類型的枚舉。使用EventLogEntryType,可以制定時間日志項的嚴重級別。其值可以是Information、Warning、Error、用于審計的FailureAudit和SuccessAudit。事件查看器根據(jù)該類型會顯示不同的圖標。第三個參數(shù)指定與應用程序相關(guān)的事件ID,它可以由應用程序使用。另外,還可以傳送與應用程序相關(guān)的二進制數(shù)據(jù)和類別。

        以下代碼創(chuàng)建了一個EventLog類的實例并指定事件源,然后向事件日志中寫入信息。

        EventLog^mylog=gcnew EventLog();

        mylog->Source="MySource";

        mylog->W(wǎng)riteEntry("Writing to event log.");Console::WriteLine("Writing to event log...");

        寫入事件日志后,用戶可以通過事件查看器監(jiān)視在應用程序日志里記錄的名為MyLog的事件。

        3.3 刪除事件日志

        EventLog類提供靜態(tài)方法Delete()用于刪除日志記錄項,如果要刪除已經(jīng)創(chuàng)建的事件源,需要調(diào)用靜態(tài)方法DeleteEventSource()。對EventLog類本身直接調(diào)用靜態(tài)方法,而不必創(chuàng)建該類的實例。

        4 結(jié)束語

        事件日志是管理員進行系統(tǒng)維護的主要工具之一,也是一種簡單有效的軟件調(diào)試工具。掌握Windows7系統(tǒng)的事件日志機制和編程方法,利用事件日志信息跟蹤軟件的運行過程,分析其執(zhí)行路線,對于分析系統(tǒng)運行情況和尋找軟件故障的根源有重要意義。

        [1]張銀奎.軟件調(diào)試[M].北京:電子工業(yè)出版社,2008.

        [2]尹成,顏成鋼.Visual C++2010開發(fā)權(quán)威指南[M].北京:人民郵電出版社,2010.

        [3]Christian Nagel,Bill Evjen,Jay Glynn.C#高級編程(第6版)[M].北京:清華大學出版社,2010.

        [4]Microsoft..NET Framework應用程序的基于服務器的組件[DB/OL].(2010),MSDN Library.

        Analysis and Programm ing of Event Log in W indows7 System

        ZHOU Peng
        (Computer Application Technology,Unit92124 of PLA,Dalian 116023,China)

        As an important tool for system management,Event Log ismainly used to monitor the operation of the system,find the cause of system failures,and analyse the excuting process of software.For software developer,it is necessary to analyse the Event Log architecture of Windows7 from the programming point of view.EventLog,an important class of Event Log in NET Framework,is briefly introduced,and the programmingmethodswhich are used to create,write and delete Event Logwith class EventLog and C++/CLI language,are demonstrated aswell.

        Event Log;Event Source;Class EventLog

        10.3969/j.issn.1002-2279.2014.04.022

        TP311.1

        :A

        :1002-2279(2014)04-0068-03

        周鵬(1978-),男,山東膠州人,工程師,碩士,主研方向:分布式系統(tǒng)、軟件工程。

        2013-12-30

        猜你喜歡
        鍵值日志應用程序
        一名老黨員的工作日志
        華人時刊(2021年13期)2021-11-27 09:19:02
        非請勿進 為注冊表的重要鍵值上把“鎖”
        扶貧日志
        心聲歌刊(2020年4期)2020-09-07 06:37:14
        刪除Win10中自帶的應用程序
        電腦報(2019年12期)2019-09-10 05:08:20
        游學日志
        一鍵直達 Windows 10注冊表編輯高招
        電腦愛好者(2017年9期)2017-06-01 21:38:08
        一種基于粗集和SVM的Web日志挖掘模型
        關(guān)閉應用程序更新提醒
        電腦迷(2012年15期)2012-04-29 17:09:47
        三星電子將開設應用程序下載商店
        注冊表值被刪除導致文件夾選項成空白
        未满十八勿入av网免费| 国产不卡在线视频观看| 18禁裸体动漫美女无遮挡网站| 久久婷婷人人澡人人爽人人爱| 在线亚洲人成电影网站色www| 亚洲专区一区二区在线观看| 视频福利一区二区三区| 按摩师玩弄少妇到高潮av| 99国产精品99久久久久久| 国产精品制服| 国产无套视频在线观看香蕉| 视频精品亚洲一区二区| 激情五月天在线观看视频| 成人精品一区二区三区电影| 东京热加勒比无码少妇| 亚洲欧美日韩国产精品网| 久久综合老鸭窝色综合久久 | 免费欧洲毛片a级视频老妇女| 国精品无码一区二区三区在线| 国内成人精品亚洲日本语音| 日韩精品高清不卡一区二区三区 | 中文字幕精品亚洲无线码二区| 蓝蓝的天空,白白的云| 免费日本一区二区三区视频| 国产精品伦一区二区三级视频| 亚洲视频99| 欧美亚洲国产片在线播放| 亚洲午夜无码久久yy6080| 亚洲精品精品日本日本| 亚洲一区二区日韩精品在线| 国内最真实的xxxx人伦| 久久亚洲精品ab无码播放| 日韩精品一区二区亚洲av性色| 日本黄色影院一区二区免费看 | 亚洲av日韩av激情亚洲| 婷婷中文字幕综合在线| 成人国产永久福利看片| 免费人成黄页在线观看国产| 国产精品高清网站| 亚洲av之男人的天堂网站| 波多野结衣一区二区三区免费视频|