Aracılığıyla paylaş


Uzantı INF Dosyası Kullanma

Windows 10'un öncesinde, Windows belirli bir cihaz için yüklenecek tek bir sürücü paketi seçti. Bu, tüm senaryolar ve yapılandırmalar için kod içeren büyük, karmaşık sürücü paketleriyle sonuçlandı ve her küçük güncelleştirme sürücü paketinin tamamı için bir güncelleştirme gerektiriyordu. Windows 10'dan başlayarak, INF işlevselliğini birden çok bileşene bölebilirsiniz ve bunların her biri bağımsız olarak hizmet verebilir. Bir cihaza yüklenen çekirdek sürücü paketi artık temel sürücü paketi olarak adlandırılır ve sistem tarafından sürücü paketlerinin Windows 10'den önce işlendiği şekilde işlenir. Temel sürücü paketinin işlevselliğini genişletmek için, ayrı bir sürücü paketinde bir uzantı INF'i sağlayın. INF Uzantısı:

  • Farklı bir şirket tarafından sağlanabilir ve temel INF'den bağımsız olarak güncelleştirilebilir.

  • Temel INF ile aynı INF söz dizimini kullanır, ancak özelleştirme veya uzmanlaşma için temel INF'yi genişletebilir.

  • Cihazın değerini artırır, ancak temel sürücü paketinin çalışması için gerekli değildir. INF uzantısı olmadığında, sistemin önyükleme yapabilmesi ve yalnızca temel sürücü paketiyle ağa bağlanabilmesi gerekir. Klavye gibi sistemde yerleşik olarak bulunan giriş cihazlarının, uzantı INF'leri olmadan en azından temel işlevlerle çalışabilmesi gerekir.

  • evrensel INF dosyası olmalıdır.

Her cihazda bir temel sürücü paketi yüklü olmalıdır ve isteğe bağlı olarak kendisiyle ilişkilendirilmiş bir veya daha fazla uzantı INF'sine sahip olabilir. Cihaza yüklenecek bir temel sürücü paketi yoksa, inf uzantısı cihaza yüklenemez.

Uzantı INF'lerini kullanabileceğiniz tipik senaryolar şunlardır:

  • Cihaz kolay adını özelleştirme veya donanım yapılandırma ayarını değiştirme gibi temel sürücü paketinde sağlanan ayarları değiştirme.

  • INF AddComponent yönergesini belirterek vebir bileşen INF dosyası sağlayarak bir veya daha fazla yazılım bileşeni oluşturma.

  • Donanım ayarı verileri gibi cihazın deneyimini veya işlevselliğini geliştiren sistemin modeline veya form faktörüne özgü ayarlar sağlama.

  • Cihaz yığınına filtre sürücüsü ekleme.

Bu senaryolardan bazıları için örnek kodu aşağıdaki örneklerde bulabilirsiniz. Ayrıca bkz. DCH-Compliant Sürücü Paketi Örneği, DCHU evrensel sürücü örneğinin uzantı INF'lerini nasıl kullandığını açıklar.

EXTENSION INF ve temel sürücü paketi nasıl birlikte çalışır?

Cihaz yüklemesi sırasında, bir uzantı INF'sindeki ayarlar temel sürücü paketindeki ayarlardan sonra uygulanır. Sonuç olarak, bir uzantı INF'i ve temel sürücü paketi aynı ayarı belirtirse, uzantı INF'deki sürüm uygulanır. Benzer şekilde, temel sürücü paketi değişirse INF uzantısı kalır ve yeni temel sürücü paketine uygulanır. Aynı cihazda birden çok uzantı INF'leri yüklüyse, uzantı INF'lerinin uygulanacağı önceden belirlenmiş bir sıralama yoktur, bu nedenle bir uzantı INF, farklı bir uzantı INF tarafından sağlanan değerleri belirleyici olarak geçersiz kılamaz. Aynı cihazlara hedeflenen ayrı uzantı INF'leri aynı ayarları değiştirmeye çalışmamalıdır.

Temel sürücü paketine uzantı INF tarafından hangi girişlerin geçersiz kılınabileceğini açıklayan açıklamaların yanı sıra geçerli parametre değer aralıkları ve kısıtlamaları eklemek yararlı olur.

ExtensionId'in Belirtilmesi

Bir uzantı INF yazdığınızda, INF'nin [Sürüm] bölümündeki bir girdi olan ExtensionIdadlı özel bir GUID oluşturursunuz.

Sistem, cihazın donanım kimliğini ve uyumlu kimliklerini, ilgili sistem için geçerli olan bir Modelleri bölümündeki bir uzantı INF'sinde belirtilenlerle eşleştirerek belirli bir cihaz için olası uzantı INF'lerini tanımlar.

Aynı ExtensionId değerini belirten tüm olası uzantı INF'leri arasında, sistem yüklemek için yalnızca bir tane seçer ve ayarlarını temel sürücü paketininkilere uygular. INF dosyasında belirtilen sürücü tarihi ve sürücü sürümü, aynı ExtensionId'e sahip birden fazla genişletme INF dosyasının arasından tek bir INF dosyasını seçmek için kullanılır.

Bunu göstermek için, üç uzantıLı INF'lerin bulunduğu varsayımsal bir cihaz içeren aşağıdaki senaryoyu göz önünde bulundurun:

temel INF ve uzantı INF'lerinin nasıl seçildiğini gösteren Diyagramı.

ExtensionId değerleri {A} ve {B} küme ayraçlarında gösterilir ve her temel sürücü paketinin derece başlık şeritlerinde gösterilir.

İlk olarak, sistem en iyi dereceye ve en yüksek sürüme sahip temel sürücü paketini seçer.

Ardından sistem, mevcut uzantı INF'lerini işler. İkisinin ExtensionId değeri {B}ve birinin ExtensionId değeri {A}. İlk iki seçenekten sürücü tarihinin aynı olduğunu varsayalım. Sonraki tiebreaker sürücü sürümüdür, bu nedenle sistem v2.0 ile INF uzantısını seçer.

Benzersiz ExtensionId değerine sahip INF uzantısı da seçilir. Sistem, cihaz için temel sürücü paketini uygular ve ardından bu cihaz için iki uzantı INF'sini uygular.

Uzantı INF dosyaları her zaman temel sürücü paketinden sonra uygulanır, ancak uzantı INF'lerinin uygulandığı belirli bir sıra yoktur.

INF Uzantısı Oluşturma

Bir INF'yi uzantı INF olarak tanımlamak için ihtiyacınız olan girişler aşağıdadır.

  1. Sürümü bölümünde Sınıf ve ClassGuid için bu değerleri belirtin. Kurulum sınıfları hakkında daha fazla bilgi için bkz. System-Defined Satıcılar İçin Mevcut Cihaz Kurulum Sınıfları.

    [Version]
    ...
    Class     = Extension
    ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
    ...
    
  2. [Sürüm] bölümünde bir ExtensionId girdisi sağlayın. Uzantı INF'sinin ilk sürümü için yeni bir GUID oluşturun veya ilk uzantı INF'nin sonraki güncelleştirmeleri için son GUID'yi yeniden deneyin.

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

Bir kuruluş yalnızca sahip olduğu bir ExtensionID kullanabilir. Uzantı Kimliğini kaydetme hakkında bilgi için bkz. Windows Donanım Geliştirme Merkezi panosunda donanım gönderimlerini yönetme.

  1. Uzantı INF'sini güncelleştiriyorsanız, ExtensionId değiştirmeyin ve DriverVer direktifi tarafından belirtilen sürümü ve tarihi güncelleyin. Belirli bir ExtensionId değeri için PnP, en yüksek DriverVerolan INF'yi seçer.

    Not

    Uzantı INF'niz Windows 10 S'yi hedeflediyse, bu Windows sürümüne sürücü yükleme hakkında bilgi için bkz. S modunda Windows 10'Sürücü Gereksinimleri.

  2. INF Modelleri bölümünde, hedef cihazınkilerle eşleşen bir veya daha fazla donanım ve uyumlu kimlik belirtin. Bu donanım ve uyumlu kimliklerin temel sürücü paketiyle eşleşmesi gerekmez. Uzantı INF genellikle, belirli bir sürücü yapılandırmasını daha fazla özelleştirmek için temel sürücü paketinden daha belirli bir donanım kimliğini listeler. Örneğin, temel sürücü paketi iki parçalı bir PCI donanım kimliği kullanabilirken INF uzantısı aşağıdaki gibi dört parçalı bir PCI donanım kimliği belirtir:

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

    Alternatif olarak, INF uzantısı temel sürücü paketiyle aynı donanım kimliğini listeleyebileceğinden, örneğin cihaz zaten dar hedefliyse veya temel sürücü paketi en özel donanım kimliğini zaten listelediyse.

    Bazı durumlarda INF uzantısı, daha geniş bir cihaz kümesinde bir ayarı özelleştirmek için uyumlu bir kimlik gibi daha az belirli bir cihaz kimliği sağlayabilir.

    CHID hedefleme, dört parçalı donanım kimliği mümkün değilse veya yeterince kısıtlayıcı değilse kullanılabilir.

  3. SPSVCINST_ASSOCSERVICEile bir hizmet tanımlamayın. Uzantı INF'i bir cihaz için işlev sürücüsü sağlayamaz. Bununla birlikte, bir uzantı INF cihazı için filtre sürücüsü gibi diğer hizmetleri tanımlayabilir. Hizmetleri belirtme hakkında daha fazla bilgi için bkz. INF AddService Yönergesi.

Çoğu durumda, Donanım Geliştirme Merkezi'ne temel sürücü paketinden ayrı olarak bir uzantı INF sürücü paketi gönderirsiniz. Uzantı INF'lerini paketleme ve örnek kod bağlantıları hakkında örnekler için bkz. DCH-Compliant Sürücü Paketi Örneği.

Sürücü doğrulama ve gönderme işlemi, uzantı INF'leri için temel sürücü paketleriyle aynıdır. Daha fazla bilgi için bkz. Windows HLK Başlangıç Kılavuzu.

Uzantı sürücüsünü kaldırma

Bir uzantı sürücüsü paketini sistemden kaldırmak ve bunu kullanan tüm cihazlardan kaldırmak için bayrağıyla delete-driveruninstall komutunu kullanın. Bu, uzantı sürücüsü paketinin temel sürücü paketi kaldırılmadan cihazlardan kaldırılmasını sağlar.

Kaldırmak ve kullanmak için sürücü paketinin oem<#>.inf adını bulun ve pnputil /delete-driver oem<#>.inf /uninstallkullanın.

pnputil /enum-drivers, uygun oem<#>.inf adını tanımlamaya yardımcı olmak için kullanılabilir.

Örnek 1: Cihazın kullanıcı dostu adını ayarlamak için bir INF uzantısı kullanarak

Yaygın senaryolardan birinde, bir cihaz üreticisi (IHV) bir temel sürücü paketi sağlar ve ardından sistem oluşturucusu (OEM) bu temel sürücü paketinin yapılandırmasını ve ayarlarını tamamlayan ve bazı durumlarda geçersiz kılan bir uzantı INF dosyası sunar. Aşağıdaki kod parçacığı, cihaz dostu adının nasıl ayarlandığını gösteren tam bir uzantı INF'dir.

[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"

Örnek 2: Ek yazılım yüklemek için uzantı INF kullanma

Aşağıdaki kod parçacığı,evrensel sürücüler için Sürücü paketi yükleme araç setinde bulunan tam bir uzantı INF'dir. Bu örnek, bir hizmet ve yürütülebilir dosya yükleyen bileşenler oluşturmak için INF AddComponent yönergesi kullanır. Bileşen INF dosyasında neler yapabileceğiniz hakkında daha fazla bilgi için, Bileşen INF Dosyası Kullanımıbölümüne bakın.

Bu dosyaya çevrimiçi olarak erişmek için bkz. 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

Bir filtre sürücüsü yüklemek için Uzantı INF dosyasını nasıl kullanacağınız hakkında bilgi için bkz. Cihaz filtre sürücüsü sıralaması.

Genişletilebilirliği geliştirmek için, IHV'ninuzantısı INF şablonuna isteğe bağlı işlevler yerleştirmesini öneririz.

Geriye dönük uyumluluk

Değişikliklerin mevcut sürücü paketleri için geriye dönük uyumluluğu bozmadığından emin olmak için hem temel sürücü paketlerinde hem de uzantı sürücüsü paketlerinde yapılan değişiklikler kapsamlı bir şekilde test edilmelidir. Daha yeni temel sürücü paketleri eski uzantı sürücüsü paketleriyle, daha yeni uzantı sürücüsü paketleri ise eski temel sürücü paketleriyle yüklenebilir. Bu durumlar sistemde güvenilirlik veya kararlılık sorunlarına neden olmamalıdır.

Uzantı sürücüsü paketi tarafından genişletilmeyi bekleyen bir temel sürücü paketini yönetirken şu en iyi yöntemleri izleyin:

  • Uzantı sürücü paketinin temel sürücü paketi davranışını değiştirmek için ayarlayabileceğiniz parametreleri belgeleyin. Hem kod açıklamalarında hem de tasarım belgesinde parametre adlarını, konumlarını, değer aralıklarını ve kısıtlamalarını belgeleyin. Bu tasarım belgesini, temel sürücü paketini genişletmek için uzantı sürücüsü paketleri yazacak iş ortaklarıyla paylaşın. Temel sürücü paketinde gelecekteki değişiklikler, belirtilen aralıklarla uyumluluğu sürdürmelidir.
  • Yeni aralıkları desteklemek için isteğe bağlı bir parametre ekleyin (varsayılan değer yok).

Uzantı sürücüsü paketini yönetirken şu en iyi yöntemleri izleyin:

  • Uzantı sürücüsü paketinin temel sürücü paketini nasıl genişletmesi gerektiği konusunda temel sürücü paketi sahibinden bir tasarım belgesinde belirtilen kısıtlamalara uyun.

Sertifika için uzantı INF gönderme

Donanım Geliştirme Merkezi'nde Uzantı INF'leriyle çalışma hakkında ayrıntılı bilgi için, Windows Donanım Geliştirme Merkezi Panosu'nda Uzantı INF'leriyle Çalışmabaşlıklı bölümüne bakın.

İş Ortağı Merkezi'nde Uzantı INF'leriyle Çalışma

DCH-Compliant Sürücü Paketi Örneği

Evrensel Bir INF Dosyası Kullanma

Windows sürücüleri geliştirmeye başlama

evrensel sürücüler için Sürücü paketi yükleme araç seti