Bagikan melalui


Menggunakan Ekstensi File INF

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 ekstensi INF dalam paket driver yang terpisah. Sebuah ekstensi INF:

  • 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. Ekstensi INF tidak bisa diinstal di perangkat jika tidak ada paket driver dasar yang tersedia untuk diinstal juga di 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 perintah 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 driver filter ke stak perangkat.

Anda dapat menemukan kode sampel untuk beberapa skenario ini dalam contoh di bawah ini. Juga lihat Contoh Paket Pengandar yang Sesuai dengan DCH, yang menjelaskan bagaimana contoh pengandar universal DCHU menggunakan ekstensi INF.

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 pasti dalam penerapannya, sehingga satu INF ekstensi tidak dapat secara pasti mengganti nilai yang disediakan oleh INF ekstensi lainnya. Ekstensi INF yang berbeda yang ditargetkan pada perangkat yang sama seharusnya tidak mencoba mengubah pengaturan yang sama.

Adalah bantuan untuk menyertakan komentar dalam paket driver dasar yang menjelaskan entri mana yang dapat diubah oleh INF ekstensi, dan juga 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 ekstensi INF yang menentukan nilai ExtensionId yang sama, sistem hanya memilih satu untuk menginstal dan menerapkan pengaturannya daripada paket driver dasar. Tanggal dan versi driver yang ditentukan dalam INF digunakan, sesuai urutan tersebut, untuk memilih satu INF dari beberapa INF ekstensi dengan ExtensionId yang sama.

Mengilustrasikan, pertimbangkan skenario berikut yang menyertakan perangkat hipotetis yang memiliki 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 dasar driver diperlihatkan pada pita banner.

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

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

INF 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 untuk penerapan file INF ekstensi tersebut.

Membuat ekstensi INF

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

  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 Persyaratan Driver Windows 10 dalam S Mode 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. ID perangkat keras dan kompatibel ini tidak perlu cocok dengan yang ada di paket driver dasar. Biasanya, ekstensi INF mencantumkan ID perangkat keras yang lebih spesifik dari paket driver utama, dengan tujuan mengkhususkan lebih lanjut 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, ekstensi INF mungkin menyediakan ID perangkat yang kurang spesifik, seperti ID yang kompatibel, untuk menyesuaikan pengaturan di seluruh kelompok 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, ekstensi INF dapat menentukan layanan lain, seperti driver penyaring 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 ekstensi INF, dan tautan ke contoh kode, 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.

Mencopot pemasangan driver ekstensi

Untuk menghapus paket driver ekstensi dari sistem dan menghapus instalannya dari perangkat apa pun yang menggunakannya, gunakan perintah PnPUtildelete-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 mencopot pemasangan dan gunakan 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. Potongan kode berikut adalah file INF ekstensi lengkap yang menunjukkan cara mengatur nama ramah 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 instalasi 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 dalam Komponen INF, 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,,"{00001111-aaaa-2222-bbbb-3333cccc4444}"
HKCR,AppID\{00001111-aaaa-2222-bbbb-3333cccc4444},,,"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 ke belakang

Perubahan pada paket driver dasar dan paket driver ekstensi harus diuji secara menyeluruh untuk memastikan bahwa perubahan tidak memecah kompatibilitas mundur untuk paket driver yang ada. Paket driver dasar yang lebih baru dapat diinstal dengan paket driver ekstensi yang lebih lama dan paket driver ekstensi yang lebih baru dapat diinstal dengan paket driver dasar yang lebih lama. Situasi ini tidak boleh menyebabkan masalah keandalan atau stabilitas pada sistem.

Saat mengelola paket driver dasar yang mengharapkan untuk diperluas oleh paket driver ekstensi, ikuti praktik terbaik berikut:

  • Dokumentasikan parameter apa yang dapat diatur paket driver ekstensi untuk mengubah perilaku paket driver dasar. Nama parameter dokumen, lokasi, rentang nilai, dan batasan baik dalam komentar kode maupun dalam dokumen desain. Bagikan dokumen desain ini dengan mitra yang akan menulis paket driver ekstensi untuk memperluas paket driver dasar. Perubahan pada paket driver dasar di masa mendatang harus mempertahankan kompatibilitas dengan rentang yang ditentukan.
  • Untuk mendukung rentang baru, tambahkan parameter opsional (tanpa nilai default).

Saat mengelola paket driver ekstensi, ikuti praktik terbaik berikut:

  • Patuhi batasan yang ditetapkan dalam dokumen desain dari pemilik paket driver dasar tentang bagaimana paket driver ekstensi harus memperluas paket driver dasar.

Pengiriman ekstensi INF guna sertifikasi

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

Bekerja dengan Ekstensi INF di Partner Center

Contoh Paket Driver yang Sesuai dengan DCH

Menggunakan File INF Universal

Mulai mengembangkan driver Windows

Toolkit penginstalan paket driver untuk driver universal