999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2014-08-07 12:08:34
微處理機(jī) 2014年4期
關(guān)鍵詞:服務(wù)信息系統(tǒng)

周 鵬

(92124部隊(duì)計(jì)算機(jī)應(yīng)用技術(shù),大連116023)

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

周 鵬

(92124部隊(duì)計(jì)算機(jī)應(yīng)用技術(shù),大連116023)

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

事件日志;事件源;EventLog類(lèi)

1 引 言

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

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

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

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

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

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

2.1 日志文件

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

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

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

2.2 事件源

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

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

使用事件類(lèi)屬的事件源可以通過(guò)鍵值Category-Count定義該事件源支持的事件類(lèi)屬個(gè)數(shù),通過(guò)鍵值CategoryMessageFile指定類(lèi)屬消息文件位置和名稱(chēng)。對(duì)于使用參數(shù)文件的事件源,可以通過(guò)鍵值ParameterMessageFile指定參數(shù)文件位置和名稱(chēng),多個(gè)文件的需要使用分號(hào)分開(kāi)。

2.3 事件日志服務(wù)

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

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

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

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

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

3 事件日志類(lèi)

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

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

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

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

3.1 創(chuàng)建事件源

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

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

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

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

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

3.2 寫(xiě)入事件日志

向事件日志中寫(xiě)入信息,首先需要?jiǎng)?chuàng)建一個(gè)EventLog類(lèi)的實(shí)例并指定事件源,然后調(diào)用該類(lèi)的靜態(tài)方法WriteEntry()或動(dòng)態(tài)方法WriteEvent()向事件日志中寫(xiě)入信息。

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

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

EventLog^mylog=gcnew EventLog();

mylog->Source="MySource";

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

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

3.3 刪除事件日志

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

4 結(jié)束語(yǔ)

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

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

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

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

[4]Microsoft..NET Framework應(yīng)用程序的基于服務(wù)器的組件[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

猜你喜歡
服務(wù)信息系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
招行30年:從“滿意服務(wù)”到“感動(dòng)服務(wù)”
商周刊(2017年9期)2017-08-22 02:57:56
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
展會(huì)信息
主站蜘蛛池模板: 久久精品丝袜高跟鞋| 欧美综合激情| 亚洲 欧美 偷自乱 图片| 国产99视频免费精品是看6| 亚洲综合欧美在线一区在线播放| 青青青伊人色综合久久| 欧美亚洲欧美| 日本免费a视频| 免费人成黄页在线观看国产| 色婷婷狠狠干| 久久久91人妻无码精品蜜桃HD| 青青热久麻豆精品视频在线观看| 六月婷婷精品视频在线观看 | 免费观看无遮挡www的小视频| 欧美国产日韩在线| 久久久久夜色精品波多野结衣| 91在线精品麻豆欧美在线| 免费激情网站| 91在线视频福利| 久久精品亚洲中文字幕乱码| 2024av在线无码中文最新| 午夜精品影院| 日韩中文欧美| 欧美激情视频二区| 欧美高清三区| 亚洲国产日韩在线观看| 精品成人免费自拍视频| 色婷婷成人网| 国产不卡网| 在线a视频免费观看| 激情亚洲天堂| 亚洲精品在线91| 91毛片网| 亚洲精品亚洲人成在线| 男女男精品视频| 99热这里只有精品免费| 国产精品中文免费福利| 日韩精品无码免费一区二区三区| 亚洲AV色香蕉一区二区| 久久久精品国产SM调教网站| 小说区 亚洲 自拍 另类| 91福利免费视频| 亚洲欧美日韩天堂| 国产99视频在线| 青青草原国产av福利网站| 高潮毛片无遮挡高清视频播放| 91人妻在线视频| 日韩av手机在线| 欧美精品啪啪| 一区二区偷拍美女撒尿视频| 久久一级电影| 亚洲人成网址| 54pao国产成人免费视频| 欧洲成人免费视频| 免费国产黄线在线观看| 无码国产偷倩在线播放老年人| 在线国产综合一区二区三区| 国产本道久久一区二区三区| 无码国内精品人妻少妇蜜桃视频 | 国产精品妖精视频| 亚洲成a人片77777在线播放| 最新精品国偷自产在线| 国产福利在线观看精品| 久久精品日日躁夜夜躁欧美| 日本高清成本人视频一区| 在线观看免费黄色网址| 欧美国产视频| 欧美一区中文字幕| 日韩二区三区| 在线观看欧美国产| 国产91高清视频| 美女国产在线| 日本在线视频免费| 最新国语自产精品视频在| 国产小视频免费观看| 国产成熟女人性满足视频| 亚洲欧洲美色一区二区三区| 国产第一页第二页| 欧美一区二区自偷自拍视频| 成人免费午夜视频| 国产午夜无码专区喷水| 999在线免费视频|