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.
Cihaz Temelleri PnP testleri, bir sürücüyü neredeyse tüm PnP IRP'lerini işlemeye zorlar; ancak, özellikle vurgulanan üç alan vardır: çıkarma, yeniden dengeleme ve beklenmedik çıkarma. PnP testi, bunların her birini ayrı ayrı test etmek veya hepsini birlikte (stres testi olarak) test etmek için bir mekanizma sağlar. Bu PnP testi, kullanıcı modu API çağrıları (test uygulaması aracılığıyla) ve çekirdek modu API çağrılarının (bir üst filtre sürücüsü aracılığıyla) birleşimi kullanılarak gerçekleştirilir.
PNP testleri
Tak Çalıştır (PnP) testleri, sürücü ve kullanıcı modu bileşenlerinde PnP ile ilgili çeşitli kod yollarını yürütür. PnP testleri, test bilgisayarında Sürücü Doğrulayıcı etkinleştirildiğinde çalıştırılmalıdır. Sürücü Doğrulayıcı'yı etkinleştirme hakkında bilgi için bkz . Sürücü projeleri için Sürücü Doğrulayıcı özellikleri.
| Sınav | Açıklama |
|---|---|
Gelişmiş Cihaz Testi (EDT) Desteğini Devre Dışı Bırakma |
Bu test, DQ parametresi kullanılarak belirtilen cihazlarda üst filtre olarak test filtresi sürücüsünü (msdmfilt.sys) kaldırır. Bu test filtresi, bu test kategorisinde çalıştırılan testlerin bir parçası olarak yüklenir Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO IOType |
PNP (devre dışı bırakma ve etkinleştirme) GÇ ile yeniden başlatma öncesi ve sonrası |
Bu test, sistem yeniden başlatması olan cihazlarda temel PnP devre dışı bırakma/etkinleştirme ve G/Ç işlemlerini gerçekleştirir. Test ikili dosyası: Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfter.wsc Test yöntemi: PNP_DisableEnable_Reboot_IO_Önce_ve_Sonra Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ IOPeriod |
PNP'yi G/Ç'den önce ve sonra devre dışı bırakma ve etkinleştirme |
Bu test, cihazlarda G/Ç ve temel PnP devre dışı bırakma/etkinleştirme işlemlerini gerçekleştirir. Bu test aşağıdakileri yapar:
test ikilisi: Devfund_PNP_DisableEnable_With_IO_BeforeAndAfter.wsc Test yöntemi: PNP_DisableEnable_With_IO_Before_And_After Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ IOPeriod |
PNP Cihazı Kaldırmayı İptal Et testi |
Bu test, hedef cihaz yığınlarına IRP_MN_CANCEL_REMOVE_DEVICE göndermek için EDT filtre sürücüsünü kullanır. Daha fazla bilgi için bkz. Cihaz Kaldırma testleri hakkında. test ikilisi: Devfund_PnPDTest.dll Test yöntemi: PNPCancelRemoveDevice Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO |
PNP İptal Durma Cihazı testi |
Bu test, hedef cihaz yığınlarına IRP_MN_CANCEL_STOP_DEVICE göndermek için EDT filtre sürücüsünü kullanır. Daha fazla bilgi için bkz. Yeniden Dengeleme testleri hakkında. Test ikili dosya: Devfund_PnPDTest.dll Test yöntemi: PNPCancelStopDevice Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO |
PNP DIF Cihaz Testlerini Kaldır |
Bu test, yükleyicilerin cihazı kaldırması için DIF_REMOVE isteği göndermek üzere SetupDi API'sini kullanır. test ikilisi: Devfund_PnPDTest.dll Test yöntemi: PNPDIFRemoveAndRescanParentDevice Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO |
PNP Cihaz testlerini devre dışı bırakma ve etkinleştirme |
Bu test, hedef cihazları devre dışı bırakır ve etkinleştirir. Test ikili dosyası: Devfund_PnPDTest.dll Test yöntemi: PNPDisableAndEnableDevice Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO IOType |
PNP Yeniden Dengeleme Hatası Sonrası Cihaz Yeniden Başlatma Testi |
Bu test, hedef cihaz yığınlarına IRP_MN_STOP_DEVICE göndermeye çalışmak için EDT filtre sürücüsünü kullanır. Ardından, EDT filtre sürücüsü, hedef cihazların sürpriz bir şekilde kaldırılmasını tetiklemek için IRP_MN_STOP_DEVICE isteklerini takip eden IRP_MN_START_DEVICE isteklerini başarısız olur. Daha fazla bilgi için bkz. Yeniden Dengeleme testleri hakkında. Test ikili dosyası: Devfund_PnPDTest.dll Test yöntemi: PNPTryStopDeviceAndFailRestart Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO |
PNP Yeniden Dengeleme İsteği Yeni Kaynaklar Cihaz testi |
Bu test, hedef cihaz yığınlarına IRP_MN_STOP_DEVICE göndermeye çalışmak için EDT filtre sürücüsünü kullanır. Ayrıca cihazlara yeni kaynakların ayrılma olasılığını en üst düzeye çıkarmak için cihazların kaynak gereksinimlerini de manipüle eder. Daha fazla bilgi için bkz. Yeniden Dengeleme testleri hakkında. Test ikili dosyası: Devfund_PnPDTest.dll Test yöntemi: PNPTryStopDeviceRequestNewResourcesAndRestartDevice Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO |
PNP Cihaz Testlerini Kaldır |
Bu test, IRP_MN_QUERY_REMOVE_DEVICE ve IRP_MN_REMOVE_DEVICE hedef cihaz yığınlarına gönderilmesine neden olur. Daha fazla bilgi için bkz. Cihaz Kaldırma testleri hakkında. Test ikili dosyası: Devfund_PnPDTest.dll Test yöntemi: PNPRemoveAndRestartDevice Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO |
PNP Durdurma (Yeniden Dengeleme) Cihaz testi |
Bu test, hedef cihaz yığınlarına IRP_MN_STOP_DEVICE göndermeye çalışmak için EDT filtre sürücüsünü kullanır. Daha fazla bilgi için bkz. Yeniden Dengeleme testleri hakkında. Test ikili dosyası: Devfund_PnPDTest.dll Test yöntemi: PNPTryStopAndRestartDevice Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO |
PNP Sürpriz Cihaz Kaldırma testi |
Bu test, hedef cihaz yığınlarına IRP_MN_SURPRISE_REMOVAL göndermek için EDT filtre sürücüsünü kullanır. Daha fazla bilgi için bkz Sürpriz Kaldırma testi hakkında. Test ikili dosyası: Devfund_PnPDTest.dll Test yöntemi: PNPSurpriseRemoveAndRestartDevice Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri DQ TestDöngüleri DoSimpleIO IOPeriod DoConcurrentIO |
Cihaz Kaldırma testleri hakkında
- PNP Cihazını Kaldır Testi
- PNP Cihazı Kaldırmayı İptal Et testi
Cihaz Kaldırma testi, IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE ve IRP_MN_REMOVE_DEVICE'i içerir.
Test, üst filtre sürücüsünü hedef cihaz yığınına yüklemeyi dener. Bu deneme, bir sorgu kaldırma IRP'si ile sonuçlanır.
Bu sorgu kaldırma IRP'si başarısız olursa test, filtre sürücüsünü cihaz yığınına almak için bilgisayarı yeniden başlatır. Kaldırma isteği veto edilmediyse, cihaz yığını kaldırılır ve cihaz yığınındaki filtre sürücüsüyle yeniden başlatılır.
Test, kurulum API'lerini kullanarak bir sorgu kaldırma IRP'sinin cihaz yığınına gönderilmesine neden olur. Filtre sürücüsü bu kaldırma isteğini başarısız kılar, bu nedenle bir iptal-kaldırma IRP gönderilir. Filtre sürücüsü, cancel-remove işleminin başarılı olduğunu onaylar.
Daha sonra, test uygulaması cihazı devre dışı bırakmak veya etkinleştirmek ve kaldırmak veya yeniden numaralandırmak için uygun sınıf yükleyicisini ve kayıtlı ortak yükleyicileri çağırır (bu, DICS_DISABLE, DICS_ENABLE ve DICS_PROPCHANGE ile DIF_PROPERTYCHANGE işleme sınıfını ve ortak yükleyicileri test eder). IRP_MN_REMOVE_DEVICE alırken, filtre sürücüsü alt sürücülerin başarıyla tamamlandığını onaylar.
Bu adımların her biri bir ön kaldırma isteği içerir. Bu istek veto edilirse cihaz kaldırılmaz. Uygun olduğunda, örneğin bir USB kamerada video akışı gerçekleştirirken veya hedef cihaz önyükleme ya da sayfalama yolundayken, bir kaldırma isteğini veto etme seçeneğine sahipsiniz. Tüm kaldırma isteklerini basitçe reddetmek genellikle iyi bir uygulama değildir. Tüm kaldırma isteklerinin başarısız olması, sürücünün hiçbir zaman bir kaldırma almayacağını garanti etmez çünkü sürpriz bir kaldırmadan sonra veya cihaz yığınında birinin başlatma IRP'sini başarısız olması durumunda yine de bir kaldırma IRP'si verilecektir.
Sürpriz Kaldırma testi hakkında
- PNP Sürpriz Cihaz Kaldırma testi
Sürpriz Kaldırma testi, IRP_MN_SURPRISE_REMOVAL ve ardından IRP_MN_REMOVE_DEVICE içerir.
Önceki testlerde olduğu gibi, test uygulaması hedef cihaz yığınına bir üst filtre eklemeyi ve ardından yığını yeniden başlatmayı dener. Bu girişim başarılı olmazsa, test bilgisayarı yeniden başlatır.
Test uygulaması tarafından tetiklendiğinde, filtre sürücüsü sistemin cihaz yığınına bir IRP_MN_SURPRISE_REMOVAL ve ardından bir IRP_MN_REMOVE_DEVICE göndermesine neden olur. Filtre sürücüsü, her iki IRP'nin de alt sürücüler tarafından başarıyla tamamlandığını teyit eder.
Sürpriz kaldırma testi tamamlandıktan sonra cihaz kaldırılır ve yeniden numaralandırılır ve ayrıca filtre sürücüsü yığından kaldırılır.
Yeniden Dengeleme Testleri Hakkında
- PNP Durdurma (Yeniden Dengeleme) Cihaz testi
- PNP Yeniden Dengeleme Talebi Yeni Kaynak Cihaz Testi
- PNP Yeniden Dengeleme Başarısız Yeniden Başlatma Cihaz testi
- PNP Cihazı Durdur testlerini iptal et
Kaldırma testinde olduğu gibi, test uygulaması hedef cihaz yığınına bir üst filtre eklemeyi ve ardından DIF_PROPERTYCHANGE ile SetupDiCallClassInstaller kullanarak cihaz yığınını yeniden başlatmayı dener. Bu girişim başarılı olmazsa (yani hedef cihaz yığınındaki biri sorgu kaldırma IRP'sini başarısız olduysa), test yeniden dengelemeyi test etmek için bilgisayarı yeniden başlatır.
Hangi yeniden dengeleme testini seçtiğinize bağlı olarak aşağıdaki olaylar gerçekleşir:
PNP Duraklatma (Yeniden Dengeleme) Cihaz Testi Bu test, cihaz sürücüsüne IRP_MN_QUERY_STOP_DEVICE PnP IRP gönderilmesi ile sonuçlanan bir yeniden dengeleme prosedürünü başlatır.
Yığındaki herhangi bir sürücü bu IRP'de başarısız olursa yeniden dengeleme yordamı iptal edilir. Windows Vista'da çok düzeyli yeniden dengeleme desteği olduğunu lütfen unutmayın. Yaprak olmayan bir cihaz düğümünde yeniden dengeleme başlatılırsa, kök olarak bu cihaz düğümüne sahip cihaz ağacında bulunan tüm cihaz yığınları da yeniden dengelemeden geçer. Çocuk cihaz yığınlarından herhangi biri sorgu durdurma aşamasında başarısız olursa, tüm yeniden dengeleme yordamından vazgeçilir. Bu nedenle, sürücülerin geçerli bir neden olmadan sorgu durdurmayı ihmal etmemesi gerekir. Bu hata oluştuğunda PnP yöneticisi, sorgu durdurması gönderilen tüm cihaz yığınlarına iptal durdurma (IRP_MN_CANCEL_STOP) gönderir.
Tüm cihaz yığınları sorgu durdurmayı geçerse, test yeniden dengelemeye devam eder ve cihazların kaynak gereksinimini bulmak için IRP_MN_QUERY_RESOURCE_REQUIREMENTS ve IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRPS'yi gönderir.
Bu noktadan sonra, hedef cihazın herhangi bir kaynak kullanıp kullanmadığına bağlı olarak iki farklı yol mümkündür:
Cihaz herhangi bir kaynak kullanmadığında, PnP yöneticisi optimizasyon olarak iptal durdurma (IRP_MN_CANCEL_STOP_DEVICE) gönderir.
Cihaz resmen kaynakları kullanıyorsa, yeniden dengeleme yordamı IRP_MN_STOP_DEVICE ve IRP_MN_START_DEVICE IRP'lerle tamamlanır.
Bu seçenekle, cihazın kaynakları değişmez.
PNP Cancel Stop Device testi: Bu test, bir yeniden dengeleme prosedürünü başlatır, ancak filtre sürücüsü sorgulamayı durdurma IRP'sini kasıtlı olarak başarısız kılar. IRP'lerin sırası şu şekilde sıralanmıştır: IRP_MN_QUERY_STOP_DEVICE (filtre sürücüsü çalışırken başarısızlığa uğrar ve yeniden dengelemenin iptaline yol açar) ve IRP_MN_CANCEL_STOP_DEVICE.
Bu seçenekle, cihazın kaynakları değişmez
PNP Yeniden Dengeleme İsteği Yeni Kaynaklar Cihaz testi Bu test bir yeniden dengeleme başlatır ve ayrıca cihaza gerçekten yeni kaynakların başarılı bir şekilde ayrılma olasılığını en üst düzeye çıkarmak için cihazın kaynak gereksinimini değiştirir. Bu seçenek, kaynakları olmayan bir cihazın tam yeniden dengeleme yordamını gerçekleştirmesine de yardımcı olur:
İlk olarak basit yeniden dengeleme başlatılır ve bu da aşağıdaki IRP'leri oluşturur:
- IRP_MN_QUERY_STOP_DEVICE (bu IRP'nin tüm sürücüler tarafından geçildiğinin varsayıldığı durum). Bu IRP'nin başarısız olduğu durum testte zaten ele alınmıştır.
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS (Kaynak Gereksinimleri Filtreleme IRP'si). Bu IRP'ye yanıt olarak, yukarı doğru giderken, filtre sürücüsü cihazın herhangi bir kaynak kullanıp kullanmadığına bağlı olarak eyleme geçer:
- Cihazın kaynak gereksinimi yoksa, filtre sahte bir kaynak atar.
- Cihazın kaynak gereksinimi varsa, kaynak gereksinimi listesini geçerli atamayı değiştirme olasılığını en üst düzeye çıkaracak şekilde yeniden yapılandırmaya çalışır. Örneğin, bir cihaz 00 ile FF arasında herhangi bir yerde 2 bayt belleğe ihtiyaç duyuyorsa ve şu anda 3A-3B atanmışsa, yeni kaynak gereksiniminin (tercih sırasına göre) 00-39 veya 3C-FF veya 3A-3B gibi görünmesini sağlayın. Benzer şekilde, cihaz kaynağı gereksinim listesinin herhangi bir alternatif gereksinimi varsa, sıralarını değiştirerek alternatif gereksinimin listede daha önce gelmesini sağlar.
Artık cihaz her zaman yeniden dengeleme yordamını tamamlamalıdır.
IRP_MN_CİHAZ_DURDUR
IRP_MN_START_DEVICE (Yeni ayrılan kaynaklar. Sahte gereksinimler oluşturulduysa, yeni kaynakları gerçek sürücülerden maskeleyin.)
PNP Yeniden Dengeleme Başarısız Yeniden Başlatma Cihaz Testi Bu test bir yeniden dengeleme başlatır, ancak filtre sürücüsü yeniden dengelemeden sonra başlatmayı aldığında, kasıtlı olarak başarısız olur; bu da sürpriz kaldırma IRP'sine ve ardından Kaldırma IRP'sine neden olur.
İlk olarak, yeniden dengeleme prosedürünü başlatır ve herhangi bir kaynağı tüketmeyen bir cihaz için sahte kaynak gereksinimi oluşturarak sürücünün durdurulmasını ve başlatılmasını garanti eder.
- IRP_MN_QUERY_STOP_DEVICE (bu IRP'nin tüm sürücüler tarafından geçirildiğini varsayarsak. Testte bu IRP'nin başarısız olduğu durum zaten ele alınmıştır.)
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS (Gerçek kaynak gereksinimleri null ise, filtre sahte kaynak gereksinimlerini atar, böylece durdurma ve başlatma işlemleri gerçekleşir.)
- IRP_MN_CİHAZ_DURDUR
- IRP_MN_START_DEVICE (Filtre, yukarı doğru giderken bu IRP'yi başarısız kılar. Bu eylem, sürpriz bir şekilde IRP'yi kaldırmaya neden olur.)
- "IRP_MN_BEKLENMEDİK_KALDIRMA" if a suitable translation is adopted within the context. Otherwise, if no translation is needed, it can remain as "IRP_MN_SURPRISE_REMOVAL."
- IRP_MN_REMOVE
Yeniden dengeleme testi tamamlandıktan sonra cihaz kaldırılır ve yeniden numaralandırılır ve ayrıca filtre sürücüsü yığından kaldırılır.
Cihaz Hata Kodları
Test, cihaz durumunun tamam olmadığını belirten bir hata iletisi veriyorsa Cihaz Yöneticisi aracılığıyla cihaz durumu hakkında daha fazla bilgi edinebilirsiniz. Çeşitli cihaz hata kodlarının özeti için bkz. Cihaz Yöneticisi Hata İletileri.
Kurulum API günlüklerini kullanarak yükleme hatalarında hata ayıklama
Kurulum API günlükleri (setupapi.app.log ve setupapi.dev.log), bu test tarafından günlüğe kaydedilen sürücü yükleme hatalarında hata ayıklamak için yararlı bilgiler içerebilir. Kurulum API'sinin günlükleri, test sistemindeki %windir%\inf\ dizini altında bulunabilir.
Bu günlüklerin ayrıntı düzeyini ve olası yararlılığını artırmak için, Yeniden yükleme testini çalıştırmadan önce aşağıdaki kayıt defteri anahtarını 0x2000FFFF olarak ayarlayın:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\LogLevel
İlgili konular
Visual Studio kullanarak bir sürücüyü çalışma zamanında nasıl test edersiniz?
Cihaz TemelLeri testlerini seçme ve yapılandırma
Sunulan WDTF Basit G/Ç eklentileri
Komut İstemi'nde çalışma zamanında bir sürücüyü test etme yöntemleri