动态

详情 返回 返回

UMDF驅動開發入門:二 詳解INF文件與設備類選擇 - 动态 详情

在Windows驅動開發中,UMDF為用户模式驅動程序提供了一個安全穩定的開發框架。而INF文件作為驅動安裝的核心,其正確配置對於驅動能否正常工作至關重要。這篇博客詳細介紹UMDF驅動的INF文件配置,特別是設備類的選擇與配置。實可以把INF文件理解為驅動的"安裝説明書" - 它告訴Windows系統:

  • 這個驅動叫什麼名字

  • 應該安裝到哪裏

  • 屬於什麼類型的設備

  • 需要哪些文件

微軟Class詳細説明地址:System-Defined Device Setup Classes Available to Vendors - Windows drivers | Microsoft Learn

常見設備安裝類速查表
Class Name ClassGuid 簡要説明
System {4d36e97d-e325-11ce-bfc1-08002be10318} 軟件設備或未指定類別的系統級設備,顯示在設備管理器的"系統設備"下。
SoftwareComponent {5c4c3332-344d-483c-8739-259e934c9cc8} 軟件組件,顯示在"軟件組件"下,適用於不關聯特定硬件的驅動或軟件更新。
Biometric {53d29ef7-377c-4d14-864b-eb3a85769359} 生物識別設備,如指紋掃描器。
Display {4d36e968-e325-11ce-bfc1-08002be10318} 顯示適配器(顯卡)。
HIDClass {745a17a0-74d3-11d0-b6fe-00a0c90f57da} 人機接口設備,如鍵盤、鼠標等。
Media {4d36e96c-e325-11ce-bfc1-08002be10318} 音頻和視頻設備,顯示在"聲音、視頻和遊戲控制器"下。
Net {4d36e972-e325-11ce-bfc1-08002be10318} 網絡適配器。
Ports {4d36e978-e325-11ce-bfc1-08002be10318} 串行和並行端口。
USB {36fc9e60-c465-11cf-8056-444553540000} USB主機控制器和集線器。
WPD {eec5ad98-8080-425f-922a-dabf3de3f69a} Windows便攜設備,如手機、媒體播放器。
INF文件:驅動的"身份證"和"説明書"

INF文件其實就是個文本文件,但它包含了驅動安裝所需的所有信息。主要完成四個任務:

  1. 自我介紹 - 我叫什麼,版本多少,誰開發的

  2. 文件説明 - 需要複製哪些文件,放到哪裏

  3. 設備分類 - 我屬於哪類設備(最重要!)

  4. 服務註冊 - 如何啓動和運行

解剖INF文件:一看就懂的結構

1. 版本信息 - "身份證頁"

[Version]
Signature = "$WINDOWS NT$"   // 固定寫法,表示這是Windows驅動
Class = SampleDevice         // 設備類型:決定在設備管理器哪裏顯示
ClassGuid = {GUID}           // 設備類型的唯一編號
Provider = %ManufacturerName% // 開發商名稱
DriverVer = 01/01/2024,1.0.0.0 // 驅動版本
CatalogFile = YourDriver.cat // 簽名文件(安全相關)

微軟Class詳細説明地址:https://learn.microsoft.com/en-us/windows-hardware/drivers/install/system-defined-device-setup-classes-available-to-vendors

2.文件管理 - "附件清單" 源文件節(SourceDisksNames/Files)

[SourceDisksNames]
1 = %DiskName%,,,""          // 磁盤標籤

[SourceDisksFiles]  
YourDriver.dll = 1,,         // 驅動文件在哪

[DestinationDirs]
YourDriver.DriverFiles = 12  // 驅動文件安裝到System32\drivers

3.設備安裝 - "安裝步驟" 設備安裝節(Device Installation)

[Manufacturer]
%ManufacturerName% = MyCompany,ntamd64  // 廠商信息

[MyCompany]
%DeviceName% = YourDevice_Install, Root\YourDevice  // 設備名稱和ID

[YourDevice_Install]
Include = umdf.inf           // 引用UMDF標準安裝步驟
Needs = UmdfDriverEntry      // 需要UMDF驅動入口
CopyFiles = YourDriver.DriverFiles //ceInstall

設備類的選擇

對於不涉及真實硬件的開發,主要就是兩個選擇:

System類 - "虛擬硬件"

把它想象成:創建一個虛擬的設備

[Version]
Class = System
ClassGuid = {4d36e97d-e325-11ce-bfc1-08002be10318}

適合場景:

  • 虛擬串口(讓軟件以為有額外的COM端口)

  • 虛擬攝像頭(視頻會議軟件的虛擬攝像頭)

  • 測試設備(模擬各種硬件進行測試)

特點:

  • 在"設備管理器"→"系統設備"中顯示

  • 應用程序可以用CreateFile打開設備

  • 支持所有Windows版本

SoftwareComponent類 - "純軟件服務"

把它想象成:安裝一個系統服務組件

[Version]  
Class = SoftwareComponent
ClassGuid = {5c4c3332-344d-483c-8739-259e934c9cc8}

適合場景:

  • 音頻處理插件(音效增強、降噪)

  • 視頻解碼器(支持新的視頻格式)

  • AI推理引擎(圖像識別、語音處理)

  • 安全服務組件(加密、驗證服務)

特點:

  • 在"設備管理器"→"軟件組件"中顯示

  • 通過專用API調用,不直接"打開設備"

  • 只支持Windows 10及以上版本

實際項目選擇指南

場景1:開發虛擬串口

需求:讓串口調試工具能連接到一個虛擬的COM端口
選擇:System類
原因:串口工具期望用CreateFile("COM3")這種方式打開設備

場景2:開發音頻特效插件

需求:為系統音頻添加實時混響效果
選擇: SoftwareComponent類 
原因:這是音頻處理服務,通過音頻API集成,不是獨立的"設備"

場景3:開發USB設備模擬器

需求:模擬一個USB鍵盤,讓系統認為插入了真實鍵盤
選擇:System類
原因:需要讓系統檢測到"硬件設備"存在

場景4:開發AI圖像識別服務

需求:提供圖像識別能力,供其他程序調用
選擇: SoftwareComponent類
原因:這是算法服務,應用程序應該通過API調用識別功能

強烈建議從System類開始,因為它的概念更直觀,掌握了基礎後,再學習SoftwareComponent類來開發更現代化的軟件組件。

user avatar hlinleanring 头像 ZhongQianwen 头像 Yzi321 头像 samhou 头像 u_16231477 头像 starrocks 头像 youqingyouyidedalianmao 头像 muzijun_68c14af5563a2 头像 artificer 头像 fanqiemao 头像 wunima 头像 liu_chen 头像
点赞 23 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.