Bagikan melalui


Menggunakan File INF Ekstensi

Sebelum Windows 10, Windows memilih satu paket driver untuk diinstal untuk perangkat tertentu. Hal ini mengakibatkan paket driver besar dan kompleks yang menyertakan kode untuk semua skenario dan konfigurasi, dan setiap pembaruan kecil memerlukan pembaruan untuk seluruh paket driver. Mulai dari Windows 10, Anda dapat membagi fungsionalitas INF menjadi beberapa komponen, yang masing-masing dapat dilayanakan secara independen. Paket driver inti yang diinstal pada perangkat sekarang disebut paket driver dasar dan ditangani oleh sistem dengan cara yang sama paket driver telah ditangani sebelum Windows 10. Untuk memperluas fungsionalitas paket driver dasar, berikan inf ekstensi dalam paket driver terpisah. INF ekstensi:

  • Dapat disediakan oleh perusahaan yang berbeda dan diperbarui secara independen dari INF dasar.

  • Menggunakan sintaks INF yang sama dengan INF dasar, tetapi dapat memperluas INF dasar untuk kustomisasi atau spesialisasi.

  • Meningkatkan nilai perangkat, tetapi tidak diperlukan agar paket driver dasar berfungsi. Dengan tidak adanya inf ekstensi, sistem harus dapat melakukan booting dan terhubung ke jaringan hanya dengan paket driver dasar. Perangkat input yang terpasang dalam sistem, seperti keyboard, harus dapat berfungsi dengan setidaknya fungsionalitas dasar tanpa INF ekstensi apa pun.

  • Harus berupa file INF universal.

Setiap perangkat harus memiliki satu paket driver dasar yang terinstal di atasnya, dan dapat secara opsional memiliki satu atau beberapa INF ekstensi yang terkait dengannya. INF ekstensi tidak akan dapat diinstal pada perangkat jika tidak ada paket driver dasar yang ada untuk juga diinstal pada perangkat.

Skenario umum di mana Anda mungkin menggunakan INF ekstensi meliputi:

  • Mengubah setelan yang disediakan dalam paket driver dasar, seperti menyesuaikan nama yang mudah diingat perangkat atau mengubah pengaturan konfigurasi perangkat keras.

  • Membuat satu atau beberapa komponen perangkat lunak dengan menentukan direktif INF AddComponent dan menyediakan file INF komponen.

  • Menyediakan pengaturan khusus untuk model atau faktor bentuk sistem yang meningkatkan pengalaman atau fungsionalitas perangkat, seperti data kalibrasi perangkat keras.

  • Menambahkan pengandar filter ke tumpukan perangkat.

Anda dapat menemukan kode sampel untuk beberapa skenario ini dalam contoh di bawah ini. Lihat juga Contoh Paket Driver yang Mematuhi DCH, yang menjelaskan bagaimana sampel driver universal DCHU menggunakan INF ekstensi.

Bagaimana INF ekstensi dan paket driver dasar bekerja sama

Selama penginstalan perangkat, pengaturan dalam ekstensi INF diterapkan setelah pengaturan dalam paket driver dasar. Akibatnya, jika ekstensi INF dan paket driver dasar menentukan pengaturan yang sama, versi dalam ekstensi INF diterapkan. Demikian pula, jika paket driver dasar berubah, ekstensi INF tetap dan diterapkan melalui paket driver dasar baru. Jika beberapa INF ekstensi diinstal pada perangkat yang sama, tidak ada urutan yang telah ditentukan sebelumnya bahwa INF ekstensi akan diterapkan, sehingga satu ekstensi INF tidak dapat mengganti nilai secara deterministik yang disediakan oleh INF ekstensi yang berbeda. INF ekstensi berbeda yang ditargetkan pada perangkat yang sama tidak boleh mencoba mengubah pengaturan yang sama.

Sangat membantu untuk menyertakan komentar dalam paket driver dasar yang menjelaskan entri mana yang dapat ditimpa oleh INF ekstensi, serta rentang dan batasan nilai parameter yang berlaku.

Menentukan ExtensionId

Saat Anda menulis ekstensi INF, Anda menghasilkan GUID khusus yang disebut ExtensionId, yang merupakan entri di bagian [Versi] INF.

Sistem mengidentifikasi kemungkinan INF ekstensi untuk perangkat tertentu dengan mencocokkan ID perangkat keras dan ID perangkat yang kompatibel dengan yang ditentukan dalam INF ekstensi di bagian Model yang berlaku untuk sistem tersebut.

Di antara semua kemungkinan INF ekstensi yang menentukan nilai ExtensionId yang sama, sistem hanya memilih satu untuk menginstal dan menerapkan pengaturannya atas paket driver dasar. Tanggal driver dan versi driver yang ditentukan dalam INF digunakan, dalam urutan tersebut, untuk memilih satu INF antara beberapa INF ekstensi dengan ExtensionId yang sama.

Untuk mengilustrasikan, pertimbangkan skenario berikut yang menyertakan perangkat hipotetis yang ada tiga INF ekstensi:

Diagram memperlihatkan bagaimana INF dasar dan INF ekstensi dipilih.

Nilai ExtensionId {A} dan {B} diperlihatkan dalam tanda kurung kurawal, dan peringkat setiap paket driver dasar diperlihatkan di pita banner.

Pertama, sistem memilih paket driver dasar dengan peringkat terbaik dan versi tertinggi.

Selanjutnya, sistem memproses INF ekstensi yang tersedia. Dua memiliki nilai ExtensionId , dan satu memiliki nilai {A}ExtensionId {B}. Dari dua pertama, katakanlah bahwa tanggal pengemudi adalah sama. Tiebreaker berikutnya adalah versi driver, sehingga sistem memilih ekstensi INF dengan v2.0.

INF ekstensi dengan nilai ExtensionId unik juga dipilih. Sistem menerapkan paket driver dasar untuk perangkat, lalu menerapkan dua INF ekstensi untuk perangkat tersebut.

File INF ekstensi selalu diterapkan setelah paket driver dasar, tetapi tidak ada urutan yang ditentukan di mana INF ekstensi diterapkan.

Membuat inf ekstensi

Berikut adalah entri yang Anda butuhkan untuk menentukan INF sebagai inf ekstensi.

  1. Tentukan nilai-nilai ini untuk Kelas dan ClassGuid di bagian Versi. Untuk informasi selengkapnya tentang kelas penyiapan, lihat Kelas Penyiapan Perangkat yang Ditentukan Sistem yang Tersedia untuk Vendor.

    [Version]
    ...
    Class     = Extension
    ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
    ...
    
  2. Berikan entri ExtensionId di bagian [Versi]. Buat GUID baru untuk versi awal ekstensi INF, atau gunakan kembali GUID terakhir untuk pembaruan berikutnya dari INF ekstensi awal.

    ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
    

Organisasi hanya dapat menggunakan ExtensionID yang dimilikinya. Untuk informasi tentang mendaftarkan ID Ekstensi, lihat Mengelola pengiriman perangkat keras di dasbor Windows Hardware Dev Center.

  1. Jika Anda memperbarui INF ekstensi, pertahankan ExtensionId tetap sama dan tingkatkan versi dan tanggal yang ditentukan oleh arahan DriverVer. Untuk nilai ExtensionId tertentu, PnP memilih INF dengan DriverVer tertinggi.

    Catatan

    Jika INF ekstensi Anda menargetkan Windows 10 S, lihat Windows 10 dalam mode S Persyaratan Driver untuk informasi tentang penginstalan driver pada versi Windows tersebut.

  2. Di bagian Model INF, tentukan satu atau beberapa perangkat keras dan ID yang kompatibel yang cocok dengan perangkat target. Perangkat keras dan ID yang kompatibel ini tidak perlu cocok dengan perangkat keras dari paket driver dasar. Biasanya, inf ekstensi mencantumkan ID perangkat keras yang lebih spesifik daripada paket driver dasar, dengan tujuan lebih mengkhususkan konfigurasi driver tertentu. Misalnya, paket driver dasar mungkin menggunakan ID perangkat keras PCI dua bagian, sementara EKSTENSI INF menentukan ID perangkat keras PCI empat bagian, seperti berikut:

    [DeviceExtensions.NTamd64]
    %Device.ExtensionDesc% = DeviceExtension_Install, PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XXXX
    

    Atau, INF ekstensi mungkin mencantumkan ID perangkat keras yang sama dengan paket driver dasar, misalnya jika perangkat sudah ditargetkan secara sempit, atau jika paket driver dasar sudah mencantumkan ID perangkat keras yang paling spesifik.

    Dalam beberapa kasus, INF ekstensi mungkin menyediakan ID perangkat yang kurang spesifik, seperti ID yang kompatibel, untuk menyesuaikan pengaturan di seluruh set perangkat yang lebih luas.

    Penargetan CHID dapat digunakan jika ID perangkat keras empat bagian tidak dimungkinkan atau tidak cukup ketat.

  3. Jangan tentukan layanan dengan SPSVCINST_ASSOCSERVICE. INF ekstensi tidak dapat menyediakan driver fungsi untuk perangkat. Namun, INF ekstensi dapat menentukan layanan lain, seperti driver filter untuk perangkat. Untuk informasi selengkapnya tentang menentukan layanan, lihat Petunjuk AddService INF.

Dalam kebanyakan kasus, Anda akan mengirimkan paket driver INF ekstensi ke Pusat Dev Perangkat Keras secara terpisah dari paket driver dasar. Untuk contoh tentang cara mengemas INF ekstensi, dan tautan ke kode sampel, lihat Contoh Paket Driver yang Mematuhi DCH.

Proses validasi dan pengiriman driver sama untuk INF ekstensi seperti untuk paket driver dasar. Untuk informasi selengkapnya, lihat Memulai Windows HLK.

Menghapus instalan driver ekstensi

Untuk menghapus paket driver ekstensi dari sistem dan menghapus instalannya dari perangkat apa pun yang menggunakannya, gunakan perintah PnPUtil delete-driver dengan uninstall bendera . Ini memungkinkan paket driver ekstensi dihapus dari perangkat tanpa menghapus paket driver dasar.

Temukan nama oem<#>.inf dari paket driver untuk menghapus instalan dan menggunakan pnputil /delete-driver oem<#>.inf /uninstall.

pnputil /enum-drivers dapat digunakan untuk membantu mengidentifikasi nama oem<#>.inf yang sesuai.

Contoh 1: Menggunakan INF ekstensi untuk mengatur nama perangkat yang mudah diingat

Dalam satu skenario umum, produsen perangkat (IHV) menyediakan paket driver dasar, dan kemudian pembuat sistem (OEM) menyediakan INF ekstensi yang melengkapi dan dalam beberapa kasus mengambil alih konfigurasi dan pengaturan paket driver dasar. Cuplikan berikut adalah INF ekstensi lengkap yang menunjukkan cara mengatur nama yang mudah diingat perangkat.

[Version]
Signature   = "$WINDOWS NT$"
Class       = Extension
ClassGuid   = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider    = %CONTOSO%
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
DriverVer   = 05/28/2013,1.0.0.0
CatalogFile = delta.cat
PnpLockdown = 1

[Manufacturer]
%CONTOSO% = DeviceExtensions,NTamd64

[DeviceExtensions.NTamd64]
%Device.ExtensionDesc% = DeviceExtension_Install, PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XXXX

[DeviceExtension_Install]
; No changes

[DeviceExtension_Install.HW]
AddReg = FriendlyName_AddReg

[FriendlyName_AddReg]
HKR,,FriendlyName,, "New Device Friendly Name"

[Strings]
CONTOSO              = "Contoso"
Device.ExtensionDesc = "Sample Device Extension"

Contoh 2: Menggunakan INF ekstensi untuk menginstal perangkat lunak tambahan

Cuplikan berikut adalah INF ekstensi lengkap yang disertakan dalam toolkit penginstalan paket Driver untuk driver universal. Contoh ini menggunakan direktif INF AddComponent untuk membuat komponen yang menginstal layanan dan yang dapat dieksekusi. Untuk informasi selengkapnya tentang apa yang dapat Anda lakukan di INF komponen, lihat Menggunakan File INF Komponen.

Untuk mengakses file ini secara online, lihat osrfx2_DCHU_extension.inx.

;/*++
;
;Copyright (c) Microsoft Corporation.  All rights reserved.
;
;   THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
;   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
;   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
;   PURPOSE.
;
;Module Name:
;
;    osrfx2_DCHU_extension.INF
;
;Abstract:
;
;    Extension inf for the OSR FX2 Learning Kit
;
;--*/

[Version]
Signature   = "$WINDOWS NT$"
Class       = Extension
ClassGuid   = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider    = %ManufacturerName%
ExtensionId = {3846ad8c-dd27-433d-ab89-453654cd542a}
CatalogFile = osrfx2_DCHU_extension.cat
DriverVer   = 05/16/2017,15.14.36.721
PnpLockdown = 1

[Manufacturer]
%ManufacturerName% = OsrFx2Extension, NT$ARCH$

[OsrFx2Extension.NT$ARCH$]
%OsrFx2.ExtensionDesc% = OsrFx2Extension_Install, USB\Vid_045e&Pid_94aa&mi_00
%OsrFx2.ExtensionDesc% = OsrFx2Extension_Install, USB\Vid_0547&PID_1002

[OsrFx2Extension_Install.NT]
CopyInf=osrfx2_DCHU_usersvc.inf

[OsrFx2Extension_Install.NT.HW]
AddReg = OsrFx2Extension_AddReg
AddReg = OsrFx2Extension_COMAddReg

[OsrFx2Extension_AddReg]
HKR, OSR, "OperatingParams",, "-Extended"
HKR, OSR, "OperatingExceptions",, "x86"

; Add all registry keys to successfully register the
; In-Process ATL COM Server MSFT Sample.
[OsrFx2Extension_COMAddReg]
HKCR,AppID\ATLDllCOMServer.DLL,AppID,,"{9DD18FED-55F6-4741-AF25-798B90C4AED5}"
HKCR,AppID\{9DD18FED-55F6-4741-AF25-798B90C4AED5},,,"ATLDllCOMServer"
HKCR,ATLDllCOMServer.SimpleObject,,,"SimpleObject Class"
HKCR,ATLDllCOMServer.SimpleObject\CLSID,,,"{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}"
HKCR,ATLDllCOMServer.SimpleObject\CurVer,,,"ATLDllCOMServer.SimpleObject.1"
HKCR,ATLDllCOMServer.SimpleObject.1,,,"SimpleObject Class"
HKCR,ATLDllCOMServer.SimpleObject.1\CLSID,,,"{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084},,,"SimpleObject Class"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\InprocServer32,,%REG_EXPAND_SZ%,"%%SystemRoot%%\System32\ATLDllCOMServer.dll"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\InprocServer32,ThreadingModel,,"Apartment"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\ProgID,,,"ATLDllCOMServer.SimpleObject.1"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\Programmable,,%FLG_ADDREG_KEYONLY%
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\TypeLib,,,"{9B23EFED-A0C1-46B6-A903-218206447F3E}"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\VersionIndependentProgID,,,"ATLDllCOMServer.SimpleObject"

[OsrFx2Extension_Install.NT.Components]
AddComponent = osrfx2_DCHU_component,,OsrFx2Extension_ComponentInstall
AddComponent = osrfx2_DCHU_usersvc,,OsrFx2Extension_ComponentInstall_UserSvc

[OsrFx2Extension_ComponentInstall]
ComponentIds=VID_045e&PID_94ab

[OsrFx2Extension_ComponentInstall_UserSvc]
ComponentIds=VID_045e&PID_94ac

[Strings]
ManufacturerName = "Contoso"
OsrFx2.ExtensionDesc = "OsrFx2 DCHU Device Extension"
REG_EXPAND_SZ = 0x00020000
FLG_ADDREG_KEYONLY = 0x00000010

Untuk informasi tentang cara menggunakan EXTENSION INF untuk menginstal driver filter, lihat Pemesanan driver filter perangkat.

Untuk meningkatkan ekstensibilitas, sebaiknya IHV menempatkan fungsionalitas opsional dalam templat INF ekstensi.

Kompatibilitas mundur

Setiap perubahan pada paket driver dasar harus diuji secara menyeluruh untuk memastikan bahwa itu tidak memutus kompatibilitas mundur untuk INF ekstensi yang ada.

Saat mengelola paket driver dasar, ikuti praktik terbaik berikut:

  • Rentang nilai parameter dokumen dan batasan baik dalam komentar kode maupun dalam dokumen desain. Perubahan di masa mendatang harus sesuai dengan rentang yang ditentukan.
  • Untuk mendukung rentang baru, tambahkan parameter opsional (tanpa nilai default).

Mengirimkan INF ekstensi untuk sertifikasi

Untuk informasi terperinci tentang cara bekerja dengan INF Ekstensi di Pusat Dev Perangkat Keras, lihat Bekerja dengan INF Ekstensi di Dasbor Pusat Dev Perangkat Keras Windows.

Bekerja dengan INF Ekstensi di Pusat Mitra

Contoh Paket Driver yang Sesuai dengan DCH

Menggunakan File INF Universal

Mulai mengembangkan driver Windows

Toolkit penginstalan paket driver untuk driver universal