楚狂人--驅(qū)動(dòng)開(kāi)發(fā)基礎(chǔ)
本書(shū)非常適合熟悉Windows應(yīng)用編程的讀者轉(zhuǎn)向驅(qū)動(dòng)開(kāi)發(fā)。所有的內(nèi)容都從最基礎(chǔ)的編程方法入手。介紹相關(guān)的內(nèi)核API,然后舉出示范的例子。這本書(shū)只有不到70頁(yè),是一本非常精簡(jiǎn)的小冊(cè)子。所以它并不直接指導(dǎo)讀者開(kāi)發(fā)某種特定類型的驅(qū)動(dòng)程序。
即使都是使用C/C++語(yǔ)言的代碼,在不同的應(yīng)用環(huán)境中,常??雌饋?lái)還是大相徑庭。比如用TurboC++編寫(xiě)的DOS程序代碼和用VC++編寫(xiě)的MFC應(yīng)用程序的代碼,看起來(lái)就幾乎不像是同一種語(yǔ)言。這是由于它們所依賴的開(kāi)發(fā)包不相同的緣故。
在任何情況下都以寫(xiě)出避免依賴的代碼為最佳。這樣可以避免重復(fù)勞動(dòng)。但是我們?cè)趯W(xué)習(xí)一種開(kāi)發(fā)包的使用時(shí),必須習(xí)慣這個(gè)環(huán)境的編碼方式,以便獲得充分利用這個(gè)開(kāi)發(fā)包的能力。
本書(shū)的代碼幾乎都依賴于WDK(WindowsDriverKit)。但是不限WDK的版本。WDK還在不斷的升級(jí)中。這個(gè)開(kāi)發(fā)包是由微軟公司免費(fèi)提供的。讀者可以在微軟的網(wǎng)站上下載。
當(dāng)然讀者必須把WDK安裝的計(jì)算機(jī)上并配置好開(kāi)發(fā)環(huán)境。具體的安裝和配置方法本書(shū)沒(méi)有提供。因?yàn)榫W(wǎng)上已經(jīng)有非常多的中文文檔介紹它們。
讀完這本書(shū)之后,讀者一定可以更輕松的閱讀其他專門(mén)的驅(qū)動(dòng)程序開(kāi)發(fā)的文檔和相關(guān)書(shū)籍。而不至于看到大量無(wú)法理解的代碼而中途放棄。如果有任何關(guān)于本書(shū)的內(nèi)容的問(wèn)題,讀者可以隨時(shí)發(fā)郵件到mfc_tan_wen@163.com或者walled_river@hotmail.com。能夠回答的問(wèn)題我一般都會(huì)答復(fù)。
寫(xiě)本書(shū)的時(shí)候,我和wowocock合作的一本名為《天書(shū)夜讀》(在網(wǎng)上有一個(gè)大約20%內(nèi)容的縮減電子版本)正在電子工業(yè)出版社編輯。預(yù)計(jì)還有不到一個(gè)月左右就會(huì)出版。這也是我自己所見(jiàn)的唯一一本中文原創(chuàng)的從匯編和反匯編角度來(lái)學(xué)習(xí)Windows內(nèi)核編程和信息安全軟件開(kāi)發(fā)的書(shū)。希望讀者多多支持。有想購(gòu)買(mǎi)的讀者請(qǐng)發(fā)郵件給我。我會(huì)在本書(shū)出版的第一時(shí)間,回復(fù)郵件告知購(gòu)買(mǎi)的方法。
此外我正在寫(xiě)另一本關(guān)于Windows安全軟件的驅(qū)動(dòng)編程的書(shū)。但是題目還沒(méi)有擬好。實(shí)際上,讀者現(xiàn)在見(jiàn)到的免費(fèi)版本的《Windows驅(qū)動(dòng)編程基礎(chǔ)教程》是從這本書(shū)的第一部分中節(jié)選出來(lái)的。這本書(shū)篇幅比較大,大約有600-800頁(yè)。主要內(nèi)容如下:
第一章驅(qū)動(dòng)編程基礎(chǔ)
第二章磁盤(pán)設(shè)備驅(qū)動(dòng)
第三章磁盤(pán)還原與加密
第四章傳統(tǒng)文件系統(tǒng)過(guò)濾
第五章小端口文件系統(tǒng)過(guò)濾
第六章文件系統(tǒng)保護(hù)與加密
第七章協(xié)議網(wǎng)絡(luò)驅(qū)動(dòng)
第八章物理網(wǎng)絡(luò)驅(qū)動(dòng)
第九章網(wǎng)絡(luò)防火墻與安全連接
第十章打印機(jī)驅(qū)動(dòng)與虛擬打印
第十一章視頻驅(qū)動(dòng)與過(guò)濾
附錄AWDK的安裝與驅(qū)動(dòng)開(kāi)發(fā)的環(huán)境配置
附錄B用WinDbg調(diào)試Windows驅(qū)動(dòng)程序
這本書(shū)還沒(méi)有完成。但是肯定要付出巨大的精力,所以請(qǐng)讀者不要來(lái)郵件索取完整的免費(fèi)的電子版本。希望讀者支持本書(shū)的紙版出版。因?yàn)闆](méi)有完成,所以還沒(méi)有聯(lián)系出版商。有愿意合作出版本書(shū)的讀者請(qǐng)發(fā)郵件與我聯(lián)系。
凡是發(fā)送郵件給我的讀者,我將會(huì)發(fā)送郵件提供本人作品最新的出版信息,以及最新發(fā)布的驅(qū)動(dòng)開(kāi)發(fā)相關(guān)的免費(fèi)電子書(shū)。如果不需要這些信息的,請(qǐng)?jiān)卩]件里注明,或者回復(fù)郵件給我來(lái)取消訂閱。
譚文
2008年6月9日
目錄
版權(quán)聲明 1
作者信息 1
前言 2
目錄 4
第一章字符串 6
1.1使用字符串結(jié)構(gòu) 6
1.2字符串的初始化 7
1.3字符串的拷貝 8
1.4字符串的連接 8
1.5字符串的打印 9
第二章內(nèi)存與鏈表 11
2.1內(nèi)存的分配與釋放 11
2.2使用LIST_ENTRY 12
2.3使用長(zhǎng)長(zhǎng)整型數(shù)據(jù) 14
2.4使用自旋鎖 15
第三章文件操作 18
3.1使用OBJECT_ATTRIBUTES 18
3.2打開(kāi)和關(guān)閉文件 18
3.3文件的讀寫(xiě)操作 21
第四章操作注冊(cè)表 25
4.1注冊(cè)鍵的打開(kāi)操作 25
4.2注冊(cè)值的讀 26
4.3注冊(cè)值的寫(xiě) 29
第五章時(shí)間與定時(shí)器 30
5.1獲得當(dāng)前滴答數(shù) 30
5.2獲得當(dāng)前系統(tǒng)時(shí)間 31
5.3使用定時(shí)器 32
第六章內(nèi)核線程 35
6.1使用線程 35
6.2在線程中睡眠 36
6.3使用事件通知 37
第七章驅(qū)動(dòng)與設(shè)備 41
7.1驅(qū)動(dòng)入口與驅(qū)動(dòng)對(duì)象 41
7.2分發(fā)函數(shù)與卸載函數(shù) 41
7.3設(shè)備與符號(hào)鏈接 42
7.4設(shè)備的生成安全性限制 44
7.5符號(hào)鏈接的用戶相關(guān)性 46
第八章處理請(qǐng)求 47
8.1IRP與IO_STACK_LOCATION 47
8.2打開(kāi)與關(guān)閉的處理 48
8.3應(yīng)用層信息傳入 49
8.4驅(qū)動(dòng)層信息傳出 51
后記:我的閑言碎語(yǔ) 54
第一章字符串
1.1使用字符串結(jié)構(gòu)
常常使用傳統(tǒng)C語(yǔ)言的程序員比較喜歡用如下的方法定義和使用字符串:
char *str={“myfirststring”}; //ansi字符串
wchar_t *wstr={L”myfirststring”}; //unicode字符串
size_tlen=strlen(str); //ansi字符串求長(zhǎng)度
size_twlen=wcslen(wstr); //unicode字符串求長(zhǎng)度
printf(“%s%ws%d%d”,str,wstr,len,wlen); //打印兩種字符串
但是實(shí)際上這種字符串相當(dāng)?shù)牟话踩?。很容易?dǎo)致緩沖溢出漏洞。這是因?yàn)闆](méi)有任何地方確切的表明一個(gè)字符串的長(zhǎng)度。僅僅用一個(gè)’