Aracılığıyla paylaş


Sürücü Yükleme Sırasını Belirleme

Çoğu sistem için, bir bilgisayardaki cihazların fiziksel hiyerarşisi, Windows ve PnP yöneticisinin sürücüleri yükleme sırasını belirler. Windows ve PnP yöneticisi, sistem kök cihazıyla başlayan cihazları yapılandırırlar ve ardından kök cihazın alt cihazlarını (örneğin, PCI bağdaştırıcısı), bu cihazların alt öğelerini vb. yapılandırırlar. PnP yöneticisi, sürücüler daha önce başka bir cihaz için yüklenmemişse, cihaz yapılandırılırken her cihaz için sürücüleri yükler.

INF dosyasındaki ayarlar sürücü yükleme sırasını etkileyebilir. Bu konu, bir sürücünün INF AddService yönergesi tarafından başvurulan service-install-bölümünde satıcıların belirtmesi gereken ilgili değerleri açıklar. Özellikle, bu konuda StartType, BootFlags, LoadOrderGroup ve Dependencies girdileri ele alınmaktadır.

Sürücülerin StartType belirtmek için şu kurallara uyması gerekir:

  • PnP sürücüsü önyüklemenin erken aşamalarında gerekli değil

    PnP sürücüsü, PnP yöneticisinin sürücü tarafından hizmet verilen bir cihaz bulduğunda sürücüyü yükleyebileceğini belirten bir başlangıç türü olan SERVICE_DEMAND_START (0x3) değerine sahip olmalıdır.

  • Bilgisayarı başlatmak için gereken bir cihazın sürücüsü

    Bilgisayarı başlatmak için bir cihaz gerekiyorsa, cihaz sürücülerinin başlangıç türü SERVICE_BOOT_START (0x0) olmalıdır.

  • PnP numaralandırılamayan cihazları algılayan önyükleme başlatma dışı sürücü

    PnP numaralandırılabilir olmayan bir cihaz için, sürücü IoReportRootDevice veya IoReportDetectedDevice çağrısı yaparak cihazı PnP yöneticisine bildirir. Böyle bir sürücüde başlangıç türü SERVICE_SYSTEM_START (0x01) olmalıdır, bu nedenle Windows sistem başlatma sırasında sürücüyü yükler.

    Bu başlangıç türünü yalnızca PnP dışı donanımları raporlayan sürücüler ayarlamalıdır. Bir sürücü hem PnP hem de PnP olmayan cihazlara hizmet verirse, bu başlangıç türünü ayarlaması gerekir.

  • Servis kontrol yöneticisi tarafından başlatılması gereken PnP desteklemeyen sürücü

    Böyle bir sürücü başlangıç türüne SERVICE_AUTO_START (0x02) sahip olmalıdır. PnP sürücüleri bu başlangıç türünü ayarlamamalıdır.

Windows, sürücü hizmetlerinin yaptığı bir cihazı yapılandırdığında yüklenebilmesi için bir PnP sürücüsü yazılmalıdır. Buna karşılık, PnP yöneticisi sürücü hizmetlerinin artık mevcut cihaz olmadığını belirlediğinde bir sürücünün kaldırılabilmesi gerekir. PnP sürücülerinin bağımlı olması gereken tek sürücü yük sıralamaları şunlardır:

  1. Bir alt cihazın sürücüleri, üst cihaz sürücülerinin yüklü olmasına bağlı olabilir.

  2. Cihaz yığınındaki bir sürücü, altındaki sürücülerin yüklenmesine bağlı olabilir.

    Örneğin, işlev sürücüsü herhangi bir alt filtre sürücüsünün yüklendiğinden emin olabilir.

    Ancak, cihaz yığınındaki bir sürücünün, başka bir cihaz yapılandırıldığında daha önce yüklenmiş olabileceğinden, cihazın alt sürücüleri sonrasında sıralı olarak yüklenmeye bağımlı olamayacağını unutmayın.

Filtre grubundaki filtre sürücüleri yük sıralamalarını tahmin edemez. Örneğin, bir cihazda kayıtlı üç üst filtre sürücüsü varsa, bu üç sürücünün tümü işlev sürücüsünden sonra yüklenir, ancak üst filtre grubundaki herhangi bir sırada yüklenebilir.

Bir sürücünün başka bir sürücüde açık bir yük sırası bağımlılığı varsa, bu bağımlılık bir üst/alt ilişki aracılığıyla uygulanmalıdır. Bir alt cihazın sürücüsü, alt sürücüler yüklenmeden önce yüklenmiş olan ana cihazın sürücülerine bağımlı olabilir.

Doğru StartType değerini ayarlamanın önemini güçlendirmek için, aşağıdaki listede Windows ve PnP yöneticisinin INF dosyalarındaki StartType girdilerini nasıl kullandığı açıklanmaktadır:

  1. Sistem başlangıcında, işletim sistemi yükleyicisi denetimi çekreğe aktarmadan önce SERVICE_BOOT_START türündeki sürücüleri yükler. Çekirdek denetimi aldığında bu sürücüler bellekte olur.

    Önyükleme sürücüleri, çoğu cihaz yapılandırılmadan önce yüklendiğinden, yükleme sıraları cihazların hiyerarşisiyle belirlenemez. Önyükleme başlangıç sürücüleri, yüklemelerini sıralamak için INF LoadOrderGroup girdilerini kullanabilir. İşletim sistemi başlangıç sürücüleri için INF Bağımlılıkları kayıtlarını yoksayar.

  2. PnP yöneticisi, sürücülerin önyükleme cihazlarına hizmet edebilmesi için SERVICE_BOOT_START sürücülerinin DriverEntry yordamlarını çağırır.

    Bir önyükleme cihazında alt cihazlar varsa, bu cihazlar numaralandırılır. Alt cihazlar, sürücüleri de önyükleme-başlatma sürücüleriyse yapılandırılır ve başlatılır. Bir cihazın sürücüleri hepsi önyükleme başlangıç sürücüsü değilse, PnP yöneticisi cihaz için bir cihaz düğümü (devnode) oluşturur ancak cihazı henüz başlatmaz.

  3. Tüm önyükleme sürücüleri yüklendikten ve önyükleme cihazları başlatıldıktan sonra, PnP yöneticisi PnP cihazlarının geri kalanını yapılandırıp sürücülerini yükler.

    PnP yöneticisi cihaz ağacını tarar ve henüz başlatılmamış cihaz düğümleri için sürücüleri yükler (yani, önceki adımdaki başlatılmamış tüm cihaz düğümleri). Her bir cihaz başlatıldığında, PnP yöneticisi varsa cihazın alt öğelerini listeleyip sayar.

    Bu cihazları yapılandırırken PnP yöneticisi, cihazları başlatmaya devam etmeden önce sürücülerin StartType değerlerinden (StartType SERVICE_DISABLED dışında) bağımsız olarak cihazların sürücülerini yükler. Bu sürücülerin çoğu SERVICE_DEMAND_START sürücülerdir.

    PnP yöneticisi, bu adımda yüklediği sürücüler için INF Bağımlılıkları girdileri ve LoadOrderGroup girdileri sonucunda oluşturulan kayıt defteri girdilerini yoksayar. Yük sıralama, fiziksel cihaz hiyerarşisini temel alır.

    Bu adımın sonunda PnP numaralandırılamayan cihazlar ve bu cihazların alt öğeleri dışında tüm cihazlar yapılandırılır. (Alt öğeler PnP tarafından numaralandırılabilir ya da numaralandırılamayabilir.)

  4. PnP yöneticisi henüz yüklenmemiş StartType SERVICE_SYSTEM_START sürücülerini yükler.

    Bu sürücüler PnP olmayan cihazlarını algılar ve bildirir. PnP yöneticisi, bu sürücüler için INF LoadOrderGroup girdilerinin sonucu olan kayıt defteri girdilerini işler. Bu sürücüler için INF Bağımlılıkları girdileri nedeniyle oluşturulan kayıt defteri girdilerini yoksayar.

  5. Hizmet denetim yöneticisi henüz yüklenmemiş StartType SERVICE_AUTO_START sürücülerini yükler.

    Hizmet denetim yöneticisi, hizmetlerin DependOnGroup ve DependOnServices ile ilgili hizmet veritabanı bilgilerini işler. Bu bilgiler INF AddService girdilerindeki Bağımlılıklar girdilerinden alınıyor. Bağımlılıklar bilgilerinin yalnızca PnP olmayan sürücüler için işlendiğini, çünkü gerekli PnP sürücülerinin sistem başlatmanın önceki bir adımında yüklendiğini unutmayın. Hizmet denetim yöneticisi INF LoadOrderGroup bilgilerini yoksayar.

    Hizmet denetim yöneticisi hakkında daha fazla bilgi için Microsoft Windows SDK belgelerine bakın.

Önyükleme Senaryosuna Bağlı Olarak Önyükleme sırasında Sürücünün StartType'ını Yükseltmek için BootFlags Kullanma

İşletim sistemi, sürücünün INF dosyasında belirtilen BootFlags değerine bağlı olarak sürücünün StartType değerini önyükleme başlangıç sürücüsü olarak yükseltebilir. INF dosyasında onaltılık değer olarak ifade edilen aşağıdaki sayısal değerlerden birini veya daha fazlasını (ORed) belirtebilirsiniz:

  • Bir sürücünün ağ önyüklemesinde başlatma sürücüsü olarak yükseltilmesi gerekiyorsa 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) belirtin.
  • VHD'den önyüklemede bir sürücü yükseltilmesi gerekiyorsa , 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) belirtin
  • USB diskten önyükleme sırasında bir sürücü yükseltilmesi gerekiyorsa , 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD ) belirtin.
  • SD depolamadan önyükleme sırasında bir sürücü yükseltilmesi gerekiyorsa 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD) belirtin
  • USB 3.0 denetleyicisindeki bir diskten önyükleme sırasında bir sürücünün terfi ettirilmesi gerekiyorsa 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD) belirtin.
  • Ölçülen önyükleme etkinken bir sürücü yükseltilmesi gerekiyorsa , 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD ) belirtin.
  • Doğrulayıcı önyüklemesi etkinleştirilmiş halde önyükleme yapıyorken bir sürücü yükseltilmeli ise 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD) belirtin.
  • WinPE önyüklemesinde bir sürücü yükseltilmesi gerekiyorsa , 0x80 (CM_SERVICE_WINPE_BOOT_LOAD ) belirtin.

Önyükleme senaryosuna bağlı olarak önyükleme sırasında sürücünün StartType değerini yükseltme hakkında daha fazla bilgi için bkz. INF AddService yönergesi.