專家門診:如何正確入門Windows系統(tǒng)驅(qū)動(dòng)開發(fā)領(lǐng)域
我一直認(rèn)為,編寫程序是一件很奇妙的事情,它可以帶來(lái)創(chuàng)造和控制的欲望。每當(dāng)我閱讀或者編寫一段代碼時(shí),腦子里自然地就會(huì)想象這段代碼怎樣完成預(yù)定的邏輯。對(duì)于代碼編寫者或者維護(hù)者來(lái)說(shuō),真正見功夫的地方不在于代碼本身,而在于對(duì)下層開發(fā)平臺(tái)的理解和駕馭能力,可能這就是俗稱的“內(nèi)功”,這個(gè)觀點(diǎn)既適用于應(yīng)用軟件程序員,也適用于系統(tǒng)軟件程序員。
本期門診特邀AMD公司知名Windows內(nèi)核驅(qū)動(dòng)開發(fā)領(lǐng)域?qū)<覐埮逑壬?,針?duì)WDM\WDF框架、USB設(shè)備驅(qū)動(dòng)、設(shè)備驅(qū)動(dòng)安裝等問(wèn)題給予解答,歡迎網(wǎng)友積極提問(wèn),與專家一起討論!
專家著作:《竹林蹊徑:深入淺出Windows驅(qū)動(dòng)開發(fā)》
本期門診鏈接:http://doctor.51cto.com/develop-213.html
本期專家:
張佩
Q:324120
windows 內(nèi)核驅(qū)動(dòng)是個(gè)什么情況?代碼嗎? 像一般的那種比較難找的USB驅(qū)動(dòng)是該怎么驅(qū)上去的呢?謝謝
A:張佩
驅(qū)動(dòng)兩個(gè)字是英文driver的翻譯,料來(lái)是很達(dá)意的。打比方說(shuō),一輛汽車,你買車會(huì)綜合考慮各種參數(shù),驅(qū)動(dòng)是發(fā)動(dòng)機(jī)那一環(huán),最基礎(chǔ)和頂重要的。其次要考量一下外形或內(nèi)部裝修等,這就好像ui程序。開車的人一般不擔(dān)心發(fā)動(dòng)機(jī)會(huì)出故障,而更當(dāng)心車漆不要被刮了這類問(wèn)題。因?yàn)榘l(fā)動(dòng)機(jī)不容易壞,果真壞了,車子就非常危險(xiǎn)。 驅(qū)動(dòng)程序也一樣。你問(wèn)驅(qū)動(dòng)是代碼嗎?當(dāng)然是了,只不過(guò)是頂重要和關(guān)鍵的代碼,在內(nèi)核環(huán)境中運(yùn)行,負(fù)責(zé)處理用戶程序請(qǐng)求。OS在內(nèi)核中提供了很豐富的接口,用戶程序永遠(yuǎn)無(wú)法使用它們,但Driver會(huì)仰賴它們來(lái)實(shí)現(xiàn)自己的各種功能。特別是和硬件交互。比如U盤讀寫,在用戶程序而言,到Read\WriteFile就算結(jié)束了,殊不知在內(nèi)核還有重重關(guān)口要過(guò)。說(shuō)到底,驅(qū)動(dòng)程序是NT內(nèi)核的補(bǔ)充,它像打到磚墻里的釘子一樣,被OS加載后,就成了和內(nèi)核一體的了。內(nèi)核關(guān)鍵而脆弱,能實(shí)現(xiàn)強(qiáng)大功能,也會(huì)不經(jīng)然給個(gè)藍(lán)屏。所以安全第一,次而功能。
Q:CHO堯子
張老師:
您好。首先,我想問(wèn)的針對(duì)筆記本電腦的顯卡驅(qū)動(dòng)問(wèn)題,為什么有時(shí)候無(wú)法安裝顯卡驅(qū)動(dòng),但是顯卡并沒(méi)有壞,在官網(wǎng)上也有驅(qū)動(dòng),型號(hào)是HP-CQ45,還有什么是WDM\WDF框架?我以前沒(méi)有聽說(shuō)過(guò)呢!我還可以問(wèn)下關(guān)于瀏覽器方面的問(wèn)題么,有時(shí)候?yàn)g覽器總是出現(xiàn)自動(dòng)崩潰,沒(méi)有病毒,網(wǎng)速正常,是什么原因?qū)е碌模?/p>
A:張佩
你好。顯卡型號(hào)特別多,驅(qū)動(dòng)安裝需對(duì)號(hào)入座,這個(gè)號(hào)就是設(shè)備id。這個(gè)id是寫在設(shè)備固件里面的,os讀出這個(gè)id并尋找匹配的驅(qū)動(dòng)進(jìn)行安裝。os很聰明,絕不會(huì)張冠李戴,所以你要說(shuō)為什么驅(qū)動(dòng)不能安裝或更新,首先要確定你下載了正確的安裝包。你要有本事,可以在安裝包中找一找inf文件,看看它支持你的顯卡否?可通過(guò)設(shè)備管理器查看你系統(tǒng)中顯卡的設(shè)備id。 這二者必須匹配才行??梢园言O(shè)備ID理解成設(shè)備在PC中的個(gè)人身份證,我們不能因?yàn)閮蓧K顯卡是一家人(型號(hào)相同),而認(rèn)為它們就是同一個(gè)人(設(shè)備ID可能不同)。
那么最后,我建議你懶一點(diǎn),如果是win7系統(tǒng)的話,嘗試在設(shè)備管理器中右鍵選更新驅(qū)動(dòng),并讓它自己去網(wǎng)絡(luò)服務(wù)器上搜索有無(wú)新版驅(qū)動(dòng),或能解決你的問(wèn)題。
Q:leo0087
張大哥,您好:
小弟很想知道WINDOWS和LINUX內(nèi)核有什么區(qū)別?
張佩
你的問(wèn)題很像一個(gè)面試題。一般面試的時(shí)候他們都會(huì)問(wèn)我:)我不懂linux啊。微軟是龐大的軟件帝國(guó),你應(yīng)該曉得,有兩個(gè)截然不同的windows,一個(gè)是基于dos的win9x,一個(gè)是參照了dec的vms而開發(fā)出來(lái)的NT系統(tǒng)?,F(xiàn)在用的是后者。
linux是類unix的操作系統(tǒng),它大抵是一個(gè)孤憤之作,因?yàn)閡nix的版權(quán)所有者AT&t公司當(dāng)時(shí)停止了unix的開源,并發(fā)起了一些訴訟官司。于是才有了linux和minix這類重造鍋爐的類 unix系統(tǒng)。說(shuō)到二者的區(qū)別,千差萬(wàn)別不為過(guò)吧。NT之父Cutler是滿懷著對(duì)unix的無(wú)比鄙視和憤怒開發(fā)出NT系統(tǒng)的,你可想而知。前者unix 類大抵使用單一內(nèi)核,而后者NT基本算微內(nèi)核吧,這是最典型的差別。當(dāng)然,單一內(nèi)核或微內(nèi)核,二者都并不純粹,是互有參照的。
Q:zhang45xiang
您好:如同本期:如何正確入門Windows系統(tǒng)驅(qū)動(dòng)開發(fā)領(lǐng)域 來(lái)說(shuō),如何進(jìn)行系統(tǒng)驅(qū)動(dòng)開發(fā)呢?當(dāng)系統(tǒng)驅(qū)動(dòng)存在沖突的時(shí)候如何解決,如何卸載干凈?
A:張佩
入門對(duì)各行各業(yè)都不是一個(gè)簡(jiǎn)單回答的問(wèn)題,請(qǐng)從基本做起吧,先熟悉起wdm/wdf這類基本框架,寫一些簡(jiǎn)單的內(nèi)核服務(wù),演練起來(lái),培養(yǎng)興趣和基礎(chǔ)。第二個(gè)問(wèn)題,是不存在的。系統(tǒng)有自己選擇驅(qū)動(dòng)的機(jī)制,哪有沖突的可能。這要你熟悉inf文件才可,要熟悉系統(tǒng)是怎么選Driver的,這樣你就不會(huì)困惑了。第三個(gè)問(wèn)題,一言難盡呢。但就驅(qū)動(dòng)程序而言,基本上只要在設(shè)備管理器中選擇刪除,它會(huì)把注冊(cè)表中相關(guān)的服務(wù)鍵、枚舉鍵刪除的,inf目錄中的 oemxx.inf也會(huì)刪除,這就夠了。失去這些信息,其他內(nèi)容已不能工作。
Q:hagejid
買過(guò)一本天書夜讀,不過(guò)里邊介紹64位編程的內(nèi)容太少了,不知道在64位下內(nèi)核編程有什么要注意的地方。
A:張佩
朋友,竹林一書中關(guān)于64位編程的內(nèi)容,已經(jīng)免費(fèi)放出來(lái)供下載,無(wú)數(shù)同學(xué)都在閱讀了,你何不網(wǎng)上也找來(lái)一讀?比我在這里費(fèi)力地扯一兩句要有用多。
Q:manchester1878
菜鳥求問(wèn),系統(tǒng)漏洞的分析是不是必須要深入理解內(nèi)核
張佩
菜鳥兄,我勸你和我一樣,暫且不要去分析系統(tǒng)漏洞了吧。那是很少一群人干的,靠那個(gè)能賺錢。你先不考慮吧,有空看起內(nèi)核相關(guān)的一二本書,權(quán)當(dāng)消遣,不是更好?
Q:baofeng1937
張老師:你好!
非常高興見到你!很想知道WDM/WDF框架在WDM中操作系統(tǒng)與內(nèi)核的交互式和在WDF中的二者分離,如何保證系統(tǒng)與硬件的兼容性?
A:張佩
WDM/WDF的問(wèn)題,簡(jiǎn)而言之:WDF本質(zhì)上是對(duì)wdm的封裝。一個(gè)WDF驅(qū)動(dòng)分成兩個(gè)部分:WDK提供的基于WDM編寫的WDF框架代碼,和程序員基于此框架編寫的自己的代碼。
我先說(shuō)前者WDF框架。WDF是基于WDM的封裝,意思是說(shuō),微軟WDK提供一個(gè)基于WDM的模板,在模板中完成基本代碼,或者復(fù)雜而累贅,或者艱難而生僻的代碼邏輯等等。這個(gè)模板就是名為WDF的框架,目前實(shí)現(xiàn)在文件wdf01000.sys中。再談后者:框架有了,裝修和細(xì)節(jié)還是要程序員自己來(lái)填充的,并且程序元需要根據(jù)定義好的框架來(lái)有序填充,這就是程序員自己的代碼。二者拼在一起,是一份完整的WDM驅(qū)動(dòng)代碼。
理解了這種關(guān)系之后,我們就可以知道,WDM和WDF之間其實(shí)不存在任何兼容問(wèn)題,只要系統(tǒng)中有WDF框架文件存在即可以了。
再講兩點(diǎn):
1. WDM/WDF的關(guān)系,和前代兩種框架VxM與WDM間的關(guān)系是不一樣的,二者不互相兼容,因?yàn)閃DM并不是基于VxM的封裝,完全不同;
2. 國(guó)內(nèi)熟悉MFC開發(fā)的人特多,可以類比,MFC框架是對(duì)Win32編程的封裝,Win32/MFC的關(guān)系類同于WDM/WDF關(guān)系,你可以去想象。
Q:baofeng1937
張老師:
針對(duì)上面的usb驅(qū)動(dòng)話題,我還想知道我們的移動(dòng)存儲(chǔ)設(shè)備、USB類的鍵盤鼠標(biāo)等,通過(guò)與系統(tǒng)的連接,是不是基于系統(tǒng)中的USB驅(qū)動(dòng)程序進(jìn)行運(yùn)行,而本身有沒(méi)有裝驅(qū)動(dòng)?如果沒(méi)有,那么類似u盤這類無(wú)法發(fā)現(xiàn)情況,是不是系統(tǒng)驅(qū)動(dòng)的問(wèn)題?如果有,那么它們又是怎樣與系統(tǒng)驅(qū)動(dòng)進(jìn)行交互執(zhí)行的呢?
A:張佩
所有連接到主機(jī)的外設(shè),都是由驅(qū)動(dòng)程序驅(qū)動(dòng)的,我沒(méi)有看到過(guò)特例?;蛘哌@樣說(shuō):凡是連接到系統(tǒng)總線(ACPI/PCI)上的設(shè)備,都會(huì)被系統(tǒng)枚舉并嘗試安裝驅(qū)動(dòng),無(wú)一例外。介紹你一個(gè)認(rèn)識(shí)系統(tǒng)設(shè)備樹的簡(jiǎn)單方法:命令行中敲入DevMgmt.msc命令,運(yùn)行設(shè)備管理器程序;在View菜單中選擇“依連接排序設(shè)備”;你能看到一個(gè)名稱類似“X86 PC電腦”的根設(shè)備。展開這個(gè)設(shè)備后,就能看到一級(jí)級(jí)的子設(shè)備了。
另外,你問(wèn)題里面提到的多種USB設(shè)備的驅(qū)動(dòng)問(wèn)題,答案非常簡(jiǎn)單:這些設(shè)備一定是有驅(qū)動(dòng)程序的,當(dāng)然這些驅(qū)動(dòng)程序往往都不用你自己去手動(dòng)安裝,因?yàn)樗鼈兪瞧毡楸皇褂玫臉?biāo)準(zhǔn)設(shè)備,微軟OS早就為它們準(zhǔn)備了In-Box驅(qū)動(dòng),這些驅(qū)動(dòng)在你的OS被安裝好后,就已經(jīng)存在于系統(tǒng)目錄中了,當(dāng)設(shè)備首次接入后會(huì)自動(dòng)安裝這些In-Box驅(qū)動(dòng)。另外,在這種情況下,這些標(biāo)準(zhǔn)USB設(shè)備的生產(chǎn)廠商也是可以編寫自己的驅(qū)動(dòng)來(lái)代替OS的In-Box驅(qū)動(dòng)的,至于怎么代替,話題扯遠(yuǎn)了,這里不提。
Q:niceheart
張生,你好,請(qǐng)問(wèn)一下windows內(nèi)核具體怎么開發(fā)?windows 內(nèi)核對(duì)計(jì)算機(jī)有哪些重要的作用?他的核心是什么?謝謝!
A:張佩
你提問(wèn)中有三個(gè)問(wèn)號(hào),回答如下:
1. 我們這里只討論驅(qū)動(dòng)開發(fā),無(wú)能討論內(nèi)核開發(fā)。
2. 你問(wèn)內(nèi)核對(duì)計(jì)算機(jī)有哪些重要作用。就像汽車,你說(shuō)它座位以下部分對(duì)于這輛車子能夠正常跑起來(lái),起個(gè)什么作用?
什么是內(nèi)核??jī)?nèi)核就是OS本身!我們平時(shí)的桌面,只是一個(gè)殼(Shell)而已??陀^上講,殼是可以被替換的(即Exporer.exe程序)。
3. 核心包含了很多內(nèi)容,簡(jiǎn)單而言,是:HAL模塊、執(zhí)行體模塊、以及Win32子系統(tǒng)等。
Q:zr120633367
電腦打開其他文件夾很正常, 但打開指定的文件時(shí)卻反應(yīng)半天就是假死的樣子。這是怎么回事呢?系統(tǒng)也重慶做過(guò)。
A:張佩
從你描述的現(xiàn)象很難給出答案,但我可以講一講。用戶在文件管理器中打開文件夾,在干凈的OS中,這個(gè)操作僅僅導(dǎo)致一系列的Open、Close、 QueryInformation等函數(shù)的調(diào)用,目地是請(qǐng)求系統(tǒng)返回文件夾中的所有文件的列表以及文件信息,從而桌面可以顯示它們,這些操作一般不會(huì)耗費(fèi)很多時(shí)間。
至于為什么非常慢,以至于假死,我懷疑你安裝了某些軟件,這些軟件Hook了一些系統(tǒng)調(diào)用,會(huì)在你打開一個(gè)文件
或文件夾的時(shí)候,同時(shí)也對(duì)被打開的文件進(jìn)行檢查操作。比如殺毒、木馬軟件,或者像SVN、CVS等軟件,都會(huì)這樣做。
如果你安裝了這些軟件,可以先把它們挺掉。如果懷疑中毒的話,用 IceSword軟件看看,它會(huì)檢測(cè)Hook情況。再教你做這樣一個(gè)實(shí)驗(yàn):去網(wǎng)上下載名為FileMon的工具,它能夠監(jiān)測(cè)到所有的文件查詢、讀寫操作,你在Options菜單中設(shè)置Filter為你的文件夾路徑(比如C:\folder1),這樣FileMon只會(huì)檢測(cè)指定文件夾。然后你打開這個(gè)文件夾,F(xiàn)ileMon會(huì)把所有操作記錄下來(lái)。你會(huì)發(fā)現(xiàn)有很多Log的工作進(jìn)程是桌面進(jìn)程(Explorer.exe),這是正常的。然后就要看看,是否有其它進(jìn)程也在同時(shí)操作這個(gè)文件夾,F(xiàn)ileMon會(huì)記錄操作發(fā)生時(shí)的時(shí)間,你可以據(jù)此做一些判斷。
Q:chilewang
張工 你好!
我想咨詢一下有關(guān)Windows下設(shè)備驅(qū)動(dòng)開發(fā)的問(wèn)題,目前我遇到一個(gè)問(wèn)題是,如果設(shè)備斷電自己關(guān)機(jī)的話,如何避免上位機(jī)Windows系統(tǒng)的藍(lán)屏!
當(dāng)我遇到這個(gè)問(wèn)題時(shí),我一直想象為什么DV機(jī)等這些USB設(shè)備在連接到電腦時(shí),當(dāng)關(guān)掉DV的電源時(shí),電腦就不藍(lán)屏。而我的也是USB連接設(shè)備,可設(shè)備一失去電源,與其連接的電腦就要藍(lán)屏!如有描述不清,歡迎繼續(xù)與我聯(lián)系! 祝好~
A:張佩
很簡(jiǎn)單,調(diào)試你的IRP_MJ_PNP/IRP_MN_SURPRISE_REMOVAL和IRP_MJ_POWER/ IRP_MN_SET_POWER這兩個(gè)分發(fā)函數(shù)。當(dāng)設(shè)備突然移除的時(shí)候,會(huì)導(dǎo)致PNP和Set Power分發(fā)函數(shù)的調(diào)用。很顯然,你的驅(qū)動(dòng)沒(méi)有處理好這些問(wèn)題。
Q:dplm
張老師:你好。
請(qǐng)教一下U盤量產(chǎn)失敗,或有時(shí)不明原因,U盤出現(xiàn)0字節(jié),非物理?yè)p壞。是使用的軟件有問(wèn)題(或不持這個(gè)U盤),還是其它原因。理論上所有U盤都可以量產(chǎn)嗎?
用其它工具制作U盤啟動(dòng),如UltraISO,與量產(chǎn)技術(shù)之間有什么區(qū)別,實(shí)現(xiàn)的原理能簡(jiǎn)單介紹一下嗎?
A:張佩
沒(méi)認(rèn)真研究過(guò),Sorry,所以我不知道我下面的理解是否正確:
量產(chǎn)工具應(yīng)該是更新USB的ROM,或者刷固件,所以有些假U盤、移動(dòng)硬盤,顯示出來(lái)是Apple公司生產(chǎn)的,淘寶上很多,拆開來(lái)看污七八糟。
UltraISO是改MBR扇區(qū)。本質(zhì)上USB設(shè)備是沒(méi)有扇區(qū)概念的,但它可以假定自己有,這樣就可以實(shí)現(xiàn)U盤分區(qū)。
Q:sdbaby
你好張老師,我現(xiàn)在對(duì)于WINDOWS系統(tǒng)內(nèi)核驅(qū)動(dòng),有一個(gè)想知道很久的問(wèn)題!就是為什么WINDOWS98的時(shí)候(基于DOS下的系統(tǒng))和 windows xp下的驅(qū)動(dòng) (基于NT系統(tǒng)) 前者有許多的驅(qū)動(dòng)要自己安裝 ,但是XP系統(tǒng)就可以自動(dòng)安裝上了?。?!還有,上面的問(wèn)題我們可以這樣想,是基于DOS和NT系統(tǒng)的區(qū)別,但是WINDOWS 2000應(yīng)該也是基于NT系統(tǒng)下的吧?為什么有的驅(qū)動(dòng)也要自行安裝呢???
張佩
如果有些驅(qū)動(dòng)Win XP下不用手動(dòng)安裝,而2K下需要手動(dòng)安裝,這是由于2K系統(tǒng)沒(méi)有帶這些系統(tǒng)驅(qū)動(dòng),比如USB攝像頭(即UVC驅(qū)動(dòng)usbvideo.sys)和所有 1394相關(guān)的驅(qū)動(dòng)程序,就是例子。這些由系統(tǒng)自帶的驅(qū)動(dòng)程序,或者某類默認(rèn)設(shè)備驅(qū)動(dòng)程序,我們稱之為In-Box驅(qū)動(dòng)。對(duì)于負(fù)責(zé)驅(qū)動(dòng)檢索、安裝的PNP管理器,2k和XP是沒(méi)有本質(zhì)區(qū)別的。
Q:拿貝馬凡
hello,張工,我想咨詢下,nt內(nèi)核中,鉤子(hook)的作用,另外內(nèi)核鉤子與應(yīng)用層鉤子有什么區(qū)別?另外他們與ssdt的關(guān)系,謝謝
A:張佩
實(shí)現(xiàn)Hook的技術(shù)很多,分析如下:
1. 系統(tǒng)鉤子,這是通過(guò)調(diào)用SetWindowsHook實(shí)現(xiàn)的。系統(tǒng)為某些消息專門準(zhǔn)備了一個(gè)處理函數(shù)列表,調(diào)用這個(gè)函數(shù),只是在列表中增加一項(xiàng)而已。
2. API鉤子。這種鉤子可以實(shí)現(xiàn)在用戶/內(nèi)核層。原理不復(fù)雜,就是想辦法在讓Hook的函數(shù)調(diào)用你的函數(shù),或者壓根用你的函數(shù)替代被Hook的函數(shù)。實(shí)現(xiàn)技術(shù)也分兩種:
一種:很多函數(shù)地址是以指針形成保存在內(nèi)存里面的,比如IRP分發(fā)函數(shù),或者你提到的SSDT表中的系統(tǒng)服務(wù),以及IDT表中的ISR,可以找到保存函數(shù)支持的地址,然后用新地址替代它們;
第二:在實(shí)現(xiàn)好的函數(shù)中,插入jmp或者call指令,調(diào)用或跳轉(zhuǎn)到你的函數(shù)處執(zhí)行,微軟自己就有一個(gè)名為動(dòng)態(tài)更改的庫(kù)。
Q:wpp769
你好,我想請(qǐng)問(wèn)下,我的筆記本系統(tǒng)剛裝好,在設(shè)備管理器里面網(wǎng)卡驅(qū)動(dòng)有2個(gè),但過(guò)幾天就變成5個(gè)了,而且3個(gè)都是帶感嘆號(hào)的,也就是說(shuō)不可用。下載的網(wǎng)卡驅(qū)動(dòng)也裝不上。我只能重做系統(tǒng)。請(qǐng)問(wèn)這樣該怎么辦?能不能不做系統(tǒng)就解決呢?謝謝
A:張佩
筆記本有兩個(gè)網(wǎng)絡(luò)設(shè)備是正常的,一個(gè)是以太網(wǎng),一個(gè)無(wú)線網(wǎng);如果有五個(gè),那么一定是你安裝了虛擬網(wǎng)卡,或者在安裝諸如虛擬機(jī)、VPN等軟件的時(shí)候,附帶安裝了這些虛擬網(wǎng)卡組件。你應(yīng)當(dāng)查看網(wǎng)絡(luò)設(shè)備名稱,并去網(wǎng)上搜索,會(huì)得到更多有用信息。
Q:Treasurecool
請(qǐng)問(wèn)一下如何針對(duì)硬件進(jìn)行驅(qū)動(dòng)的開發(fā),原理是什么啊,我是一個(gè)初學(xué)者,求解~~~
A:張佩
我不知道該怎么回答這個(gè)問(wèn)題,我試著回答。
系統(tǒng)內(nèi)核擁有和硬件通信的手段,即能夠讀寫設(shè)備寄存器、讀寫設(shè)備內(nèi)存。通過(guò)這些硬件通信手段,系統(tǒng)能夠獲取設(shè)備信息,或?qū)υO(shè)備進(jìn)行相關(guān)配置,以完成設(shè)備接入系統(tǒng)后的初始化操作。然后可進(jìn)一步進(jìn)行IO通信,這主要通過(guò)讀寫設(shè)備內(nèi)存完成。
這些和硬件之間的操作極為底層,如果把這些操作都交給第三方來(lái)做,不容易。所以操作系統(tǒng)會(huì)完成大部分底層操作,而留出接口給上層的內(nèi)核模塊調(diào)用。這些上層模塊,即內(nèi)核驅(qū)動(dòng)。一般驅(qū)動(dòng)會(huì)有多個(gè)或多層,層層封裝,以讓由用戶自定義的驅(qū)動(dòng)模塊盡量簡(jiǎn)單。差不多這樣。
------------------------------------------
下期(200期)門診:Boost程序庫(kù)的應(yīng)用探討
① 預(yù)告: Boost被稱為“C++準(zhǔn)標(biāo)準(zhǔn)庫(kù)”,含有許多高質(zhì)量的工具,如正則表達(dá)式、字符串算法、智能指針、散列容器等,彌補(bǔ)了C++98標(biāo)準(zhǔn)庫(kù)的不足,可以構(gòu)建 出工業(yè)級(jí)強(qiáng)度的構(gòu)件,代表了目前C++所能達(dá)到的最高技術(shù)高度。但Boost程序庫(kù)內(nèi)容博大精深,又使用了大量的高級(jí)編程技巧,結(jié)構(gòu)精致復(fù)雜,令不少程序 員望而生畏。
② 鏈接:http://doctor.51cto.com/develop-214.html