Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft, cihaz filtre sürücüsü sıralama olarak bilinen yığın konumu yerine filtrenin amacını ifade ederek bildirim temelli olarak filtre ekleme yöntemi geliştirmiştir.
Cihaz filtre sürücüsü sıralama gereksinimi
Windows 10 sürüm 1903'ün öncesinde, cihaz filtresi sürücüsünü kaydetmenin desteklenen tek yolu bir kayıt defteri girdisinin eklenmesiydi ( AddReg yönergesini kullanarak). Ancak bu kayıt defteri işleme yöntemi, belirli bir filtrenin tam olarak hangi konumda kaydedileceğini belirtme esnekliği sağlamaz.
AddReg yönergesini kullanarak filtre kaydı, filtreyi filtre listesinin sonuna ekler. Bu yaklaşım, sıranın önemli olduğu değerlerin listesini kullanır ve yığında filtrenin nereye yüklendiğini belirler.
Birden fazla sürücü aynı cihaza filtre ekliyorsa olumsuz sonuçlar doğabileceğinden, özellikle AddRegyalnızca sona eklendiğinde, tek bir sıralı değer listesi kullanmak ideal değildir.
En az bir Uzantı INF'sinin söz konusu olduğu senaryoda, INF'ler AddReg'i yanlış kullanıyorsa (başka bir deyişle ekleme bayrağını kullanmıyorsa), farklı bir INF tarafından eklenen filtreyi silebilir.
Ayrıca, birden çok Uzantı INF'i filtre ekleyebilir ve bu filtrelerin göreli sıralaması önemli olabilir; ancak Tak Çalıştır (PnP) platformu, uzantılar için yükleme sırasını garanti etmez. Sonuç olarak, "ekleme işlemleri" sırasının garanti altına alınamamasıdır.
Cihaz filtre sürücüsü düzenlemesini uygulamak
Microsoft, cihaz filtrelerini kaydetmek için esnek bildirim temelli bir yöntem sağlamak için yığın konumu yerine filtrenin amacını ifade ederek bildirim temelli olarak filtre ekleme yöntemi geliştirmiştir. Çözüm, işlev sürücüsü yazarlarının INF'lerinde bir filtrenin kendisini kaydedebileceği sıralı konum kümesini (düzeyler olarak adlandırılır) ifade edebilmesini sağlar.
Belirli bir düzeye ek olarak, bir filtre bildirim temelli olarak yalnızca üst veya alt düzey filtre olarak kaydedilebilir.
Altyapı, cihaz yığınına hangi sıra sürücülerinin dahil olacağını belirlemek için yeni bir filtre kayıt yöntemini temel alır. Yeni yöntem, filtre eklemenin eski yolu için uyumluluğu bozmaz. Ancak yeni filtrelerin daha sağlam ve esnek bir kayıt mekanizmasına geçmesine olanak tanır.
yöntemi, temel INF'nin bir veya daha fazla "düzeyin" sıralı listesini tanımlamasını sağlayarak etkinleştirilir. Hem temel INF hem de tüm uzantı INF'leri, filtrenin ait olduğu hizmet adını ve düzeyini belirten yeni bir INF yönergesi aracılığıyla bildirim temelli bir filtre kaydedebilir. Üst ve alt filtrelerin her biri kendi sıralı düzey listesiyle gösterilir.
Bu üst ve alt filtre listeleri, tüm filtre sürücüleri kendi düzeylerine göre sıralanarak oluşturulur. Her düzeydeki filtrelerin sırası rastgele olarak değerlendirilmelidir ve burada belirli bir düzeydeki filtrelerin sırasına bağımlılık alınamayabilir. İki filtrenin göreli sırasının garanti edilmesi gereken senaryolarda, farklı düzeylere kaydedilmelidir.
Aşağıdaki cihaz sürücüsü örneğini göz önünde bulundurun:
Cihaz sürücüsünün temel INF'i, sırasıyla A ve B olmak üzere iki üst filtre düzeyi bildirir. Temel INF'nin ilişkili Uzantı INF'sinde, iki düzeyin her birine iki filtre eklenir.
Cihaz sürücüsünün yüklenmesinin sonucu, istenen konumlandırma ve sıralamaya dikkat ederken filtre sürücüleri listelerini birleyen bir cihaz yığını sırasıdır. Elde edilen cihaz yığını sırası, "A" düzeyine yerleştirilen tüm filtrelerin "B" düzeyindeki herhangi bir filtreden önce gelmesini sağlar. Ancak, her düzeyde sıra rastgeledir.
Örnekte gösterildiği gibi, Filter3 Filter5'in önüne gelebilir veya Filter5'in ardından gelebilir. Her durumda, Filter3 ve Filter5, bir sonraki düzey olan "B" filtrelerden önce gelir.
Sıralama amacıyla bir dizi düzey oluşturmak yerine filtrenin kaydedilebileceği düzey serisi tasarlanırken, düzeylerin filtrenin amacına eşlenecek şekilde adlandırılması ve sıralanması gerekir. Örneğin, bir G/Ç cihazı herhangi bir şifreleme filtresinin kaydedilmesi gereken Şifreleme düzeyini tanımlayabilir. Bu, filtrenin amacının kolayca anlaşılmasını ve yönetilmesini sağlar ve işlev sürücüsünde hataya neden olan değişikliklere karşı yığını daha sağlam hale getirir.
Uyarı
Temel INF tarafından tanımlanan düzeyler olmasa bile bildirim temelli bir filtre yalnızca üst veya alt olarak kaydedilebilir. Düzeyler tanımlanmadığında, bu mantıksal olarak filtrenin UpperFilters/LowerFilters kayıt defteri değerinin sonuna eklenmesiyle eşdeğerdir. Düzeyler tanımlandığında, düzeylerden biri temel sürücüde varsayılan düzey olarak işaretlenmelidir ve bu durumda filtre bu düzeye kaydedilir.
Senaryo
Yığından gelen verileri şifreleyen bir I/O aygıt sürücüsü düşünün. Tipik bir uygulama, bunu gerçekleştirmek için işlev sürücüsünün hemen altında daha düşük bir filtre sürücüsü kullanabilir. Şifreleme filtresinin sürücü yazarının tam istediği konuma yerleştirildiğinden emin olmak için aşağıda gösterildiği gibi bildirim temelli filtreler kullanabilir:
Temel INF, "Şifreleme" ve "İzleme" (Varsayılan) adlı iki düşük filtre düzeyi oluşturur. Bu örnekteki "İzleme" (Varsayılan), bu cihaz için mevcut olabilecek alt filtrelerin geri kalanıdır. Sürücü, "Şifrele" filtre sürücüsünü "Şifreleme" düzeyine açıkça yerleştirerek, sonuçta elde edilen cihaz yığını sırasının "Şifrele" filtre sürücüsünü diğer düşük filtrelerden önce ve işlev sürücüsünü hemen takip etmesini sağlar.
Örneği bir adım daha ileri götürelim. Sürücünün daha yeni bir sürümünün ortaya çıktığını ve yazarın işlev sürücüsü için yerleşik şifreleme oluşturup oluşturmadığını düşünün. Bu, ayrı bir "Şifrele" filtre sürücüsü gereksinimini ortadan kaldırır. Yazarın temel INF'den "Şifrele" filtresini içeren düzeyi kaldırması yeterlidir ve sürücü güncelleştirildiğinde yığın yeniden dinamik olarak oluşturulur.
Bir filtre kendisini mevcut olmayan açık bir düzeyde olarak bildirirse, filtre cihaz yığınında bulunmaz. Örnekte Temel INF güncelleştirilmiştir ve Uzantı INF'i aynı kalsa da, sonuçta elde edilen cihaz yığını Temel INF'nin düzey bildirimine dahil edilmediğinden "Şifrele" filtresini dışlar.
Varsayılan filtre düzeyi
Son filtre yığınını oluşturmak için, tüm filtre bilgileri kaynakları tek bir listede birleştirilir. Cihaz yığını oluşturulurken birleştirme mantığının gerçekleştirildiğini unutmayın. Yeni/güncelleştirilmiş bir temel veya uzantı sürücüsü yüklenerek yeni bir filtre eklenirse, cihazlar yükleme sırasında yeniden başlatılır ve yeni bir filtre listesi alır.
Bazı filtre kaynaklarında herhangi bir konum bilgisi yoktur, yani eski UpperFilters/LowerFilters kayıt defteri değerleri aracılığıyla veya yalnızca konum belirten bildirim temelli söz dizimi aracılığıyla eklenen filtreler (aşağıda açıklandığı gibi).
Konum bilgisi olmadığında etkili bir birleştirmeyi desteklemek için temel INF tarafından ek bir bilgi parçası tanımlanmalıdır: varsayılan filtre düzeyi. Varsayılan filtre düzeyi, düzey veya konum bilgisi olmayan filtrelerin ekleneceği bir konumdur.
Örneğin, filtre düzeyleri Temel INF'de şu şekilde tanımlanabilir:
Level Order: A, B, C
DefaultFilterLevel: C
Varsayılan düzeyin son düzey olarak belirtilmesi, konum bilgisi olmayan tüm filtrelerin filtre listesine ekleneceğini gösterir. Alternatif olarak, sürücü yazarı yığının her zaman açıkça C düzeyine kaydedilmiş filtrelerle bitmesini isteyebilir:
Level Order: A, B, C
DefaultFilterLevel: B
Varsayılan filtre düzeyi B olarak ayarlandığından, konum bilgisi olmayan tüm ek filtreler A filtreleri ile C filtreleri arasına eklenir.
Sözdizimi
Filtreleri kaydetme
Daha fazla bilgi için INF DDInstall.Filters bölümüne ve AddFilter yönerge belgelerine bakın.
[DDInstall.Filters]
AddFilter = <FilterName>, [Flags], FilterSection
FilterLevel OR FilterPosition iki yoldan biriyle belirtilebilir:
1. Seçenek:
[FilterSection]
FilterLevel=<LevelName>
2. Seçenek:
[FilterSection]
FilterPosition=Upper/Lower
Bu işlem hem Temel hem de Uzantı INF'lerinde yapılabilir.
[DDInstall.Filters]
FilterName , sistemdeki hizmetin adıdır.
Bayraklar şu anda kullanılmamış ve boş bırakılmalıdır veya 0 olarak ayarlanmalıdır.
FilterSection , filtreyi açıklayan bir bölümdür.
[Filtre Bölümü]
Filtre bölümü şu iki yönergeden tam olarak birini içermelidir: FilterLevel veya FilterPosition.
FilterLevel, temel INF tarafından tanımlanan yığına cihaz filtresi eklemek için belirli bir yerdir. Her düzeyde, filtrelerin sırası rastgeledir.
FilterPosition, sınıfın üçüncü taraf filtrelerin eklenmesi için belirli bir yere sahip olması durumunda kullanılır.
Filtre Düzeylerini Tanımlama
[DDInstall.HW]
AddReg = FilterLevel_Definition
[FilterLevel_Definition]
HKR,,UpperFilterLevels,%REG_MULTI_SZ%,"LevelA","LevelB","LevelC"
HKR,,UpperFilterDefaultLevel,,"LevelC"
HKR,,LowerFilterLevels,%REG_MULTI_SZ%,"LevelD","LevelE","LevelF"
HKR,,LowerFilterDefaultLevel,,"LevelE"
Bu yalnızca bir temel sürücü tarafından yapılabilir.
Belirli bir cihaz için filtrelerin bildirim temelli tam listesi aşağıdaki özellikler sorgulanarak alınabilir:
DEVPKEY_Device_CompoundUpperFilters
DEVPKEY_Device_CompoundLowerFilters
Eski sistemle eşdeğer filtre kaydı
Şimdi INF aracılığıyla üst filtre ekleme denemesini eski bir yaklaşım olarak nasıl gerçekleştireceğimizi inceleyelim.
[DDInstall.HW]
AddReg = Filters
[Filters]
HKR,,"UpperFilters", 0x00010008, "MyFilter"
Bu söz dizimi, üst filtreler listesinin sonuna "Filtrem" ekler.
Kullanıma sunulan yeni söz dizimi ile, yukarıdaki bölüm mantıksal olarak şuna benzer:
[DDInstall.Filters]
AddFilter = MyFilter,,MyUpperFilterInstall
[MyUpperFilterInstall]
FilterPosition = Upper
Bu, "Filtrem" filtresinin üst filtreler listesine eklenmesi gerektiğini belirtir. Temel INF'de belirtilen filtre düzeyleri varsa, FilterPosition kullanıldığında filtre bu konum için varsayılan düzeyde kaydedilecektir.
Filtre düzeyleri belirtilmezse, bu filtre rastgele sırada üst filtre olarak kaydedilir.