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.
Dinamik numaralandırma, bir sürücünün sistem çalışırken sisteme bağlı cihazların sayısını ve türündeki değişiklikleri algılama ve raporlama özelliğidir.
Üst cihaza bağlı cihazların sayısı veya türleri bir sistemin yapılandırmasına bağlıysa, veri yolu sürücüleri dinamik numaralandırma kullanmalıdır. Bu cihazlardan bazıları her zaman sisteme bağlı olabilir ve bazıları sistem çalışırken takılı ve fişsiz olabilir.
Örneğin, bir sistemin PCI veri yolu içine takılı cihazların sayısı ve türü sisteme bağlıdır, ancak kullanıcı gücü kapatmadığı, kasayı açmadığı ve tornavida kullanarak cihaz eklemediği veya kaldırmadığı sürece kalıcıdır. Öte yandan, bir kullanıcı sistem çalışırken bir kabloyu takarak veya çıkararak USB cihazları ekleyebilir veya kaldırabilir.
Dinamik Alt Listeler
Çerçeve, sürücülerin çerçeve alt liste nesneleri sağlayarak dinamik numaralandırmayı desteklemesini sağlar. Her bir alt liste nesnesi, bir ana cihaza bağlı alt cihazların listesini temsil eder. Üst cihazın veri yolu sürücüsünün üst cihazın alt cihazlarını tanımlaması, bunları üst cihazın alt listesine eklemesi ve her alt öğe için bir fiziksel cihaz nesnesi (PDO) oluşturması gerekir.
Bir sürücü bir cihaz için FDO'ları temsil eden bir çerçeve cihaz nesnesi oluşturduğunda, çerçeve cihaz için boş, varsayılan bir alt liste oluşturur. Sürücünüz, WdfFdoGetDefaultChildListçağırarak bir cihazın varsayılan alt listesine yönelik bir işaretçi alabilir. Genellikle, bir cihazın alt öğelerini numaralandıran bir veri yolu sürücüsü yazıyorsanız, sürücünüz varsayılan alt öğe listesine alt öğeler ekleyebilir. Ek alt listeler oluşturmanız gerekiyorsa, sürücünüz WdfChildListCreateöğesini çağırabilir.
Bir sürücünün alt liste kullanabilmesi için, alt liste nesnesini yapılandırmak için WDF_CHILD_LIST_CONFIG bir yapı başlatması ve yapıyı varsayılan alt liste için WdfFdoInitSetDefaultChildListConfigveya ek alt listeler için WdfChildListCreategeçirmesi gerekir.
Dinamik Çocuk Açıklamaları
Bir veri yolu sürücüsü bir alt cihazı her tanımlayışında, alt cihazın açıklamasını alt listeye eklemelidir. alt açıklama, bir gerekli tanımlama açıklaması ve isteğe bağlı bir adres açıklamasıiçerir.
Tanımlama Açıklaması Tanımlama açıklaması, sürücünün numaralandırdığını her cihazı benzersiz olarak tanımlayan bilgiler içeren bir yapıdır. Sürücü bu yapıyı tanımlar, ancak ilk üyesi mutlaka bir WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER yapısı olmalıdır.
Genellikle, tanımlama açıklaması bir cihazın cihaz tanımlama dizelerini, muhtemelen seri numarasını ve cihazın veri yolu üzerindeki konumuyla ilgili bilgileri (yuva numarası gibi) içerir.
Sürücü, çerçevenin tanımlama açıklamasındaki bilgileri işlemesini sağlayan aşağıdaki geri çağırma işlevleri kümesini sağlayabilir:
EvtChildListIdentificationDescriptionCompare, iki tanımlama açıklaması yapısının içeriğini karşılaştırır.
EvtChildListIdentificationDescriptionCopy, bir tanımlama açıklaması yapısının içeriğini diğerine kopyalar.
EvtChildListIdentificationDescriptionDuplicatevar olan bir tanımlama açıklaması yapısını çoğaltarak ve gerekirse ek arabellekler ayırarak yeni bir tanımlama açıklaması oluşturur.
EvtChildListIdentificationDescriptionCleanup, EvtChildListIdentificationDescriptionDuplicate geri çağırma işlevinin ayırdığı arabellekleri serbest bırakır.
Genellikle, sürücünüzün tanımlayıcı açıklama yapıları dinamik olarak ayrılmış arabellek işaretçileri içeriyorsa, bu geri çağırma işlevlerini sağlamanız gerekir. Bu geri çağırma işlevlerinin amacı hakkında daha fazla bilgi için başvuru sayfalarına bakın.
Adres Açıklaması Adres açıklaması, cihaz takılıyken bilgilerin değişebileceği durumlarda sürücünün cihaza veri yolu üzerinden erişmesini sağlamak için gereken bilgileri içeren bir yapıdır. Sürücü bu yapıyı tanımlar, ancak ilk üyesi WDF_CHILD_ADDRESS_DESCRIPTION_HEADER yapısı olmalıdır.
Adres açıklamaları isteğe bağlıdır. Bir cihazın adres bilgileri, cihazın prize takılı olduğu ve fişinin çıkarılma zamanı arasında değişemiyorsa, cihazın tüm adres bilgileri bir tanımlama açıklamasında depolanabilir. Örneğin, USB denetleyicileri cihazlar prize takılıyken cihazlara adres atar ve bu adresler değişmez.
Öte yandan, bazı otobüsler değişebilecek adresleme bilgilerini kullanır. Örneğin, IEEE 1394 veri yolu, gerçekleşen veri yolu sıfırlamalarının sayısı olan bir "nesil sayısı" kullanır. IEEE 1394 cihazına yapılan her asenkron I/O isteği, nesil sayısını içermelidir. Bu adres bilgileri değişebileceğinden, sürücünüzün bunu bir adres açıklamasında depolaması gerekir.
Bir adres açıklamasındaki bilgileri işlemek için, sürücü aşağıdaki geri çağırma işlevleri kümesini sağlayabilir:
EvtChildListAddressDescriptionCopy, bir adres açıklaması yapısının içeriğini başka bir adres açıklaması yapısına kopyalar.
EvtChildListAddressDescriptionDuplicatevar olan bir adres açıklaması yapısını çoğaltarak ve gerekirse ek arabellekler ayırarak yeni bir adres açıklaması oluşturur.
EvtChildListAddressDescriptionCleanup, EvtChildListAddressDescriptionDuplicate geri çağırma işlevi tarafından tahsis edilen arabellekleri serbest bırakır.
Genellikle, sürücünüzün adres açıklaması yapıları, dinamik olarak ayrılmış bellek arabelleklerine yönelik işaretçiler içeriyorsa, bu geri çağırma işlevlerini sağlamanız gerekir. Bu geri çağırma işlevlerinin amacı hakkında daha fazla bilgi için başvuru sayfalarına bakın.
Dinamik Alt Listeye Cihaz Ekleme
Çerçeve bir veri yolu sürücüsünün EvtDriverDeviceAdd geri çağırma işlevini çağırdığında, geri çağırma işlevinin WdfDeviceCreate çağırarak genellikle veri yolu bağdaştırıcısı olan üst cihaz için bir FDO oluşturması gerekir. FDO oluşturma hakkında daha fazla bilgi için bkz. İşlev Sürücüsünde Cihaz Nesneleri Oluşturma. Ardından sürücünün ana cihazın alt birimlerini listelemesi ve bu alt birimleri bir alt listeye eklemesi gerekir.
İsteğe bağlı olarak, sürücü WdfDeviceSetBusInformationForChildren çağırarak çerçeveye veri yolu hakkında bilgi sağlayabilir. Bunu yapmanızı öneririz çünkü alt cihazların ve uygulamaların bus'ı tanımlamasını kolaylaştırır.
Alt öğeleri bir alt listeye eklemek için, sürücünün bulduğu her alt cihaz için WdfChildListAddOrUpdateChildDescriptionAsPresent çağırması gerekir. Bu çağrı, bir sürücünün bir üst cihaza bağlı bir alt cihaz keşfettiğini yazılım çerçevesine bildirir. Sürücünüz WdfChildListAddOrUpdateChildDescriptionAsPresentçağırdığında, bir tanımlama açıklaması ve isteğe bağlı olarak bir adres açıklaması sağlar.
Sürücü, yeni bir cihaz bildirmek için WdfChildListAddOrUpdateChildDescriptionAsPresent çağırdıktan sonra, çerçeve PnP yöneticisine yeni cihazın mevcut olduğunu bildirir. PnP yöneticisi yeni cihaz için bir cihaz yığını ve sürücü yığını oluşturur. Bu işlemin bir parçası olarak çerçeve, veri yolu sürücüsünün EvtChildListCreateDevice geri çağırma işlevini çağırır. Bu geri çağırma işlevi, yeni cihaz için bir PDO oluşturmak için WdfDeviceCreate çağırmalıdır.
Genellikle, birkaç alt cihaz bir üst cihaza bağlanır, bu nedenle veri yolu sürücüsünün WdfChildListAddOrUpdateChildDescriptionAsPresent birkaç kez çağırması gerekir. Bu işlemi gerçekleştirmenin en verimli yolu şunlardır:
Her alt cihaz için WdfChildListAddOrUpdateChildDescriptionAsPresent çağrısı yapın.
WdfChildListEndScançağrısı yapın.
Sürücünüzün dinamik numaralandırmasını WdfChildListBeginScan ve WdfChildListEndScançağrılarıyla çevrelerseniz, çerçeve alt listede yapılan tüm değişiklikleri depolar. Sürücü WdfChildListEndScançağırdığında PnP yöneticisine değişiklikleri bildirir. Daha sonra framework, alt listedeki her cihaz için veri yolu sürücüsünün EvtChildListCreateDevice geri çağırma işlevini çağırır. Bu geri çağırma işlevi, her yeni cihaz için bir PDO oluşturmak için WdfDeviceCreate çağırır.
Sürücünüz WdfChildListBeginScançağırdığında, çerçeve önceden bildirilen tüm cihazları artık mevcut değil olarak işaretler. Bu nedenle, sürücü, yalnızca yeni keşfedilen alt öğeler için değil, algılayabildiği tüm alt öğeler için WdfChildListAddOrUpdateChildDescriptionAsPresent çağırmalıdır. Bir alt listeye tek bir alt öğe eklemek için, sürücü direkt olarak WdfChildListUpdateAllChildDescriptionsAsPresent çağrısını yapabilir, öncesinde WdfChildListBeginScançağrısı yapmasına gerek yoktur.
Dinamik Alt Listeyi Güncelleştirme
Dinamik alt listedeki bilgileri güncellemek için aşağıdaki yöntemlerden birini kullanın.
Bir üst cihaz, bir çocuğun gelişini veya kaldırılmasını belirten bir kesme aldığında, sürücünün EvtInterruptDpc geri çağırma işlevi, bir cihaz takılıysa WdfChildListAddOrUpdateChildDescriptionAsPresent veya bir cihaz çıkarıldıysa WdfChildListUpdateChildDescriptionAsMissing çağırır.
Sürücü, üst cihaz çalışma (D0) durumuna her girdiğinde çerçevenin çağırdığı bir EvtChildListScanForChildren geri çağırma işlevi sağlayabilir. Bu geri çağırma işlevi, tüm alt cihazları numaralandırmak için WdfChildListBeginScan, WdfChildListAddOrUpdateChildDescriptionAsPresent (veya WdfChildListUpdateAllChildDescriptionsAsPresent) ve WdfChildListEndScanişlevlerini çağırmalıdır.
Sürücünüzde bu tekniklerden birini veya ikisini birden kullanabilirsiniz.
Dinamik Alt Listede Geçiş Yapma
Bir alt listenin içeriğini incelemek için, sürücünüz aşağıdaki tekniklerden birini kullanarak listeden geçiş yapabilir:
Her bir alt cihaz açıklamasının içeriğini almak için sürücü aşağıdakileri yapabilir:
- WdfChildListBeginIterationçağrısı yapın.
- Gerektiği kadar çok kez WdfChildListRetrieveNextDeviceçağrısı yapın.
- WdfChildListEndIterationçağrısı yapın.
WdfChildListBeginIterationçağrılırken, sürücü çerçevenin tüm cihaz açıklamalarını mı yoksa yalnızca bir alt kümeyi mi alması gerektiğini belirten WDF_RETRIEVE_CHILD_FLAGStüründeki bir bayrak belirtir. WdfChildListRetrieveNextDevice bir eşleşme bulduğunda, alt cihazın tanımlama ve adres açıklamalarının yanı sıra cihaz nesnesi için bir tanıtıcı alır.
Alt cihaz açıklamasında şu anda yer alan adres tanımını almak için, sürücünüz bir tanımlama açıklaması belirterek WdfChildListRetrieveAddressDescriptionfonksiyonunu çağırabilir. Çerçeve, eşleşen bir tanımlama açıklamasına sahip bir alt cihaz bulana kadar alt listeden geçiş sağlar. Ardından adres açıklamasını alır.
Belirli bir alt cihazla ilişkili çerçeve cihaz nesnesinin tanıtıcısını almanız gerektiğinde, sürücünüz WdfChildListRetrievePdoçağırabilir. Çerçeve, eşleşen tanımlayıcı açıklamaya sahip bir alt cihaz bulana kadar alt cihazlar listesini dolaşır ve daha sonra bir cihaz nesne tutamacını döndürür. Çağıranı başka bir iş parçacığında PDO'nun aniden PnP kaldırılmasına karşı korumak için, çağrıyı WdfChildListBeginIteration ve WdfChildListEndIterationile sarmalar.
PDO'nun Kimlik ve Adres Açıklamalarına Erişme
Sürücünüz bir PDO'nun tanımlama açıklamasına veya adres açıklamasına erişmek için aşağıdaki yöntemleri çağırabilir:
WdfPdoRetrieveIdentificationDescription, PDO ile ilişkili tanımlama açıklamasını alır.
WdfPdoRetrieveAddressDescription, PDO ile ilişkili adres açıklamasını alır.
PDO ile ilişkili adres açıklamasını güncelleştiren WdfPdoUpdateAddressDescription.
Yeniden numaralandırma isteklerini işleme
Dinamik numaralandırmayı destekleyen çerçeve tabanlı veri yolu sürücüleri, REENUMERATE_SELF_INTERFACE_STANDARD arabirimi aracılığıyla belirli bir alt cihazı yeniden numaralandırma isteği alabilir. Daha fazla bilgi için bkz. Numaralandırma İsteklerini İşleme.