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.
Sürücü Doğrulayıcı , çalışma zamanında sürücü hatalarını algılar. Sürücünüzdeki hataları algılamak ve görüntülemek için Sürücü Doğrulayıcısı'nı !analyze debugger komutuyla birlikte kullanabilirsiniz.
Windows 8'de Sürücü Doğrulayıcı , DDI Uyumluluk Denetimi de dahil olmak üzere yeni özelliklerle geliştirilmiştir. Burada DDI Uyumluluk Denetimi'nin gösterildiği bir örnek veriyoruz.
Kurulum yapmak için aşağıdaki yöntemi/prosedürü kullanın.
- Ana bilgisayar ve hedef bilgisayar arasında çekirdek modu hata ayıklama oturumu oluşturun.
- Sürücünüzü hedef bilgisayara yükleyin.
- Hedef bilgisayarda bir Komut İstemi penceresi açın ve komut doğrulayıcısını girin. Sürücünüz için Sürücü Doğrulayıcı'yı etkinleştirmek için Sürücü Doğrulayıcı Yöneticisi'ni kullanın.
- Hedef bilgisayarı yeniden başlatın.
Sürücü Doğrulayıcı bir hata algıladığında bir hata denetimi oluşturur. Ardından Windows hata ayıklayıcıya girer ve hatanın kısa bir açıklamasını görüntüler. Sürücü Doğrulayıcı'nın Hata Denetimi DRIVER_VERIFIER_DETECTED_VIOLATION (C4) oluşturduğu bir örnek aşağıda verilmiştir.
Driver Verifier: Extension abort with Error Code 0x20005
Error String ExAcquireFastMutex should only be called at IRQL <= APC_LEVEL.
*** Fatal System Error: 0x000000c4
(0x0000000000020005,0xFFFFF88000E16F50,0x0000000000000000,0x0000000000000000)
Break instruction exception - code 80000003 (first chance)
A fatal system error has occurred.
Debugger entered on first try; Bugcheck callbacks have not been invoked.
A fatal system error has occurred.
nt!DbgBreakPointWithStatus:
fffff802`a40ef930 cc int 3
Hata ayıklayıcıda hatanın ayrıntılı açıklamasını almak için !analyze -v girin.
0: kd> !analyze -v
Connected to Windows 8 9200 x64 target at (Thu Oct 11 13:48:31.270 2012 (UTC - 7:00)), ptr64 TRUE
Loading Kernel Symbols
...............................................................
................................................................
...................
Loading User Symbols
..................................................
Loading unloaded module list
............
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DRIVER_VERIFIER_DETECTED_VIOLATION (c4)
A device driver attempting to corrupt the system has been caught. This is
because the driver was specified in the registry as being suspect (by the
administrator) and the kernel has enabled substantial checking of this driver.
If the driver attempts to corrupt the system, bugchecks 0xC4, 0xC1 and 0xA will
be among the most commonly seen crashes.
Arguments:
Arg1: 0000000000020005, ID of the 'IrqlExApcLte1' rule that was violated.
Arg2: fffff88000e16f50, A pointer to the string describing the violated rule condition.
Arg3: 0000000000000000, An optional pointer to the rule state variable(s).
Arg4: 0000000000000000, Reserved (unused)
## Debugging Details:
...
DV_VIOLATED_CONDITION: ExAcquireFastMutex should only be called at IRQL <= APC_LEVEL.
DV_MSDN_LINK: !url https://go.microsoft.com/fwlink/p/?linkid=216022
DV_RULE_INFO: !ruleinfo 0x20005
BUGCHECK_STR: 0xc4_IrqlExApcLte1_XDV
DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT
PROCESS_NAME: TiWorker.exe
CURRENT_IRQL: 9
Yukarıdaki çıkışta, ihlal edilen IrqlExApcLte1 kuralının adını ve açıklamasını görebilir ve IrqlExApcLte1kuralını (wdm) açıklayan başvuru sayfasının bağlantısını seçebilirsiniz. Kural hakkında bilgi almak için !ruleinfo 0x20005 bir hata ayıklayıcısı komut bağlantısı da seçebilirsiniz. Bu durumda kural, kesme isteği düzeyi (IRQL) APC_LEVEL'den büyükse ExAcquireFastMutex'i çağıramayacağınızı belirtir. Çıkışta geçerli IRQL'in 9 olduğu ve wdm.h dosyasında APC_LEVEL değerinin 1 olduğunu görebilirsiniz. IRQL'ler hakkında daha fazla bilgi için bkz. Donanım Önceliklerini Yönetme.
!analyze -v çıktısı bir yığın izlemesi ve hataya neden olan kod hakkındaki bilgilerle devam eder. Aşağıdaki çıktıda, MyDriver.sys'da ExAcquireFastMutex adlı OnInterrupt yordamının olduğunu görebilirsiniz. OnInterrupt , APC_LEVEL'den büyük bir IRQL'de çalışan bir kesme hizmeti yordamıdır, bu nedenle bu yordamın ExAcquireFastMutex'i çağırması bir ihlaldir.
LAST_CONTROL_TRANSFER: from fffff802a41f00ea to fffff802a40ef930
STACK_TEXT:
... : nt!DbgBreakPointWithStatus ...
... : nt!KiBugCheckDebugBreak+0x12 ...
... : nt!KeBugCheck2+0x79f ...
... : nt!KeBugCheckEx+0x104 ...
... : VerifierExt!SLIC_abort+0x47 ...
... : VerifierExt!SLIC_ExAcquireFastMutex_entry_irqlexapclte1+0x25 ...
... : VerifierExt!ExAcquireFastMutex_wrapper+0x1a ...
... : nt!ViExAcquireFastMutexCommon+0x1d ...
... : nt!VerifierExAcquireFastMutex+0x1a ...
... : MyDriver!OnInterrupt+0x69 ...
... : nt!KiScanInterruptObjectList+0x6f ...
... : nt!KiChainedDispatch+0x19a ...
...
STACK_COMMAND: kb
FOLLOWUP_IP:
MyDriver!OnInterrupt+69 ...
fffff880`16306649 4c8d0510040000 lea r8,[MyDriver! ?? ::FNODOBFM::`string' (fffff880`16306a60)]
FAULTING_SOURCE_LINE: c:\MyDriverwdm03\cpp\MyDriver\pnp.c
FAULTING_SOURCE_FILE: c:\MyDriverwdm03\cpp\MyDriver\pnp.c
FAULTING_SOURCE_LINE_NUMBER: 26
FAULTING_SOURCE_CODE:
22: if(1 == interruptStatus)
23: {
24: ...
25: ExAcquireFastMutex( &(fdoExt->fastMutex) );
> 26: ...
27: ExReleaseFastMutex( &(fdoExt->fastMutex) );
28: ...
29: return TRUE;
30: }
31: else
SYMBOL_STACK_INDEX: 9
SYMBOL_NAME: MyDriver!OnInterrupt+69
FOLLOWUP_NAME: ...
MODULE_NAME: MyDriver
IMAGE_NAME: MyDriver.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 50772f37
BUCKET_ID_FUNC_OFFSET: 69
FAILURE_BUCKET_ID: 0xc4_IrqlExApcLte1_XDV_VRF_MyDriver!OnInterrupt
BUCKET_ID: 0xc4_IrqlExApcLte1_XDV_VRF_MyDriver!OnInterrupt
Ayrıca bkz.
Statik Sürücü Doğrulayıcı