Bagikan melalui


Membuat driver primitif baru

Gunakan driver primitif untuk menangani dan mengelola perangkat lunak yang menggunakan penginstalan berbasis INF tetapi belum tentu terkait dengan perangkat keras tertentu.

Latar belakang dan manfaat driver primitif

Sebelum Windows 10 versi 1903, jenis perangkat lunak tertentu yang menggunakan penginstalan berbasis INF tetapi belum tentu terkait dengan perangkat keras tertentu tidak sepenuhnya didukung oleh OS. Meskipun potongan perangkat lunak ini menggunakan file INF sebagai manifes untuk penginstalan, OS tidak secara langsung menyadari skenario ini dan tidak memiliki dukungan untuk menanganinya secara asli.

Karena perangkat lunak ini tidak terikat dengan perangkat keras, perangkat keras akan diinstal pada seluruh sistem terlepas dari perangkat keras. Akibatnya, tidak ada jaminan bahwa potongan-potongan perangkat lunak ini diinstal, dihapus, atau ditangani dengan benar pada peningkatan OS.

Dimulai dengan Windows 10 versi 1903, platform Plug and Play menangani dan mengelola jenis paket perangkat lunak ini sebagai entitas tingkat atas, menghasilkan peningkatan keandalan dan jaminan perilaku yang tepat dari perangkat lunak tersebut, terutama selama skenario peningkatan dan reset OS.

Jenis perangkat lunak yang memanfaatkan dukungan platform baru ini disebut driver primitif. Driver primitif terus menggunakan penginstalan berbasis INF dan platform yang mendasar memanfaatkan Driver Store untuk melacak semua file yang relevan.

Platform Plug and Play yang mendasar kemudian menginstal, menghapus instalan, dan mempertahankan status driver pada peningkatan OS dengan lancar.

Secara konseptual, INF ini dikelola secara berbeda. Sebelumnya, [DefaultInstall] (dan sering kali, [DefaultUninstall]) diproses oleh SetupAPI dengan cara seperti skrip, di mana INF digunakan sebagai manifes dan SetupAPI menjalankan instruksi di bagian yang relevan atas nama pemanggil.

Membatalkan perubahan (untuk melakukan penghapusan instalasi) yang diperlukan untuk menentukan bagian INF yang melakukan serangkaian instruksi yang berlawanan sebagai bagian penginstalan. Namun, driver primitif yang memanfaatkan INF tidak memerlukan bagian penghapusan instalasi.

Driver primitif menggunakan API penginstalan dan penghapusan instalasi yang sama dengan driver perangkat, di mana API penghapusan instalasi akan melakukan serangkaian operasi terbalik sebagai operasi penginstalan, dan tindakan menginstal atau menghapus instalan paket driver akan memproses bagian tersebut.

Persyaratan INF untuk mengakses fungsionalitas driver primitif

  • Bagian Versi harus lengkap, sama seperti driver PnP.

    • Direktif Penyedia harus diisi.

    • Direktif Kelas harus diisi.

    • Direktif ClassGuid harus diisi.

  • Driver harus sesuai dengan DCH.

  • Tidak ada bagian [Produsen] yang mungkin ada.

  • Bagian [DefaultInstall] harus didekorasi arsitektur, dan tidak ada versi yang tidak terdekorasi.

    • Benar: [DefaultInstall.NTamd64]

    • Salah: [DefaultInstall]

  • [DefaultUninstall] mungkin tidak ada di INF (lihat kompatibilitas warisan untuk pengecualian).

Driver primitif yang hanya menargetkan Windows 10 versi 1903 dan yang lebih baru

Driver primitif yang ditargetkan hanya untuk Windows 10 versi 1903 dan yang lebih baru harus menggunakan DiInstallDriver dan DiUninstallDriver untuk menginstal dan menghapus instalasi perangkat lunak mereka dengan benar di/dari penyimpanan driver.

Driver juga harus menggunakan Dirid 13 untuk menentukan Driver Store dengan benar sebagai tujuan yang diinginkan untuk diinstal.

Kompatibilitas Warisan

Meskipun [DefaultUninstall] dilarang dalam Driver Primitif, pengecualian dibuat demi kompatibilitas OS tingkat bawah. Windows memperkenalkan arahan INF yang menyebabkan versi OS yang mendukung Driver Primitif untuk mengabaikan bagian [DefaultUninstall]. Jika paket driver Anda perlu mendukung versi OS tingkat bawah, sertakan sintaks berikut untuk memastikan bahwa platform akan menangani kasus tersebut dengan tepat:

[DefaultUninstall.NTamd64]
LegacyUninstall=1

Bagian [DefaultInstall] dan [DefaultUninstall] masih harus dihiasi arsitektur; namun, dengan menyertakan LegacyUninstall=1, Windows mengabaikan bagian [DefaultUninstall] (di Windows 10 versi 1903 dan yang lebih baru). Dengan demikian, Anda dapat menyertakan bagian tersebut di INF Anda, di mana dapat digunakan down-level dengan aplikasi penginstalan/penghapusan instalan warisan untuk menghapus instalan paket driver primitif.

Dimulai dengan Windows 10 versi 1903, jika Anda melewati bagian yang didekorasi arsitektur [DefaultInstall] atau [DefaultUninstall] ke INSTALLHInfSection API di setupapi.dll, paket driver akan diperiksa untuk menentukan apakah mendukung fungsionalitas driver primitif. Jika mendukung fungsionalitas driver primitif, daripada memproses bagian yang ditentukan dengan cara warisan, INF diteruskan ke DiInstallDriver atau DiUninstallDriver, sebagaimana mewajibkan. Dengan cara ini, satu alat penginstal dapat menggunakan driver primitif pada versi OS yang kompatibel dan mempertahankan dukungan untuk versi OS sebelumnya.

Mengonversi dari INF driver perangkat

Mengonversi INF yang menggunakan [Manufacturer] menjadi yang menggunakan [DefaultInstall] memerlukan perubahan kecil pada INF. Tidak seperti bagian [Manufacturer], bagian [DefaultInstall] adalah titik masuk dan bagian penginstalan. Ini secara konseptual menggabungkan bagian [Manufacturer], [Models], dan [DDInstall] menjadi satu.

INF berikut akan menerima kesalahan 1297 di InfVerif karena tidak diinstal pada perangkat keras apa pun:

[Manufacturer]
%Company% = Driver, NTx86, NTamd64

[Driver.NTx86]
%DeviceDesc% = InstallSection_32,

[Driver.NTamd64]
%DeviceDesc% = InstallSection_64,

[InstallSection_64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg

[InstallSection_64.Services]
AddService = MyService,, MyService_Install

[InstallSection_32]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg

[InstallSection_32.Services]
AddService = MyService,, MyService_Install

INF di atas dapat dikonversi ke INF berbasis [DefaultInstall], seperti yang ditunjukkan di bawah ini.

[DefaultInstall.NTamd64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg

[DefaultInstall.NTamd64.Services]
AddService = MyService,, MyService_Install

[DefaultInstall.NTx86]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg

[DefaultInstall.NTx86.Services]
AddService = MyService,, MyService_Install