Windows驅(qū)動程序框架理解(經(jīng)典入門) pdf版
330KB / 06-22
竹林蹊徑 深入淺出Windows驅(qū)動開發(fā) 張佩等著 中文 PDF版 [106M]
106MB / 11-21
Windows驅(qū)動程序開發(fā) 完整版PDF
1.33MB / 01-07
-
MCP快速入門實戰(zhàn)教程 中文PDF完整版 其它相關 / 46.7MB
-
DeepSeek中小學生使用手冊 完整版pdf 其它相關 / 6.95MB
-
清華大學DeepSeek完整版(1-10彈) 中文pdf+視頻 其它相關 / 1.0GB
-
北京大學DeepSeek系列三部曲 中文pdf完整版 其它相關 / 22.8MB
-
STM32系列產(chǎn)品選型手冊 官方版 中文pdf版 其它相關 / 5.6MB
-
-
DeepSeek零基礎入門手冊 秋葉出品 中文pdf版 其它相關 / 9.5MB
-
-
DeepSeek 15天指導手冊——從入門到精通 中文pdf版 其它相關 / 920KB
-
DeepSeek使用教程藍皮書 完整中文版PDF 其它相關 / 3.21MB
詳情介紹
Windows驅(qū)動開發(fā)技術詳解由淺入深、循序漸進地介紹了windows驅(qū)動程序的開發(fā)方法與調(diào)試技巧。本書共分23章,內(nèi)容涵蓋了windows操作系統(tǒng)的基本原理、nt驅(qū)動程序與wdm驅(qū)動程序的構造、驅(qū)動程序中的同步異步處理方法、驅(qū)動程序中即插即用功能、驅(qū)動程序的各種調(diào)試技巧等。同時,還針對流行的pci驅(qū)動程序、usb驅(qū)動程序、虛擬串口驅(qū)動程序、攝像頭驅(qū)動程序、sdio驅(qū)動程序進行了詳細的介紹,本書最大的特色在于每一節(jié)的例子都是經(jīng)過精挑細選的,具有很強的針對性。力求讓讀者通過親自動手實驗,掌握各類windows驅(qū)動程序的開發(fā)技巧,學習盡可能多的windows底層知識。
本書適用于中、高級系統(tǒng)程序員,同時也可用做高校計算機專業(yè)操作系統(tǒng)實驗課的補充教材。
Windows驅(qū)動開發(fā)技術詳解 目錄:
第1篇 入門篇
第1章 從兩個最簡單的驅(qū)動談起
本章向讀者呈現(xiàn)兩個最簡單的windows驅(qū)動程序,一個是nt式的驅(qū)動程序,另一個是wdm式的驅(qū)動程序。這兩個驅(qū)動程序沒有操作具體的硬件設備,只是在系統(tǒng)里創(chuàng)建了虛擬設備。在隨后的章節(jié)中,它們會作為基本驅(qū)動程序框架,被本書其他章節(jié)的驅(qū)動程序開發(fā)所復用。筆者將帶領讀者編寫代碼、編譯、安裝和調(diào)試程序。
1.1 ddk的安裝
1.2 第一個驅(qū)動程序helloddk的代碼分析
1.2.1 helloddk的頭文件
1.2.2 helloddk的入口函數(shù)
1.2.3 創(chuàng)建設備例程
1.2.4 卸載驅(qū)動例程
1.2.5 默認派遣例程
1.3 helloddk的編譯和安裝
1.3.1 用ddk環(huán)境編譯helloddk
1.3.2 用vc集成開發(fā)環(huán)境編譯helloddk
1.3.3 helloddk的安裝
1.4 第二個驅(qū)動程序hellowdm的代碼分析
1.4.1 hellowdm的頭文件
1.4.2 hellowdm的入口函數(shù)
1.4.3 hellowdm的adddevice例程
1.4.4 hellowdm處理pnp的回調(diào)函數(shù)
1.4.5 hellowdm對pnp的默認處理
. 1.4.6 hellowdm對irp_mn_remove_device的處理
1.4.7 hellowdm對其他irp的回調(diào)函數(shù)
1.4.8 hellowdm的卸載例程
1.5 hellowdm的編譯和安裝
1.5.1 用ddk編譯環(huán)境編譯hellowdm
1.5.2 hellowdm的編譯過程
1.5.3 安裝hellowdm
1.6 小結
第2章 windows操作驅(qū)動的基本概念
驅(qū)動程序被操作系統(tǒng)加載在內(nèi)核模式下,它與windows操作系統(tǒng)內(nèi)核的其他組件進行密切交互。本章主要介紹windows操作系統(tǒng)內(nèi)核的基本概念,同時還介紹應用程序和驅(qū)動程序之間的通信方法。
2.1 windows操作系統(tǒng)概述
2.1.1 windows家族
2.1.2 windows特性
2.1.3 用戶模式和內(nèi)核模式
2.1.4 操作系統(tǒng)與應用程序
2.2 操作系統(tǒng)分層
2.2.1 windows操作系統(tǒng)總體架構
2.2.2 應用程序與win32子系統(tǒng)
2.2.3 其他環(huán)境子系統(tǒng)
2.2.4 native api
2.2.5 系統(tǒng)服務
2.2.6 執(zhí)行程序組件
2.2.7 驅(qū)動程序
2.2.8 內(nèi)核
2.2.9 硬件抽象層
2.2.10 windows與微內(nèi)核
2.3 從應用程序到驅(qū)動程序
2.4 小結
第3章 windows驅(qū)動編譯環(huán)境配置、安裝及調(diào)試
本章將帶領讀者一步步對驅(qū)動程序進行編譯、安裝和簡單的調(diào)試工作。這些步驟雖然簡單,但往往困惑著初次接觸驅(qū)動程序的開發(fā)者。
3.1 用c語言還是用c++語言
3.1.1 調(diào)用約定
3.1.2 函數(shù)的導出名
3.1.3 運行時函數(shù)的調(diào)用
3.2 用ddk編譯環(huán)境編譯驅(qū)動程序
3.2.1 編譯版本
3.2.2 nmake工具
3.2.3 build工具
3.2.4 makefile文件
3.2.5 dirs文件
3.2.6 sources文件
3.2.7 makefile.inc文件
3.2.8 build工具的環(huán)境變量
3.2.9 build工具的命令行參數(shù)
3.3 用vc編譯驅(qū)動程序
3.3.1 建立驅(qū)動程序工程
3.3.2 修改編譯選項
3.3.3 修改鏈接選項
3.3.4 其他修改
3.3.5 vc編譯小結
3.4 查看調(diào)試信息
3.4.1 打印調(diào)試語句
3.4.2 查看調(diào)試語句
3.5 手動加載nt式驅(qū)動
3.6 編寫程序加載nt式驅(qū)動
3.6.1 scm組件和windows服務
3.6.2 加載nt驅(qū)動的代碼
3.6.3 卸載nt驅(qū)動的代碼
3.6.4 實驗
3.7 wdm式驅(qū)動的加載
3.7.1 wdm的手動安裝
3.7.2 簡單的inf文件剖析
3.8 wdm設備安裝在注冊表中的變化
3.8.1 硬件子鍵
3.8.2 類子鍵
3.8.3 服務子鍵
3.9 小結
第4章 驅(qū)動程序的基本結構
本章首先對windows驅(qū)動程序的兩個重要數(shù)據(jù)結構進行介紹,分別是驅(qū)動對象和設備對象數(shù)據(jù)結構。另外還要介紹nt驅(qū)動程序和wdm驅(qū)動程序的入口函數(shù)、卸載例程、各種irp派遣上函數(shù)等。
4.1 windows驅(qū)動程序中重要的數(shù)據(jù)結構
4.1.1 驅(qū)動對象(driver_object)
4.1.2 設備對象(device_object)
4.1.3 設備擴展
4.2 nt式驅(qū)動的基本結構
4.2.1 驅(qū)動加載過程與驅(qū)動入口函數(shù)(driverentry)
4.2.2 創(chuàng)建設備對象
4.2.3 driverunload例程
4.2.4 用winobj觀察驅(qū)動對象和設備對象
4.2.5 用devicetree觀察驅(qū)動對象和設備對象
4.3 wdm式驅(qū)動的基本結構
4.3.1 物理設備對象與功能設備對象
4.3.2 wdm驅(qū)動的入口程序
4.3.3 wdm驅(qū)動的adddevice例程
4.3.4 driverunload例程
4.3.5 對irp_mn_remove_device irp的處理
4.3.6 用device tree查看wdm設備對象棧
4.4 設備的層次結構
4.4.1 驅(qū)動程序的垂直層次結構
4.4.2 驅(qū)動程序的水平層次結構
4.4.3 驅(qū)動程序的復雜層次結構
4.5 實驗
4.5.1 改寫helloddk查看驅(qū)動結構
4.5.2 改寫hellowdm查看驅(qū)動結構
4.6 小結
第5章 windows內(nèi)存管理
本章圍繞著驅(qū)動程序中的內(nèi)存操作進行了介紹。在驅(qū)動程序開發(fā)中,首先要注意分頁內(nèi)存和非分頁內(nèi)存的使用。同時,還需要區(qū)分物理內(nèi)存地址和虛擬內(nèi)存地址這兩個概念。
5.1 內(nèi)存管理概念
5.1.1 物理內(nèi)存概念(physical memory address)
5.1.2 虛擬內(nèi)存地址概念(virtual memory address)
5.1.3 用戶模式地址和內(nèi)核模式地址
5.1.4 windows驅(qū)動程序和進程的關系
5.1.5 分頁與非分頁內(nèi)存
5.1.6 分配內(nèi)核內(nèi)存
5.2 在驅(qū)動中使用鏈表
5.2.1 鏈表結構
5.2.2 鏈表初始化
5.2.3 從首部插入鏈表
5.2.4 從尾部插入鏈表
5.2.5 從鏈表刪除
5.2.6 實驗
5.3 lookaside結構
5.3.1 頻繁申請內(nèi)存的弊端
5.3.2 使用lookaside
5.3.3 實驗
5.4 運行時函數(shù)
5.4.1 內(nèi)存間復制(非重疊)
5.4.2 內(nèi)存間復制(可重疊)
5.4.3 填充內(nèi)存
5.4.4 內(nèi)存比較
5.4.5 關于運行時函數(shù)使用的注意事項
5.4.6 實驗
5.5 使用c++特性分配內(nèi)存
5.6 其他
5.6.1 數(shù)據(jù)類型
5.6.2 返回狀態(tài)值
5.6.3 檢查內(nèi)存可用性
5.6.4 結構化異常處理(try-except塊)
5.6.5 結構化異常處理(try-finally塊)
5.6.6 使用宏需要注意的地方
5.6.7 斷言
5.7 小結
第6章 windows內(nèi)核函數(shù)
本章介紹了windows內(nèi)核模式下的一些常用內(nèi)核函數(shù),這些函數(shù)在驅(qū)動程序的開發(fā)中將會經(jīng)常用到。
6.1 內(nèi)核模式下的字符串操作
6.1.1 ascii字符串和寬字符串
6.1.2 ansi_string字符串與unicode_string字符串
6.1.3 字符初始化與銷毀
6.1.4 字符串復制
6.1.5 字符串比較
6.1.6 字符串轉(zhuǎn)化成大寫
6.1.7 字符串與整型數(shù)字相互轉(zhuǎn)換
6.1.8 ansi_string字符串與unicode_string字符串相互轉(zhuǎn)換
6.2 內(nèi)核模式下的文件操作
6.2.1 文件的創(chuàng)建
6.2.2 文件的打開
6.2.3 獲取或修改文件屬性
6.2.4 文件的寫操作
6.2.5 文件的讀操作
6.3 內(nèi)核模式下的注冊表操作
6.3.1 創(chuàng)建關閉注冊表
6.3.2 打開注冊表
6.3.3 添加、修改注冊表鍵值
6.3.4 查詢注冊表
6.3.5 枚舉子項
6.3.6 枚舉子鍵
6.3.7 刪除子項
6.3.8 其他
6.4 小結
第7章 派遣函數(shù)
本章重點介紹了驅(qū)動程序中的處理irp請求的派遣函數(shù)。所有對設備的操作最終將轉(zhuǎn)化為irp請求,這些irp請求會被傳送到派遣函數(shù)處理。
7.1 irp與派遣函數(shù)
7.1.1 irp
7.1.2 irp類型
7.1.3 對派遣函數(shù)的簡單處理
7.1.4 通過設備鏈接打開設備
7.1.5 編寫一個更通用的派遣函數(shù)
7.1.6 跟蹤irp的利器irptrace
7.2 緩沖區(qū)方式讀寫操作
7.2.1 緩沖區(qū)設備
7.2.2 緩沖區(qū)設備讀寫
7.2.3 緩沖區(qū)設備模擬文件讀寫
7.3 直接方式讀寫操作
7.3.1 直接讀取設備
7.3.2 直接讀取設備的讀寫
7.4 其他方式讀寫操作
7.4.1 其他方式設備
7.4.2 其他方式讀寫
7.5 io設備控制操作
7.5.1 deviceiocontrol與驅(qū)動交互
7.5.2 緩沖內(nèi)存模式ioctl
7.5.3 直接內(nèi)存模式ioctl
7.5.4 其他內(nèi)存模式ioctl
7.6 小結
第2篇 進階篇
第8章 驅(qū)動程序的同步處理
本章介紹了驅(qū)動程序中常用的同步處理辦法,并且將內(nèi)核模式下的同步處理方法和用戶模式下的同步處理方法做了比較。另外,本章還介紹了中斷請求級、自旋鎖等同步處理機制。
8.1 基本概念
8.1.1 問題的引出
8.1.2 同步與異步
8.2 中斷請求級
8.2.1 中斷請求(irq)與可編程中斷控制器(pic)
8.2.2 高級可編程控制器(apic)
8.2.3 中斷請求級(irql)
8.2.4 線程調(diào)度與線程優(yōu)先級
8.2.5 irql的變化
8.2.6 irql與內(nèi)存分頁
8.2.7 控制irql提升與降低
8.3 自旋鎖
8.3.1 原理
8.3.2 使用方法
8.4 用戶模式下的同步對象
8.4.1 用戶模式的等待
8.4.2 用戶模式開啟多線程
8.4.3 用戶模式的事件
8.4.4 用戶模式的信號燈
8.4.5 用戶模式的互斥體
8.4.6 等待線程完成
8.5 內(nèi)核模式下的同步對象
8.5.1 內(nèi)核模式下的等待
8.5.2 內(nèi)核模式下開啟多線程
8.5.3 內(nèi)核模式下的事件對象
8.5.4 驅(qū)動程序與應用程序交互事件對象
8.5.5 驅(qū)動程序與驅(qū)動程序交互事件對象
8.5.6 內(nèi)核模式下的信號燈
8.5.7 內(nèi)核模式下的互斥體
8.5.8 快速互斥體
8.6 其他同步方法
8.6.1 使用自旋鎖進行同步
8.6.2 使用互鎖操作進行同步
8.7 小結
第9章 irp的同步
本章詳細地介紹了irp的同步處理方法和異步處理方法。另外,本章還介紹了startio例程、中斷服務例程、dpc服務例程。
9.1 應用程序?qū)υO備的同步異步操作
9.1.1 同步操作與異步操作原理
9.1.2 同步操作設備
9.1.3 異步操作設備(方式一)
9.1.4 異步操作設備(方式二)
9.2 irp的同步完成與異步完成
9.2.1 irp的同步完成
9.2.2 irp的異步完成
9.2.3 取消irp
9.3 startio例程
9.3.1 并行執(zhí)行與串行執(zhí)行
9.3.2 startio例程
9.3.3 示例
9.4 自定義的startio
9.4.1 多個串行化隊列
9.4.2 示例
9.5 中斷服務例程
9.5.1 中斷操作的必要性
9.5.2 中斷優(yōu)先級
9.5.3 中斷服務例程(isr)
9.6 dpc例程
9.6.1 延遲過程調(diào)用例程(dpc)
9.6.2 dpcforisr
9.7 小結
第10章 定時器
本章總結了在內(nèi)核模式下的四種等待方法,讀者可以利用這些方法靈活地用在自己的驅(qū)動程序中。最后本章還介紹了如何對irp的超時情況進行處理。
10.1 定時器實現(xiàn)方式一
10.1.1 i/o定時器
10.1.2 示例代碼
10.2 定時器實現(xiàn)方式二
10.2.1 dpc定時器
10.2.2 示例代碼
10.3 等待
10.3.1 第一種方法:使用kewaitforsingleobject
10.3.2 第二種方法:使用kedelayexecutionthread
10.3.3 第三種方法:使用kestallexecutionprocessor
10.3.4 第四種方法:使用定時器
10.4 時間相關的其他內(nèi)核函數(shù)
10.4.1 時間相關函數(shù)
10.4.2 示例代碼
10.5 irp的超時處理
10.5.1 原理
10.5.2 示例代碼
10.6 小結
第11章 驅(qū)動程序調(diào)用驅(qū)動程序
本章主要介紹了如何在驅(qū)動程序中調(diào)用其他驅(qū)動程序。比較簡單的方法是將被調(diào)用的驅(qū)動程序以文件的方式操作。比較高級的方法是構造各種irp,并將這些irp傳送到被調(diào)用的驅(qū)動程序中。
11.1 以文件句柄形式調(diào)用其他驅(qū)動程序
11.1.1 準備一個標準驅(qū)動
11.1.2 獲得設備句柄
11.1.3 同步調(diào)用
11.1.4 異步調(diào)用方法一
11.1.5 異步調(diào)用方法二
11.1.6 通過符號鏈接打開設備
11.2 通過設備指針調(diào)用其他驅(qū)動程序
11.2.1 用iogetdeviceobjectpointer獲得設備指針
11.2.2 創(chuàng)建irp傳遞給驅(qū)動的派遣函數(shù)
11.2.3 用iobuildsynchronousfsdrequest創(chuàng)建irp
11.2.4 用iobuildasynchronousfsdrequest創(chuàng)建irp
11.2.5 用ioallocateirp創(chuàng)建irp
11.3 其他方法獲得設備指針
11.3.1 用obreferenceobjectbyname獲得設備指針
11.3.2 剖析iogetdeviceobjectpointer
11.4 小結
第12章 分層驅(qū)動程序
本章主要介紹了分層驅(qū)動的概念。分層驅(qū)動可以將功能復雜的驅(qū)動程序分解為多個功能簡單的驅(qū)動程序。多個分層的驅(qū)動程序形成一個設備堆棧,irp請求首先發(fā)送到設備堆棧的頂層,然后依次穿越每層的設備堆棧,最終完成irp請求。
12.1 分層驅(qū)動程序概念
12.1.1 分層驅(qū)動程序的概念
12.1.2 設備堆棧與掛載
12.1.3 i/o堆棧
12.1.4 向下轉(zhuǎn)發(fā)irp
12.1.5 掛載設備對象示例
12.1.6 轉(zhuǎn)發(fā)irp示例
12.1.7 分析
12.1.8 遍歷設備棧
12.2 完成例程
12.2.1 完成例程概念
12.2.2 傳播pending位
12.2.3 完成例程返回status_success
12.2.4 完成例程返回status_more_processing_required
12.3 將irp分解成多個irp
12.3.1 原理
12.3.2 準備底層驅(qū)動
12.3.3 讀派遣函數(shù)
12.3.4 完成例程
12.3.5 分析
12.4 wdm驅(qū)動程序架構
12.4.1 wdm與分層驅(qū)動程序
12.4.2 wdm的加載方式
12.4.3 功能設備對象
12.4.4 物理設備對象
12.4.5 物理設備對象與即插即用
12.5 小結
第13章 讓設備實現(xiàn)即插即用
本章首先介紹即插即用的概念和驅(qū)動程序支持即插即用功能的必要性。另外,本章還介紹如何利用wdm驅(qū)動程序開發(fā)框架設計支持即插即用功能的驅(qū)動程序。
13.1 即插即用概念
13.1.1 歷史原因
13.1.2 即插即用的目標
13.1.3 windows中即插即用相關組件
13.1.4 遺留驅(qū)動程序
13.2 即插即用irp
13.2.1 即插即用irp的功能代碼
13.2.2 處理即插即用irp的派遣函數(shù)
13.3 通過設備接口尋找設備
13.3.1 設備接口
13.3.2 wdm驅(qū)動中設置接口
13.3.3 應用程序?qū)ふ医涌?nbsp;
13.3.4 查看接口設備
13.4 啟動和停止設備
13.4.1 為一個實際硬件安裝hellowdm
13.4.2 啟動設備
13.4.3 轉(zhuǎn)發(fā)并等待
13.4.4 獲得設備相關資源
13.4.5 枚舉設備資源
13.4.6 停止設備
13.5 即插即用的狀態(tài)轉(zhuǎn)換
13.5.1 狀態(tài)轉(zhuǎn)換圖
13.5.2 irp_mn_query_stop_device
13.5.3 irp_mn_query_remove_device
13.6 其他即插即用irp
13.6.1 irp_mn_filter_resource_requirements
13.6.2 irp_mn_query_capabilities
13.7 小結
第14章 電源管理
本章主要介紹了如何在wdm驅(qū)動程序中進行電源處理。電源處理主要是處理好電源狀態(tài)和設備狀態(tài)。
14.1 wdm電源管理模型
14.1.1 概述
14.1.2 熱插拔
14.1.3 電源狀態(tài)
14.1.4 設備狀態(tài)
14.1.5 狀態(tài)轉(zhuǎn)換
14.2 處理irp_mj_power
14.3 處理irp_mn_query_capabilities
14.3.1 device_capabilities
14.3.2 一個試驗
14.4 小結
第3篇 實用篇
第15章 i/o端口操作
本章總結了多種i/o端口操作的方法。這些方法本質(zhì)上是一樣的,都是將端口輸入輸出的匯編指令運行在內(nèi)核模式中。
15.1 概述
15.1.1 從dos說起
15.1.2 匯編實現(xiàn)
15.1.3 ddk實現(xiàn)
15.2 工具軟件winio
15.2.1 winio簡介
15.2.2 使用方法
15.3 端口操作實現(xiàn)方法一
15.3.1 驅(qū)動端程序
15.3.2 應用程序端程序
15.4 端口操作實現(xiàn)方法二
15.4.1 驅(qū)動端程序
15.4.2 應用程序端程序
15.5 端口操作實現(xiàn)方法三
15.5.1 驅(qū)動端程序
15.5.2 應用程序端程序
15.6 端口操作實現(xiàn)方法四
15.6.1 原理
15.6.2 驅(qū)動端程序
15.6.3 應用程序端程序
15.7 驅(qū)動pc喇叭
15.7.1 可編程定時器
15.7.2 pc喇叭
15.7.3 操作代碼
15.8 操作并口設備
15.8.1 并口設備簡介
15.8.2 并口寄存器
15.8.3 并口設備操作
15.9 小結
第16章 pci設備驅(qū)動
本章主要介紹pci設備的驅(qū)動開發(fā)。首先介紹了pci總線協(xié)議。作為驅(qū)動程序員,開發(fā)pci驅(qū)動程序首先要了解pci配置空間。根據(jù)讀取pci配置空間,可以得到pci設備的所有資源。另外,本章還總結了四種獲取pci配置空間的方法。
16.1 pci總線協(xié)議
16.1.1 pci總線簡介
16.1.2 pci配置空間簡介
16.2 訪問pci配置空間方法一
16.2.1 兩個重要寄存器
16.2.2 示例
16.3 訪問pci配置空間方法二
16.3.1 ddk函數(shù)讀取配置空間
16.3.2 示例
16.4 訪問pci配置空間方法三
16.4.1 通過即插即用irp獲得pci配置空間
16.4.2 示例
16.5 訪問pci配置空間方法四
16.5.1 創(chuàng)建irp_mn_read_config
16.5.2 示例
16.6 pci設備驅(qū)動開發(fā)示例
16.6.1 開發(fā)步驟
16.6.2 中斷操作
16.6.3 操作設備物理內(nèi)存
16.6.4 示例
16.7 小結
第17章 usb設備驅(qū)動
本章首先介紹了usb總線協(xié)議的基本框架,其中包括usb總線的拓撲結構,usb通信的流程,還有usb的四種傳輸模式。另外,本章介紹了如何編寫usb總線設備的驅(qū)動程序。
17.1 usb總線協(xié)議
17.1.1 usb設備簡介
17.1.2 usb連接拓撲結構
17.1.3 usb通信的流程
17.1.4 usb四種傳輸模式
17.2 windows下的usb驅(qū)動
17.2.1 觀察usb設備的工具
17.2.2 usb設備請求
17.2.3 設備描述符
17.2.4 配置描述符
17.2.5 接口描述符
17.2.6 端點描述符
17.3 usb驅(qū)動開發(fā)實例
17.3.1 功能驅(qū)動與物理總線驅(qū)動
17.3.2 構造usb請求包
17.3.3 發(fā)送usb請求包
17.3.4 usb設備初始化
17.3.5 usb設備的插拔
17.3.6 usb設備的讀寫
17.4 小結
第18章 sdio設備驅(qū)動
本章首先介紹了sdio協(xié)議,講述了sd內(nèi)存卡和sdio卡的兼容問題。然后介紹了sdio協(xié)議中的發(fā)送命令、回應命令、傳送數(shù)據(jù)等相關協(xié)議。隨后,本章又介紹了windows中,ddk提供的對sdio卡設備的支持。然后介紹了如何利用總線驅(qū)動,使sdio設備初始化,接收中斷,發(fā)送和接收數(shù)據(jù)等操作。
18.1 sdio協(xié)議
18.1.1 sd內(nèi)存卡概念
18.1.2 sdio卡概念
18.1.3 sdio總線
18.1.4 sdio令牌
18.1.5 sdio令牌格式
18.1.6 sdio的寄存器
18.1.7 cmd52命令
18.1.8 cmd53命令
18.2 sdio卡驅(qū)動開發(fā)框架
18.2.1 sdio host controller驅(qū)動
18.2.2 sdio卡的初始化
18.2.3 中斷回調(diào)函數(shù)
18.2.4 獲得和設置屬性
18.2.5 cmd52
18.2.6 cmd53
18.3 sdio開發(fā)實例
18.4 小結
第19章 虛擬串口設備驅(qū)動
本章介紹了串口開發(fā)的框架模型,在串口的adddevice例程中需要暴露出一個串口的符號連接,另外在相應的注冊表中需要進行設置。在串口與應用程序的通信中,主要是一組ddk定義的io控制碼,這些io控制碼負責由應用程序向驅(qū)動發(fā)出請求。
19.1 串口簡介
19.2 ddk串口開發(fā)框架
19.2.1 串口驅(qū)動的入口函數(shù)
19.2.2 應用程序與串口驅(qū)動的通信
19.2.3 寫的實現(xiàn)
19.2.4 讀的實現(xiàn)
19.3 小結
第20章 攝像頭設備驅(qū)動程序
本章主要介紹了微軟提供的攝像頭驅(qū)動框架。在該框架中,微軟提供了類驅(qū)動和小驅(qū)動的概念。對于驅(qū)動程序員的任務就是編寫小驅(qū)動程序。
20.1 wdm攝像頭驅(qū)動框架
20.1.1 類驅(qū)動與小驅(qū)動
20.1.2 攝像頭的類驅(qū)動與小驅(qū)動
20.1.3 編寫小驅(qū)動程序
20.1.4 小驅(qū)動的流控制
20.2 虛擬攝像頭開發(fā)實例
20.2.1 編譯和安裝
20.2.2 虛擬攝像頭入口函數(shù)
20.2.3 對stream_request_block的處理函數(shù)
20.2.4 打開視頻流
20.2.5 對視頻流的讀取
20.3 小結
第4篇 提高篇
第21章 再論irp
本章將相關irp的操作做了進一步的總結。首先是轉(zhuǎn)發(fā)irp,歸納了幾種不同的方式。其次總結了創(chuàng)建irp的幾種不同方法。創(chuàng)建irp總的來說分為創(chuàng)建同步irp和創(chuàng)建異步irp。對于創(chuàng)建同步irp,操作比較簡單,i/o管理器會負責回收irp的相關內(nèi)存,但是使用不夠靈活。對于創(chuàng)建異步irp,操作比較復雜,程序員需要自己負責對irp及相關內(nèi)存回收,但使用十分靈活。
21.1 轉(zhuǎn)發(fā)irp
21.1.1 直接轉(zhuǎn)發(fā)
21.1.2 轉(zhuǎn)發(fā)并且等待
21.1.3 轉(zhuǎn)發(fā)并且設置完成例程
21.1.4 暫時掛起當前irp
21.1.5 不轉(zhuǎn)發(fā)irp
21.2 創(chuàng)建irp
21.2.1 iobuilddeviceiocontrolrequest
21.2.2 創(chuàng)建有超時的ioctl irp
21.2.3 用iobuildsynchronousfsdrequest創(chuàng)建irp
21.2.4 關于iobuildasynchronousfsdrequest
21.2.5 關于ioallocateirp
21.3 小結
第22章 過濾驅(qū)動程序
本章主要介紹wdm和nt式過濾驅(qū)動程序開發(fā)。過濾驅(qū)動程序開發(fā)十分靈活,可以修改已有驅(qū)動程序的功能,也可以對數(shù)據(jù)進行過濾加密。另外,利用過濾驅(qū)動程序還能編寫出很多具有相當功能強大的程序來。
22.1 文件過濾驅(qū)動程序
22.1.1 過濾驅(qū)動程序概念
22.1.2 過濾驅(qū)動程序的入口函數(shù)
22.1.3 u盤過濾驅(qū)動程序
22.1.4 過濾驅(qū)動程序加載方法一
22.1.5 過濾驅(qū)動程序加載方法二
22.1.6 過濾驅(qū)動程序的adddevice例程
22.1.7 磁盤命令過濾
22.2 nt式過濾驅(qū)動程序
22.2.1 nt式過濾驅(qū)動程序
22.2.2 nt過濾驅(qū)動的入口函數(shù)
22.2.3 掛載過濾驅(qū)動
22.2.4 過濾鍵盤讀操作
22.3 小結
第23章 高級調(diào)試技巧
本章將介紹一些windows開發(fā)驅(qū)動的高級調(diào)試技巧。有一些高級驅(qū)動程序調(diào)試技巧,可以幫助程序員找出驅(qū)動程序中的bug。另外,利用一些第三方工具軟件,也可以幫助程序員找到驅(qū)動程序中的漏洞,從而提高開發(fā)效率。
23.1 一般性調(diào)試技巧
23.1.1 打印調(diào)試信息
23.1.2 存儲dump信息
23.1.3 使用windbg調(diào)試工具
23.2 高級內(nèi)核調(diào)試技巧
23.2.1 安裝vmware
23.2.2 在虛擬機上加載驅(qū)動程序
23.2.3 vmware和windbg聯(lián)合調(diào)試驅(qū)動程序
23.3 用irptrace調(diào)試驅(qū)動程序
23.4 小結
下載地址
人氣書籍
下載聲明
☉ 解壓密碼:www.dbjr.com.cn 就是本站主域名,希望大家看清楚,[ 分享碼的獲取方法 ]可以參考這篇文章
☉ 推薦使用 [ 迅雷 ] 下載,使用 [ WinRAR v5 ] 以上版本解壓本站軟件。
☉ 如果這個軟件總是不能下載的請在評論中留言,我們會盡快修復,謝謝!
☉ 下載本站資源,如果服務器暫不能下載請過一段時間重試!或者多試試幾個下載地址
☉ 如果遇到什么問題,請評論留言,我們定會解決問題,謝謝大家支持!
☉ 本站提供的一些商業(yè)軟件是供學習研究之用,如用于商業(yè)用途,請購買正版。
☉ 本站提供的Windows驅(qū)動開發(fā)技術詳解 PDF掃描版[175MB]資源來源互聯(lián)網(wǎng),版權歸該下載資源的合法擁有者所有。