使用元件 INF 檔案
如果您想要在 Windows 10 上包含要與裝置搭配使用的使用者模式軟體,您有下列選項可建立 符合 DCH 規範的驅動程式:
方法 | 案例 |
---|---|
硬體支援應用程式 (HSA) | 封裝為 UWP app 的裝置附加元件軟體,可從 Microsoft 市集傳遞及服務。 建議的方法。 |
軟體元件 | 裝置附加元件軟體是 MSI 或 EXE 二進位檔、Win32 服務,或是使用 AddReg 和 CopyFiles 安裝的軟體。 參考的二進位檔只會在桌面版本上執行(家用版、專業版和企業版)。 參考的二進位檔將不會在 Windows 10S 上執行。 |
軟體元件是可安裝一或多個軟體模組的個別獨立驅動程式套件。 已安裝的軟體可增強裝置的值,但對於基本裝置功能而言並非必要,而且不需要相關聯的函式驅動程序服務。
此頁面提供軟體元件的使用指導方針。
開始使用
若要建立元件,擴充功能 INF 檔案會在 INF DDInstall.Components 區段中指定 INF AddComponent 指示詞一或多次。 針對擴充 INF 檔案中所參考的每個軟體元件,系統會建立虛擬軟體列舉的子裝置。 多個驅動程式套件可以參考相同的軟體元件。
只要啟動父裝置,虛擬設備子系就可以獨立更新,就像任何其他裝置一樣。 建議您將功能從維護的觀點分成許多不同的群組,然後為每個群組建立一個軟體元件。
您將為每個軟體元件提供 INF 檔案。
如果您的軟體元件 INF 指定 AddSoftware 指示詞,則元件 INF:
- 必須是 通用 INF 檔案。
- 必須指定 SoftwareComponent 安裝類別。
您可以指定 AddSoftware 指示詞 一或多次。
注意
使用 AddSoftware 指示詞的類型 2 時,不需要使用元件 INF。 指示詞可在任何 INF 中成功使用。 不過,必須從元件 INF 使用 Type 1 的 AddSoftware 指示詞。
此外,軟體元件裝置上的任何 INF (元件或未)相符:
- 可以使用 AddService 指示詞指定 Win32 用戶服務。
- 可以使用 INF AddReg 指示詞和 INF CopyFiles 指示詞來安裝軟體。
- 不需要函式驅動程序服務。
- 用戶可以從父裝置獨立卸載。
您可以在適用於通用驅動程式的驅動程式套件安裝工具組中,找到元件 INF 的範例。
注意:為了讓軟體列舉元件裝置運作,其父系必須啟動。 如果父裝置沒有可用的驅動程式,驅動程式開發人員可以建立自己的驅動程式,並選擇性地利用傳遞驅動程式 「umpass.sys」。。 此驅動程式包含在 Windows 中,實際上除了啟動裝置之外,也不會執行任何動作。 為了使用umpass.sys,開發人員應該針對每個可能的 [DDInstall.*] 區段使用 DDInstall 區段中的 Include/Needs INF 指示詞,對應 [UmPass.*] 區段,如下所示,不論 INF 是否指定該區段的任何指示詞:
[DDInstall]
Include=umpass.inf
Needs=UmPass
; also include any existing DDInstall directives
[DDInstall.HW]
Include=umpass.inf
Needs=UmPass.HW
; also include any existing DDInstall.HW directives
[DDInstall.Interfaces]
Include=umpass.inf
Needs=UmPass.Interfaces
; also include any existing DDInstall.Interfaces directives
[DDInstall.Services]
Include=umpass.inf
Needs=UmPass.Services
; also include any existing any DDInstall.Services directives
從軟體元件存取裝置
若要擷取與軟體元件相關聯之裝置的裝置實例標識碼,請使用 INF AddSoftware 指示詞區段中的 SoftwareArguments 值搭配<<DeviceInstanceID>>
運行時間內容變數。
可執行文件接著可以從其傳入自變數清單中擷取軟體元件的裝置實例標識碼。
接下來,如果軟體元件是以通用 目標平臺為目標,請使用下列程式:
- 使用 軟體元件的裝置實例標識符呼叫CM_Locate_DevNode ,以擷取裝置句柄。
- 呼叫 CM_Get_Parent 以擷取該裝置父系的句柄。 此父系是使用 INF AddComponent 指示詞新增軟體元件的裝置。
- 然後,若要擷取父系的裝置實例標識碼,請從 CM_Get_Parent 呼叫句柄上的CM_Get_Device_ID。
如果軟體元件只以桌面 目標平台 為目標,請使用下列程式:
- 呼叫 SetupDiCreateDeviceInfoList 以建立空的裝置資訊集。
- 使用軟體元件裝置的裝置實例標識符呼叫 SetupDiOpenDeviceInfo。
- 使用
DEVPKEY_Device_Parent
呼叫 SetupDiGetDeviceProperty 來擷取父系的裝置實例標識碼。
範例
下列範例示範如何使用軟體元件來安裝使用圖形卡可執行檔的控制面板。
驅動程式套件 INF 檔案
[Version]
Signature = "$WINDOWS NT$"
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
Provider = %CONTOSO%
DriverVer = 06/21/2006,1.0.0.0
CatalogFile = ContosoGrfx.cat
PnpLockdown = 1
[Manufacturer]
%CONTOSO%=Contoso,NTx86
[Contoso.NTx86]
%ContosoGrfx.DeviceDesc%=ContosoGrfx, PCI\VEN0001&DEV0001
[ContosoGrfx.NT]
;empty
[ContosoGrfx.NT.Components]
AddComponent = ContosoControlPanel,, Component_Inst
[Component_Inst]
ComponentIDs = VID0001&PID0001&SID0001
[Strings]
CONTOSO = "Contoso Inc."
ContosoGrfx.DeviceDesc = "Contoso Graphics Card Extension"
軟體元件 INF 檔案
[Version]
Signature = "$WINDOWS NT$"
Class = SoftwareComponent
ClassGuid = {5c4c3332-344d-483c-8739-259e934c9cc8}
Provider = %CONTOSO%
DriverVer = 06/21/2006,1.0.0.0
CatalogFile = ContosoCtrlPnl.cat
PnpLockdown = 1
[SourceDisksNames]
1 = %Disk%,,,""
[SourceDisksFiles]
ContosoCtrlPnl.exe = 1
[DestinationDirs]
DefaultDestDir = 13
[Manufacturer]
%CONTOSO%=Contoso,NTx86
[Contoso.NTx86]
%ContosoCtrlPnl.DeviceDesc%=ContosoCtrlPnl, SWC\VID0001&PID0001&SID0001
[ContosoCtrlPnl.NT]
CopyFiles=ContosoCtrlPnl.NT.Copy
[ContosoCtrlPnl.NT.Copy]
ContosoCtrlPnl.exe
[ContosoCtrlPNl.NT.Services]
AddService = , %SPSVCINST_ASSOCSERVICE%
[ContosoCtrlPnl.NT.Software]
AddSoftware = ContosoGrfx1CtrlPnl,, Software_Inst
[Software_Inst]
SoftwareType = 1
SoftwareBinary = %13%\ContosoCtrlPnl.exe
SoftwareArguments = <<DeviceInstanceID>>
SoftwareVersion = 1.0.0.0
[Strings]
SPSVCINST_ASSOCSERVICE = 0x00000002
CONTOSO = "Contoso"
ContosoCtrlPnl.DeviceDesc = "Contoso Control Panel"
驅動程式驗證和提交程式與一般 INF 的元件 INF 相同。 如需詳細資訊,請參閱 Windows HLK 用戶入門。
如需安裝類別的詳細資訊,請參閱 廠商可用的系統定義裝置安裝類別。