目 錄 譯者序 原書序 第1章 入門 什么是驅動程序 基于優(yōu)先權的區(qū)分 驅動程序接口 需要編寫哪種驅動程序 哪一類設備 哪種硬件接口 什么是性能需求 總結 第一部分Windows執(zhí)行環(huán)境和VxD 第2章 Windows的虛擬世界 什么是虛擬機 多任務模式 基于頁面請求的虛擬內存 處理器的模式 保護模式 V86模式 Windows執(zhí)行環(huán)境 總結 第3章 Windows實現(xiàn)虛擬環(huán)境的方法 捕獲I/O端口的訪問 捕獲內存映射設備 捕獲中斷和異常 處理器寄存器 進一步分析線性地址和頁面映射 Win32. Winl6和DOS應用程序的地址 Win32地址 Win16地址 DOS地址 Windows 3. x如何滿足Winl6和DoS應用程序的地址需要 Windows9x如何滿足Win32. Win16和DOS應用程序的地址需要 總結 第4章 初識VxD VxD的加載 VxD的基本結構 設備描述塊 相關數(shù)據結構 事件通知 靜態(tài)加載的VxD的初始化和終止消息 動態(tài)加載的VxD初始化和結束時的消息 VM的狀態(tài)變化消息 線程消息 Windows 3. x的不同之處 總結 第5章 最基本的VxD構架 開發(fā)VxD所需的工具 “DDK”版本的源程序 DDB和設備控制人口函數(shù):SKELCTRL. ASM VtoolsD版本的SKELETON.VXD Windows 3. x版本的SKELETON 總結 第6章 VxD與硬件交互 I/O映射與內存映射 與I/O映射的設備交互 與內存映射的設備交互 靜態(tài)配置的內存映射設備 動態(tài)配置的內存映射設備 另一種數(shù)據傳輸?shù)姆绞剑篋MA 使用系統(tǒng)DMA 系統(tǒng)DMA緩沖區(qū)的條件 分配系統(tǒng)DMA緩沖區(qū)的函數(shù) VDMAD服務一覽 VDMAD服務的細節(jié) 使用總線DMA 使用VDMAD—Scatter_Lock的正確方法 在總線DMA傳輸中使用事件 Windows 3. x的不同之處 總結 第7章 在VxD中處理硬件中斷 中斷和VMM 使用VPICD服務 詳解WICD服務函數(shù):VXDIRQ. C 匯編轉換層和C處理函數(shù) HwIntProc回調函數(shù):DDBISR. ASM和VXDISR. C VXDISR的事件處理 Windows 3. x的不同之處 總結 第8章 虛擬世界中的VxD VMM和處理器異常 設備所有權 虛擬I/O映射設備:PORTTRAP的例子 初始化函數(shù):OnDeviceInit 處理不同的I/O端口類型:PortTrapThunk 檢查所有權:PortTrapHandler 處理VM_TERMINATE 使用PORTTRAP 虛擬內存映射設備:PAGIETRAP的例子 初始化過程 異常處理函數(shù) 處理VM_Terminate消息 使用PAGETRAP 虛擬硬件中斷 哪個VM 負責硬件中斷反射的VxD 回調函數(shù):MaskChangeHandler 回調函數(shù):HwInHandler 回調函數(shù):Eomandler 回調函數(shù):VirtIntHandler和IRETHandler 總結 第9章 即插即用:概況 PnP組件 在Windows9x安裝過程中的PnP組件 設備安裝過程中的PnP組件 啟動時的PnP組件 總結 第10章 即插即用的設備驅動程序VxD PnPVxD的安裝 關于INF文件 PnP的啟動過程 其他的PnP配置情況 關閉系統(tǒng) 新的配置 刪除設備 一個PnP驅動程序VxD的例子:TRICORD.VxD RICORD.INF的細節(jié) 代碼詳解 總結 第11章 從應用程序到VxD通信 Winl6應用程序到VxD:VxD方面 從Win16應用程序到VxD:應用程序方面 Win16應用程序到VxD:實例代碼 從Win32應用程序到VxD:VxD方面 從Win32應用程序到VxD:應用程序方面 Win32到VxD:實例代碼 總結 第12章 從VxD到應用程序的通信 從VxD到Winl6應用程序調用的困難 在Windows 3. x下的VxD PostMessage 使用嵌套執(zhí)行服務 在Windows9x下的VxD PostPostMessage 在Windows9x下從VxD到Winl6應用程序:Appy Time 與Win32相關的技巧:異步過程調用 APCVxD例子 與Win32相關的技巧:Win32事件 VxD和Win32事件 總結 第二部分DLL驅動程序 第13章 關于16位的DLL驅動程序 為什么DLL驅動程序都是16位的 32位應用程序與16位DLL交互需要轉換層 靜態(tài)和動態(tài)庫 為什么要把驅動程序做成DLL的形式 應用程序與DLL DLL和堆棧段 DLL和數(shù)據段 DLL與動態(tài)分配的內存之間的關系 DLL初始化和結束 DLL函數(shù)的要求 基本的DLL驅動程序 創(chuàng)建基本的DLL驅動程序 DLL也需要借助于應用程序 DLL驅動程序的調試工具 總結 第14章 DLL驅動程序:與硬件設備交互 DLL和端口訪問 端口映射的例子 驅動程序設計中的常規(guī) DLL驅動程序 訪問內存映射的硬件設備 內存映射DLL驅動程序的版本 關于內存訪問的一些高級話題 總結 第15章 DLL驅動程序:中斷處理 Windows內存管理策略 驅動程序的內存要求 可在中斷處理時訪問的靜態(tài)代碼和數(shù)據:簡單的方法 Windows 3. x下的正確方法 動態(tài)分配中斷期間安全訪問的緩沖區(qū):簡單的方法 動態(tài)分配中斷期間安全訪問的緩沖區(qū):正確的方法 安裝中斷處理函數(shù) 全新的驅動程序:概述