使用元件 INF 檔案
如果您想要包含使用者模式軟體以搭配Windows 10上的裝置使用,您有下列選項可建立符合 DCH 規範的驅動程式:
方法 | 案例 |
---|---|
HSA) (硬體支援應用程式 | 封裝為 UWP 應用程式的裝置附加元件軟體,會從 Microsoft Store 傳遞及服務。 建議的方法。 |
軟體元件 | 裝置附加元件軟體是 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。 不過,類型 1 的 AddSoftware 指示詞必須從元件 INF 使用。
此外,任何 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 指示詞區段中的 <<DeviceInstanceID>>
SoftwareArguments值搭配執行時間內容變數。
可執行檔接著可以從其傳入引數清單中擷取軟體元件的裝置實例識別碼。
接下來,如果軟體元件是以通用 目標平臺為目標,請使用下列程式:
- 使用軟體元件的裝置實例識別碼 呼叫 CM_Locate_DevNode ,以擷取裝置控制碼。
- 呼叫 CM_Get_Parent ,以擷取該裝置父系的控制碼。 此父系是使用 INF AddComponent 指示詞新增軟體元件的裝置。
- 然後,若要擷取父代的裝置實例識別碼,請從 CM_Get_Parent 呼叫 控制碼上的 CM_Get_Device_ID。
如果軟體元件僅以桌面 目標平臺為目標 ,請使用下列程式:
- 呼叫 SetupDiCreateDeviceInfoList 以建立空的裝置資訊集。
- 使用軟體元件裝置的裝置實例識別碼呼叫 SetupDiOpenDeviceInfo 。
- 使用 呼叫 SetupDiGetDeviceProperty
DEVPKEY_Device_Parent
以擷取父系的裝置實例識別碼。
範例
下列範例示範如何使用軟體元件,使用圖形配接器的可執行檔來安裝控制台。
驅動程式套件 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 消費者入門。
如需安裝類別的詳細資訊,請參閱 廠商可用的系統定義裝置安裝類別。