㈠ 什麼是過濾驅動
過濾驅動就是掛載在其他驅動上,對某設備的irp進行攔截過濾作用,可以對設備專進行功能屬擴展,或是數據加密等的驅動程序。
比如:
1. 可以對寫入硬碟的數據做加密,然後讀取的時候解密,這樣對於用戶來說,根本不知道有加密解密的過程,然後存在硬碟上的數據是加密的。
2. 可以對已有驅動做一些擴展,或者改變已有驅動的功能。比如已有驅動一次只能寫1024位元組的數據,那麼過濾驅動可以擴展到任何長度,然後分段調用已有驅動就是了。
過濾驅動可以在功能型驅動的上面,稱之為上層過濾驅動,或者高層,反正就這個意思。過濾驅動在功能型驅動下面,稱之為下層過濾驅動。看示意圖:
㈡ 匯流排驅動是什麼
匯流排驅動是計算機匯流排的驅動程序。
匯流排驅動程序是必須的驅動程序;在一個機器里,每一類匯流排有一個匯流排驅動程序。如果機器里有不止一個同類的匯流排,則一個匯流排驅動程序能服務不止一個匯流排。
匯流排驅動程序代表其匯流排上的設備來執行一定的操作,包括訪問設備寄存器來物理地改變設備的電源狀態。例如,當設備休眠時,匯流排驅動程序設置設備寄存器來給設備適當的電源狀態。
(2)功能驅動過濾驅動匯流排驅動擴展閱讀
採用匯流排結構的主要優點
1、面向存儲器的雙匯流排結構信息傳送效率較高,這是它的主要優點。但CPU與I/O介面都要訪問存儲器時,仍會產生沖突。
2、CPU與高速的局部存儲器和局部I/O介面通過高傳輸速率的局部匯流排連接,速度較慢的全局存儲器和全局I/O介面與較慢的全局匯流排連接,從而兼顧了高速設備和慢速設備,使它們之間不互相牽扯。
3、簡化了硬體的設計。便於採用模塊化結構設計方法,面向匯流排的微型計算機設計只要按照這些規定製作cpu插件、存儲器插件以及I/O插件等,將它們連入匯流排就可工作,而不必考慮匯流排的詳細操作。
4、簡化了系統結構。整個系統結構清晰。連線少,底板連線可以印製化。
5、系統擴充性好。一是規模擴充,規模擴充僅僅需要多插一些同類型的插件。二是功能擴充,功能擴充僅僅需要按照匯流排標准設計新插件,插件插入機器的位置往往沒有嚴格的限制。
6、系統更新性能好。因為cpu、存儲器、I/O介面等都是按匯流排規約掛到匯流排上的,因而只要匯流排設計恰當,可以隨時隨著處理器的晶元以及其他有關晶元的進展設計新的插件,新的插件插到底板上對系統進行更新,其他插件和底板連線一般不需要改。
7、便於故障診斷和維修。用主板測試卡可以很方便找到出現故障的部位,以及匯流排類型。
㈢ 匯流排控制器驅動程序和匯流排驅動程序有啥區別
應該是一回事。
㈣ 深入淺出windows驅動開發的目錄
向內核世界說一聲:hello,我來了。如果你是一個初學者,並對這個世界充滿好奇心,請從這一章開始,我們一起打招呼~
第1章 Hello World驅動 1
1.1 從Hello World開始 2
1.1.1 HelloDRIVER 4
1.1.2 代碼解釋 8
1.1.3 驅動程序的編譯和安裝 11
1.1.4 查看我們的驅動 14
1.2 虛擬環境 15
1.2.1 使用虛擬環境進行驅動開發 15
1.2.2 使用VMware虛擬機 15
1.2.3 目標機設置 16
1.2.4 Virtual PC虛擬機 18
1.3 小結 19
如何在規范的商業環境中,開發成功而有效的驅動軟體?驅網站長馬勇(ZnSoft)將向你娓娓道來。你會學到這些內容:建立一個簡單而有效的開發、調試環境;64位環境下的內核編程技巧;如何發布你的驅動軟體。
第2章 商業驅動開發技術 20
2.1 建立開發調試環境 21
2.1.1 SVN環境 21
2.1.2 創建工程,導入SVN 23
2.1.3 建立符號伺服器 25
2.1.4 用符號調試 27
2.2 64位驅動開發技術 34
2.2.1 64位驅動編寫技術 35
2.2.2 32位應用程序與64位驅動混合模式 36
2.3 驅動程序的發布與測試 42
2.3.1 驅動程序簽名 42
2.3.2 驅動程序測試 46
2.3.3 WHQL 49
2.4 小結 50
WDF是目前最新的驅動編程框架。當很多內核程序員還緊抱WDM的巨大佛腳時,千萬要記住,WDF已是大勢所趨。本章介紹了WDF最重要的幾個概念,並進行了一定程度的深度挖掘。對於WDF框架的三大核心模型:對象模型、事件模型、PNP/Power模型,本章作了重點講述。
第3章 WDF概述 51
3.1 主要特點 52
3.2 框架視圖 53
3.3 兼容性 55
3.4 對象模型 56
3.4.1 對象和句柄 59
3.4.2 引用計數 60
3.4.3 上下文空間 61
3.4.4 PME介面 67
3.4.5 DDI介面 69
3.4.6 父子關系 76
3.4.7 對象同步 77
3.5 驅動對象和設備對象 78
3.5.1 驅動對象 78
3.5.2 驅動入口DriverEntry 81
3.5.3 設備對象 84
3.5.4 創建設備對象 85
3.5.5 設備棧 86
3.6 IO模型 88
3.6.1 IO目標對象 88
3.6.2 IO目標對象的細節 90
3.6.3 安全的緩沖區 93
3.6.4 內存對象(一) 96
3.6.5 內存對象(二) 98
3.6.6 框架和IO請求 102
3.6.7 更詳細的處理流程 103
3.6.8 IO請求參數 105
3.6.9 隊列 107
3.6.10 創建IO請求 110
3.7 PNP和電源模型 112
3.8 小結 115
使用WDF框架開發USB驅動,方便且簡單。本章首先總體上從硬體和軟體兩個方面介紹USB相關知識點,包括設備的電氣特性、匯流排結構、USB驅動類型以及類驅動。編程方面,從USB設備初始化、數據操作以及設備控制等幾個方面來講解,透徹並且翔實。
第4章 WDF USB設備驅動開發 116
4.1 USB設備硬體結構 117
4.1.1 主從結構 117
4.1.2 硬體拓撲 118
4.1.3 USB中斷 119
4.2 USB軟體結構 120
4.2.1 匯流排驅動 120
4.2.2 系統類驅動 121
4.2.3 功能驅動 122
4.2.4 父驅動與混合設備 122
4.2.5 過濾驅動 125
4.2.6 USB驅動棧、設備棧 125
4.3 內核開發 127
4.3.1 設備驅動 127
4.3.2 入口函數 128
4.3.3 USB描述符 129
4.3.4 描述符介紹 130
4.3.5 匯總舉例 133
4.3.6 讀取描述符 135
4.3.7 初始化 137
4.3.8 設備初始化函數 138
4.3.9 創建設備對象 141
4.3.10 設備命名、符號鏈接 143
4.3.11 啟動設備 147
4.3.12 創建隊列 156
4.3.13 停止設備/反初始化 158
4.4 數據I/O操作 160
4.4.1 USB控制命令 160
4.4.2 構造並發送控制命令 162
4.4.3 讀USB中斷埠 163
4.4.4 連續讀操作 165
4.4.5 數據處理函數 166
4.4.6 中斷埠的效率 167
4.4.7 讀/寫批量埠 168
4.5 設備控制 171
4.5.1 關於I/O Target對象 171
4.5.2 獲取USB版本 172
4.5.3 管道重置 174
4.5.4 設備重置 176
4.5.5 管道中止與終止 177
4.6 用戶程序 179
4.6.1 內核讀/寫 179
4.6.2 控制命令 179
4.7 小結 180
1394俗稱火線。大夥平時最多接觸它的地方大概是內核調試時,藉助1394卡進行雙機互聯。本章首先從硬體方面介紹了1394的知識,它的匯流排結構很特別,極具可擴性,能非常方便地在各種類型的1394設備之間建立數據鏈路。內核編程方面,本章重點講解了數據通信相關知識,分為非同步通信和同步通信兩種方式,頗為復雜,相對難於掌握,但套路是現成的,變化的東西不多,可以熟能生巧。本章最後介紹了1394雙機互聯的原理,有興趣的讀者可參考之。
第5章 WDF 1394驅動開發 181
5.1 1394一席談 182
5.1.1 版本情況 183
5.1.2 電源特性 183
5.1.3 1394卡 183
5.1.4 匯流排拓撲 184
5.2 發送請求 186
5.2.1 同步方式 187
5.2.2 非同步方式 189
5.2.3 對WDM的回憶 191
5.3 匯流排重置與計數 193
5.3.1 匯流排重置 193
5.3.2 設置重置回調 193
5.3.3 計數更新 194
5.4 PNP操作 195
5.5 非同步通信 196
5.5.1 地址范圍 197
5.5.2 非同步讀 200
5.5.3 非同步寫 201
5.5.4 非同步鎖請求 202
5.5.5 數據流 203
5.6 等時通信 204
5.6.1 申請帶寬 205
5.6.2 釋放帶寬 206
5.6.3 等時通道 206
5.6.4 資源句柄 207
5.6.5 緩沖區掛載 210
5.6.6 緩沖區解掛 211
5.6.7 開始傳輸 211
5.6.8 停止傳輸 212
5.6.9 其他等時操作 213
5.7 其他操作 213
5.7.1 設備配置 213
5.7.2 獲取控制器信息 214
5.7.3 速度信息 215
5.7.4 廠商自定義命令 216
5.8 安裝與測試 216
5.8.1 1394虛擬設備 216
5.8.2 創建虛擬設備 218
5.8.3 示例代碼 219
5.8.4 安裝與測試 221
5.9 小結 222
內核天生適合於C語言編程,但越來越多的內核項目,規模達到10數萬的規模。在這種情況下,人們不由地會將目光投向優雅的C++語言。總體上說,C和C++是至親好友,內核中使用C++本不應有什麼大問題,但有幾個暗礁潛伏已久,不小心的程序員,你可千萬不要觸礁。
第6章 內核驅動C++編程 223
6.1 驅動中的類 224
6.1.1 一個簡單的例子 224
6.1.2 new/delete 225
6.1.3 extern C 227
6.1.4 全局/靜態變數 228
6.1.5 棧的憂慮 230
6.2 類封裝的驅動程序 233
6.2.1 尋找合適的存儲所 233
6.2.2 類方法與事件函數 235
6.2.3 KMDF驅動實現 236
6.2.4 WDM驅動實現 237
6.3 多態 238
6.3.1 基類、子類 238
6.3.2 實現多態 239
6.3.3 測試 241
6.4 小結 241
使用WDF框架編寫的驅動程序,在測試和調試的時候,有特殊的工具。本章介紹了目前所知的三個,它們分別是:Windbg擴展調試命令、WDFTester測試工具、WDFVerifier測試工具。本章將以示例方式,介紹這些工具的使用。
第7章 WDF驅動測試 242
7.1 WDF錯誤 243
7.1.1 實例分析 245
7.1.2 USB錯誤 246
7.2 WDF擴展調試命令 247
7.3 WDFTester 254
7.3.1 WDFFiTester 254
7.3.2 使用 256
7.3.3 WDFCallTracer 260
7.4 WDFVerifier 263
7.4.1 識別KMDF驅動 263
7.4.2 使用與介紹 265
7.5 小結 266
SoftIce漸行漸遠之後,Windbg成為內核調試的第一利器。使用Windbg的最大難點是命令繁多,參數復雜。本章以總結歸納的形式,介紹了作者在工作中經常用到的幾大類調試命令,並以實例形式一一介紹。作者根據個人經驗所作的分類,未能全備,但能夠保證的是,所有實例翔實而可靠,可以作為可信的參考。
第8章 調試命令詳解 267
8.1 概述 268
8.1.1 尋求幫助 269
8.1.2 DML語言 270
8.1.3 基本信息 271
8.1.4 基本設置 272
8.1.5 格式化顯示 273
8.1.6 開始調試 273
8.2 符號與源碼 276
8.2.1 模塊列表 277
8.2.2 模塊信息 279
8.2.3 符號路徑 280
8.2.4 符號載入 283
8.2.5 符號搜索 285
8.2.6 源碼命令 287
8.3 進程與線程 289
8.3.1 進程命令 289
8.3.2 線程命令 292
8.3.3 異常與事件 296
8.3.4 局部變數 300
8.3.5 顯示類型 301
8.4 斷點 301
8.4.1 軟體斷點 301
8.4.2 硬體斷點 303
8.4.3 其他操作 303
8.5 內存命令 304
8.5.1 查看內存 304
8.5.2 內存信息 307
8.5.3 其他命令 311
8.6 小結 312
相信大多數人在學習內核開發的時候,都問過這樣一個問題:內核驅動怎麼向用戶程序發送消息,或者如何調用Win32函數。用戶程序和內核同步,是一個基本而重要的知識,本章介紹了三種主要的實現方式。至於內核是否可以調用Win32函數,讀一讀本章開篇的話,你就有答案了。
第9章 內核同步 313
9.1 關於內核同步 314
9.2 內核事件同步 316
9.2.1 原理 316
9.2.2 用戶程序 318
9.2.3 內核實現 319
9.3 IRP同步 320
9.3.1 用戶程序 321
9.3.2 內核實現 323
9.4 WMI同步 325
9.5 數據緩沖區同步 326
9.6 反向調用 328
9.7 小結 330
微軟最新的音視頻編程框架即AVStream框架,不管從什麼方面來說,音視頻編程都是一個很小眾的領域。AVStream框架極其復雜,個人看法是掌握的難度超過了WDF。本章介紹了AVStream框架的各種基本知識點,並以實例講解一個內核音頻過濾器在系統中是如何工作的。
第10章 音頻驅動開發 331
10.1 簡介 332
10.1.1 音頻模塊架構 332
10.1.2 系統中的音頻設備 334
10.2 AVStream對象 338
10.2.1 設備對象 339
10.2.2 Filter工廠和Filter對象 340
10.2.3 Pin工廠和Pin對象 342
10.2.4 Node對象與Connection結構體 343
10.3 AVStream描述符 346
10.3.1 描述符簡介 346
10.3.2 描述符示例 347
10.3.3 分發函數表 349
10.3.4 自控表 349
10.3.5 自控表示例 351
10.4 代碼講解 355
10.4.1 入口函數 355
10.4.2 設備分發函數 357
10.4.3 Filter與Pin分發函數 358
10.4.4 創建和刪除 359
10.4.5 數據處理 360
10.4.6 數據格式 362
10.5 自控表函數 364
10.5.1 事件函數 364
10.5.2 屬性函數 366
10.5.3 方法函數 367
10.5.4 用戶介面 367
10.6 硬體操作 370
10.6.1 數據DMA 370
10.6.2 AVStream中的DMA實現 371
10.6.3 談談ISR 374
10.7 安裝與測試 376
10.7.1 安裝 376
10.7.2 測試工具 376
10.8 小結 379
ASIO音頻驅動具有兩個非常亮眼的優點:低延遲、多通道。低延遲能夠達到幾毫秒,使得最靈敏的耳朵也難也察覺;多通道則讓通常的雙聲道、6.1聲道等一齊歇菜,而可以很輕松地讓多達十幾、幾十個聲道同時工作,在進行高級音頻編輯時,這非常重要。
第11章 ASIO虛擬音效卡 380
11.1 引言 381
11.2 關於ASIO 383
11.3 ASIO用戶驅動 384
11.3.1 COM介面 384
11.3.2 安裝與卸載 386
11.3.3 IASIO介面 387
11.3.4 技術核心 390
11.3.5 計算延遲 392
11.4 內核驅動實現 393
11.4.1 同步 393
11.4.2 原理 393
11.4.3 實現 396
11.5 ASIO音頻軟體 396
11.6 小結 397
從本章開始的三章內容,講的都是「驅動安裝」這個話題。在本章中,介紹了系統中和驅動安裝有關的各種系統模塊。讀者通過閱讀本章後,至少能夠掌握這兩個基本知識:系統如何識別一個舊設備,並為它載入合適的驅動文件;系統如何發現一個新設備,並完成驅動安裝。
第12章 設備驅動安裝入門 399
12.1 基礎知識預介 400
12.1.1 設備類型 400
12.1.2 設備實例ID 401
12.1.3 驅動載入和安裝 403
12.2 安裝模塊 404
12.2.1 內核PNP管理器 405
12.2.2 用戶PNP管理器 406
12.2.3 安裝介面函數(Setup API) 408
12.2.4 配置管理器介面(CfgMgr API) 410
12.2.5 類安裝器(Class Installers) 410
12.2.6 類協安裝器(Class Co-Installers) 410
12.2.7 設備協安裝器(Device Co-Installers) 411
12.2.8 驅動包(Driver Package) 412
12.2.9 驅動倉庫(Driver Store) 413
12.2.10 設備管理器(Device Manager) 414
12.2.11 安裝程序 415
12.2.12 新設備向導 416
12.2.13 添加硬體向導 416
12.2.14 驅動安裝器(Driver Installer) 416
12.3 重要問題 417
12.3.1 尋找和選擇 417
12.3.2 32位與64位系統兼容 418
12.3.3 系統重啟 419
12.4 安裝模式 420
12.4.1 示例1:客戶端模式 421
12.4.2 示例2:伺服器模式 423
12.5 安裝器編程 424
12.5.1 DIF碼 424
12.5.2 處理流程 427
12.5.3 工程示例 429
12.5.4 注冊 430
12.6 小結 431
INF文件即驅動程序的「安裝文件」,它包含了各種與驅動安裝有關的指令信息。通過INF文件,系統知道如何處理驅動包中的各個文件,並在系統注冊表中做出准確記錄。本章主要從指令和域,這兩個方面進行講解。
第13章 深入解析INF文件 432
13.1 概述 433
13.1.1 域 433
13.1.2 指令 434
13.1.3 多系統 435
13.2 注冊表指令 436
13.2.1 縮寫根鍵 436
13.2.2 軟體鍵 437
13.2.3 硬體鍵 437
13.2.4 AddReg 438
13.2.5 DelReg 440
13.2.6 BitReg 441
13.3 文件操作指令 441
13.3.1 CopyFiles 441
13.3.2 DelFiles 443
13.3.3 RenFiles 443
13.4 服務指令 444
13.4.1 AddService 444
13.4.2 DelService 445
13.5 基本域 446
13.5.1 版本域 446
13.5.2 文件域 447
13.5.3 默認安裝域 451
13.5.4 控制域 454
13.5.5 字元串域 457
13.6 設備類安裝域 458
13.6.1 主域 459
13.6.2 服務子域 461
13.7 介面類安裝域 461
13.8 廠商/產品域 462
13.8.1 廠商域 463
13.8.2 產品域 464
13.9 設備安裝域 464
13.9.1 硬體子域 466
13.9.2 協安裝器子域 467
13.9.3 介面子域 468
13.9.4 廠商默認配置子域 469
13.9.5 邏輯優先配置子域 470
13.10 ChkInf介紹 471
13.11 小結 472
驅動安裝程序讓你的驅動軟體顯得更加專業,所以,放棄手動安裝驅動的做法吧,你的驅動將顯得更靚。本章的示例軟體MyDrvInst,可以作為讀者設計更漂亮的安裝軟體的開始。
第14章 設計驅動安裝程序 473
14.1 驅動包 474
14.1.1 安裝方式 474
14.1.2 安裝驅動包 475
14.1.3 卸載驅動包 476
14.2 驅動更新 477
14.2.1 設備已連接 477
14.2.2 設備未連接 478
14.2.3 枚舉系統設備 481
14.3 分析INF文件 484
14.3.1 函數介紹 484
14.3.2 列印設備ID 486
14.4 MyDrvInst介紹 487
14.5 製作軟體安裝包 490
14.5.1 視圖介紹 490
14.5.2 我們的工程 492
14.5.3 編譯執行 493
14.6 小結 494
附錄A CY001 USB開發板 495
附錄B VisualKD + VMWare實現單機內核調試 501
㈤ 打開usb過濾驅動失敗,請查看設備管理器中,通用串列匯流排控制器 是否存在
這是裝了usb密碼保護軟體,卻沒有有效的裝載或設置完善,開機時那個設置過密碼的usb介面中的u盤不見了,造成查找提示。。
卸載軟體,重啟。
如果還恢復不了就是流氓軟體,如果想乾乾凈凈,只有重裝系統。。或者臨時使用360啟動管理,關閉啟動項中這個軟體的啟動運行及服務運行。
㈥ 怎樣才能關閉電腦的過濾器驅動程序啊
以下為復製成分 WDM(Windows Driver Mode)是微軟公司為Windows的驅動程序設計的一種通用的驅動程序模型。相比以前的KDM和VXD來說,他的性能更高、系統之間移植更加方便。所以,隨著系統的升級,WDM已經成為Windows 2000系統下驅動程序開發的主流。作為WDM模型之中一類特殊的驅動程序,過濾器驅動程序(Filter driver)可以在不更改現有驅動程序的情況下,方便地修改、增加現有驅動程序的功能。特別是對於Windows 2000已經提供了通用驅動程序的硬體設備,通過編寫過濾器驅動程序,可以以較小的代價擴展硬體現有的功能。因此具有很強的實際應用價值。 1 Windows 2000 I/O請求處理結構如圖1所示,Windows 2000是分態的操作系統。用戶應用程序運行在用戶態,操作系統代碼(如系統服務和設備驅動程序)在核心態下運行。用戶態程序只能調用Win32子系統提供的API來同設備交互,當請求傳遞到I/O管理器時,他進行必要的參數匹配和操作安全性檢查,然後由這個請求構造出合適的IRP(IO Request Package,I/O請求包),並把此IRP傳遞到適當的驅動程序去,並給應用程序一個消息,通知這次I/O操作還沒完成。驅動程序一般通過硬體抽象層來和硬體交互,從而完成I/O請求工作。驅動程序完成I/O操作後,他將調用一個特殊的內核服務常式來完成IRP。這時,I/O管理器把數據和結果返回給Win32和用戶應用程序。2 WDM驅動程序模型體系結構Windows驅動程序模型重新定義驅動程序分層使用了如圖2的層次結構。圖中左邊是一個設備對象堆棧。設備對象是系統為幫助軟體管理硬體而創建的數據結構。一個物理硬體可以有多個這樣的數據結構。處於堆棧最底層的設備對象稱為物理設備對象PDO(Physical Device Object),代表了設備和匯流排之間的連接。在設備對象堆棧的中間的對象稱為功能設備對象FDO(Functional Device Object),代表了設備的功能。在FDO的上面和下面還會有一些過濾器設備對象FIDO(Filter Device Object)。位於FDO上面的過濾器設備對象稱為上層過濾器,位於FDO下面(但仍在PDO之上)的過濾器設備對象稱為下層過濾器。匯流排驅動程序負責枚舉他的匯流排,這意味著發現匯流排上的全部設備和檢測設備何時被添加或刪除並為每個設備創建一個PDO。功能驅動程序知道如何控制設備的主要功能,他分層在匯流排驅動程序的上面。功能驅動程序創建一個功能設備對象,放在設備棧中。對匯流排上的所有設備,匯流排過濾驅動程序被加在匯流排驅動程序之上;設備過濾驅動程序僅對特定的設備添加。上層的過濾驅動程序在功能驅動程序之上,而下層過濾驅動程序在功能驅動程序之下。這種層次結構可以使I/O請求過程更加明了。I/O管理器發送的IRP,先被送到設備堆棧的上層過濾器驅動程序(FIDO),他可以根據要求決定IRP的處理方式,是沿著設備棧繼續向下傳,或者是做一些額外的處理。依次,每一層驅動程序都可以決定如何處理IRP。高層的驅動程序可以把請求劃分成更簡單的請求並傳遞給下層驅動程序。中間層次的驅動程序進一步處理請求,將一個IRP中的請求劃分為若干個小的請求並傳給下層驅動程序。最後,最低層的驅動程序與硬體打交道。因此一些IRP在到達匯流排程序之前,在設備棧傳遞過程中可能就被過濾掉了。 3 過濾器驅動程序過濾驅動程序是一種中間驅動程序,他位於其他的驅動程序層次之間。過濾驅動程序可以監視、攔截和修改IRP流,在不影響其他驅動程序的前提下提供一些附加的功能。他的功能可分為:(1)利用過濾器驅動程序修改現有功能驅動程序的行為而不必重新編寫功能驅動程序。(2)上層過濾器驅動程序在功能驅動程序之前看到IRP,可以很方便地為用戶提供額外的特徵。還可以修正功能驅動程序或硬體存在的毛病或缺陷。(3)下層過濾器驅動程序在功能驅動程序要向匯流排驅動程序發送IRP時看到IRP。可以監視、攔截、修改功能驅動程序要執行的匯流排操作流,截獲數據,進行必要的數據處理,再將處理過的數據傳遞下去,實現一定的數據處理功能。 (4)下層過濾器驅動程序可以實現驅動程序的匯流排無關性,使功能驅動程序完全獨立於匯流排結構而不直接與設備對話。針對不同的匯流排編寫不同的下層過濾器,每個下層過濾器對應一個匯流排類型。當功能驅動程序需要與硬體對話時,他只需向相應的下層過濾器驅動程序發送IRP即可。4 過濾器驅動程序設計過濾器驅動程序設計與功能驅動程序相似。這里限於篇幅主要討論一下過濾器驅動程序設計中與功能驅動程序相區別的幾個關鍵的技術要點。4.1 DriverEntry常式DriverEntry常式是驅動程序的人口點。當I/O管理器裝入驅動程序時,他調用DriverEntry常式用來初始化驅動程序范圍的數據結構和資源,包括輸出該驅動程序的其他人口點,初始化該驅動程序使用的特定對象,並設置驅動程序系統資源。與功能驅動程序相區別的是:他必須為每種類型的IRP都安裝派遣函數,而不僅僅只是其希望處理的IRP。4.2 AddDevice常式AddDevice函數的基本職責是創建一個設備對象並把他連接到以物理設備對象PDO為底的設備堆棧中,並負責設備對象初始化。與功能驅動程序相區別的是:過濾驅動程序創建的設備對象可能是2種,一種是不命名的過濾設備對象,過濾器工作時把這個無名的設備對象連接到以物理設備對象PDO為底的設備堆棧中。一種是為了和用戶程序通信而創建的命名的設備對象並不連接到以物理設備對象PDO為底的設備堆棧中。命名可以採用2種方法:第一種方法是採用可顯示的"硬編碼"符號鏈接名,用戶態程序必須把設備名硬編碼到源代碼中;另外一種方法是使用設備介面,每個設備介面是由一個全局惟一標志符GUID標志。設備注冊為一個特定的設備介面就創建了一個符號鏈接。相關步驟如下:(1)調用IoCreateDevke創建過濾設備對象,並建立一個私有的設備擴展對象。(2)寄存一個或多個設備介面,以便應用程序能知道設備的存在。另外,還可以給出設備名並創建符號連接。(3)初始化設備擴展和設備對象的F1ag成員。(4)調用IOAttachDevkeToDeviceStack函數把新設備對象放到堆棧上。具體實現程序如下:NTSTATUS AddDevice (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT pdo){PDEVICE_OBJECT fido=NULL;//創建沒有設備名的過濾設備對象NTSTATUS status=IoCreateDevice (DriverObjeot,sizeof (DEVICE-EXTENSION),NULL,FILE_DEVICE_UNKNOWN,0,FALSE,&fido);if(!NT_SUCCESS(status)) return status;//初始化設備擴展和設備對象的Flag成員PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fido->DeviceExtension;pdx->DeviceObject=fido;pdx->Pdo=pdo;pdx->eDeviceType =FILTER-p.htm" target="_blank" title="FILTER貨源和PDF資料">FILTER;//把沒有設備名的設備對象放到堆棧上PDEVICE- OBJECT fdo =IoAttachDeviceToDeviceStack (fido,pdo);pdx->TopDevObj=fdo;fido->Flags ︱=pdo->F1ags&(DO_DIRECT-IO ︱DO-BUFFERED-IO ︱ DO_POWER_PAGABLE ︱DO_POWER_INRUSH);………//建立一個命名的設備對象創建符號鏈接CreateSymbOlicLink (DriverObject,pdo);return STATUS_SUCCESS;}4.3 派遣常式派遣常式處理來自應用程序的打開、關閉、讀、寫等I/O請求命令。與功能驅動程序的區別是:過濾器驅動程序不能影響其他驅動程序接受IRP。對於未知的IRP或不處理的IRP過濾驅動程序的原則是必須沿設備棧傳遞下去。因此他必須為每種類型的IRP都安裝派遣函數,而不僅僅只是其希望處理的IRP。對於希望處理的IRP必須指定特殊的派遣函數,直接用CompleteIRP來完成接收到的這類IRP,不往下層傳送。這里由DispatchDeviceControl處理來自應用程序的所有希望處理的I/O操作命令。通常採用給予所有自定義的I/O請求代碼的SWITCH-p.htm" target="_blank" title="SWITCH貨源和PDF資料">SWITCH語句,而對於每個命令使用相應的處理函數。下面列出了主要的代碼框架:NTSTATUS DispatchDeviceControl (PDEVICE_OBJECT fido,PIRP Irp){NTSTATUS status;PDEVICE_EXTENSION pdx=(PDEVICE_EXTENSION)fido->DeviceExtension;PlO_STACK_LOCATION IrpStack =IoGetCurrentlrpStackLocation(1rp);//取I/O控制命令代碼ULONG IoControlCode = IrpStack >Parameters.DeviceloContr01.IoControlCode;switch(IoControlCode){case IOCTL-XXX:…… //處理I/O控制命令代碼case IOCTL-XXX:……default:……break;}//完成接收到的IRPIoCompleteRequest(Irp,IO_NO_INCREMENT);……return status;}對於不需要處理的IRP則交由DispatchAny常式處理,將IRP沿著設備棧直接傳遞下去:NTSTATUS DispatchAny(PDEVICE_OBJECT fido,PIRP Irp){PDEVICE_ EXTENSION pdx=(PDEVICE-EXTENSION)fido->DeviceExtension//使堆棧指針少前進一步。IoSkipCurrentlrpStackLocation(hp);Status=IoCallDriver(pdx->LowerDeviceObject,Irp);……return status;4.4 Unload常式功能在Unload常式中,驅動程序必須釋放所有創建的對象和所有分配給驅動程序的資源。5 結 語筆者就採用在Windows提供的USB音效卡驅動程序下方插入自己編寫的下層過濾器驅動程序實現了對USB音效卡輸出的數據流的截獲並進行語音信號處理,取得了不錯的效果,現已投入實際應用。可見過濾器驅動程序作為一類特殊的驅動程序,它可以以較小的代價實現對驅動數據流的截獲,修改、增加現有驅動常需的功能,具有很強的實用性。
類別:驅動 | 添加到搜藏 | 瀏覽(254) | 評論 (0) 上一篇:VMware虛擬機中如何安裝VMWare-T... 下一篇:今天離婚,你得抱我出門 相關文章: �6�1Windows文件系統的過濾器驅動程... 最近讀者: 登錄後,您就出現在這里。 蝶舞360°jacky85chan 網友評論:
㈦ USB匯流排過濾驅動中獲取設備描述符後哪個標識表示設備是藍牙
推測是設備要來求的usb介面版本自較高造成的。
現在很多筆記本電腦都是兩個usb3.0或者3.1介面搭一個usb2.0介面。
usb設備是要求usb3.0以上的,而那個介面是usb2.0的,所以無法讀齲 除此之外,也有可能是接觸不良等故障
㈧ 如何構造一個簡單的USB過濾驅動程序
一、基本原理抄 我們知道,WDM(和KDM)是分層的,在構造設備棧時,IO管理器可以使一個設備對象附加到另外一個初始驅動程序創建的設備對象上。與初始設備對象相關的驅動程序決定的IRP,也將被發送到附加的設備對象相關的驅動程序上。
㈨ 找不到PCI 匯流排 0、設備 31、功能 5驅動
去主板的官方網下載個主板驅動 如果自己有主板驅動的光碟:你可以右鍵點擊我的電腦,選擇屬性,在硬體標簽里選擇設備管理器,沒裝的驅動會以黃色的問號顯示,右鍵選擇屬性,點擊安裝驅動程序,按照提示選擇,最後OK!