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ünüzün G/Ç istek paketlerini (IRP) doğru şekilde tamamlayıp iptal ettiğini doğrulamak için bu kuralları kullanın.
Bu bölümde
| Konu | Açıklama |
|---|---|
ChangeQueueState kuralı, WDF sürücüsünün Sıranın durumunu eşzamanlı iş parçacıklarından değiştirmeye çalışmadığını veya aynı iş parçacığı içinden DDI'leri birbiri ardına değiştirme durumunu çağırmadığını belirtir. Kuyruk durumu değişen geri çağırma işlevleri WdfIoQueueStop, WdfIoQueueStopSynchronously,WdfIoQueuePurge,WdfIoQueuePurgeSynchronously, WdfIoQueueDrain,WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurge ve WdfIoQueueStopAndPurgesynchronously şeklindedir. Kuyruk durumu değişikliği devam ederken bu DDI'ler çağrılırsa, bilgisayarın kilitlenmesine veya yanıt vermemeye başlamasına neden olur. |
|
CompleteCanceledReq kuralı, istek zaten iptal edilmişse isteğin artık geçerli olmadığını ve sürücünün bunu tamamlamaması gerektiğini belirtir. Sürücü daha önce iptal edilebilir olarak işaretlenmiş bir isteğin işaretini kaldırsa da, isteğin henüz iptal edilmemiş olup olmadığını denetlemesi gerekir. Sürücü bu denetimi yapmazsa, sürücü serbest bırakılmış bir isteği tamamlayabilir. |
|
DoubleCompletion kuralı, sürücülerin G/Ç isteğini iki kez tamamlamaması gerektiğini belirtir. Aynı istek için aşağıdaki yöntemler bir satırda iki kez çağrılmamalıdır: WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost. |
|
DoubleCompletionLocal kuralı, sürücülerin G/Ç isteğini iki kez tamamlamaması gerektiğini belirtir. |
|
EvtIoStopCancel kuralı, EvtIoStop geri çağırma işlevinde sürücünün iptal edilemeyen G/Ç istekleri için aşağıdaki yöntemlerden birini çağırdığını belirtir. |
|
EvtIoStopCompleteOrStopAck kuralı, EvtIoStop geri çağırma işlevinde sürücünün çerçeve tarafından sunulan her G/Ç isteği için aşağıdaki yöntemlerden birini çağırdığını belirtir. Bu yapılmazsa, sürücü sistemin başka bir düşük güç durumuna girmesini engelleyebilir. |
|
EvtSurpriseRemoveNoSuspendQueue kuralı, WDF Sürücülerinin sırayı EvtDeviceSurpriseRemoval geri çağırma işlevinden boşaltmaması, durdurmaması veya temizlememesi gerektiğini belirtir; bunun yerine, kendi kendini yöneten G/Ç geri çağırma işlevleri kullanılmalıdır. EvtDeviceSurpriseRemoval geri çağırma işlevi, açma/kapama yolu ile eşitlenmez. |
|
FileObjectConfigured kuralı, WdfRequestGetFileObject yöntemine yapılan bir çağrının önüne WdfDeviceInitSetFileObjectConfig çağrısının eklendiğini belirtir. |
|
InternalIoctlReqs kuralı, iç IOCTL isteklerinin uygunsuz KMDF istek gönderme cihaz sürücüsü arabirimlerine (DDI) geçirilmediğini belirtir. |
|
InvalidReqAccess kuralı, istekler tamamlandıktan veya iptal edildikten sonra isteklere erişilmediğini belirtir. Bu kural, çift tamamlama denetimine sahip kurallar veya istekleri denetleen kurallar iki kez iptal edilebilir olarak işaretlenmiş gibi diğer kurallarla çakışabilir. |
|
InvalidReqAccessLocal kuralı, yerel olarak oluşturulan isteklere tamamlandıktan veya iptal edildikten sonra erişilmediğini belirtir. Bu kural, çift tamamlama denetimine sahip kurallar veya istekleri denetleen kurallar iki kez iptal edilebilir olarak işaretlenmiş gibi diğer kurallarla çakışabilir. |
|
IoctlReqs kuralı, IOCTL isteklerinin uygunsuz KMDF isteğine geçirilmemesi veya cihaz sürücüsü arabirimleri (DDI) göndermemesi gerektiğini belirtir. |
|
MarkCancOnCancReqLocal kuralı, WdfRequestMarkCancelable yönteminin aynı G/Ç isteğinde art arda iki kez çağrılamayacağını belirtir. |
|
NoIoQueuePurgeSynchronously kuralı, WDF sürücülerinin WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously veya WdfIoQueuePurgeSynchronously işlevlerini aşağıdaki EvtIO kuyruk nesnesi olay geri çağırma işlevlerinden çağırmadığını doğrular: |
|
OutputBufferAPI kuralı, evtIoWrite geri çağırma işlevinde arabellek alma için doğru DDI'lerin kullanıldığını belirtir. EvtIoWrite geri çağırma işlevinde arabelleğe alma için aşağıdaki DDI'ler çağrılamaz: |
|
ReadReqs kuralı, okuma isteklerinin uygunsuz KMDF yöntemlerine geçirilmediğini belirtir. |
|
ReqCompletionRoutine kuralı, bir G/Ç hedefine istek gönderilmeden önce tamamlama yordamının ayarlanması gerektiğini belirtir. |
|
ReqDelete kuralı, sürücü tarafından oluşturulan isteklerin WdfRequestCompleteXxx işlevlerine geçirilmediğini belirtir. Bunun yerine, istek tamamlandıktan sonra silinmelidir. |
|
ReqIsCancOnCancReq kuralı, WdfRequestIsCanceled yönteminin yalnızca iptal edilebilir olarak işaretlenmemiş bir istekte çağrılabileceğini belirtir. |
|
ReqMarkCancelableSend kuralı, sürücü tarafından iletilen isteklerin WdfRequestMarkCancelable çağrılarak iptal edilebilir olarak işaretlenmediğini belirtir. |
|
DeferredRequestCompleted kuralı, filtre olmayan bir sürücü için, istek ertelenmediği veya iletilmediği veya WdfRequestStopAcknowledge çağrılmadığı sürece, sürücünün varsayılan G/Ç kuyruğuna sunulan her isteğin tamamlanması gerektiğini belirtir. |
|
RequestFormattedValid kuralı, sürücünün bir G/Ç hedefine göndermeden önce bir WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET isteği dışında tüm istekleri biçimlendirdiğini belirtir. |
|
WdfRequestGetStatus'un aşağıdaki durumlardan birinde istek için çağrılması gerektiğini belirten RequestGetStatusValid kuralı:
|
|
RequestSendAndForgetNoFormatting kuralı, bir G/Ç isteğini WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET seçeneğiyle G/Ç hedefine göndermeden önce, sürücünün G/Ç hedef biçimlendirme işlevlerini kullanarak biçimlendirmediğini doğrular. |
|
RequestSendAndForgetNoFormatting2 kuralı, sürücünün WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET gönderme seçeneğiyle bir G/Ç hedefine göndermeden önce bir isteği G/Ç biçimlendirme işlevlerini kullanarak biçimlendirmediğini kontrol eder. |
|
StopAckWithinEvtIoStop kuralı, WdfRequestStopAcknowledge işlevinin yalnızca EvtIoStop geri çağırma işlevinin içinden çağrıldığını belirtir. |
|
WdfIoQueueFindRequestFailed kuralı, WdfIoQueueRetrieveFoundRequest veya WdfObjectDereference'ın yalnızca WdfIoQueueFindRequestFailed STATUS_SUCCESS döndürdükten sonra çağrılması gerektiğini belirtir. |
|
WdfIoQueueRetrieveFoundRequest kuralı, WdfIoQueueRetrieveFoundRequest yönteminin yalnızca WdfIoQueueFindRequest çağrıldıktan ve STATUS_SUCCESS döndürüldükten sonra çağrıldığını ve aynı istekte hiçbir WdfObjectDereference çağrılmadığını belirtir. |
|
WdfIoQueueRetrieveNextRequest kuralı, WdfIoQueueRetrieveNextRequest'inWdfIoQueueFindRequest çağrıldıktan sonra çağrılmadığını belirtir. |
|
WriteReqs kuralı, bir yazma isteğinin uygunsuz KMDF yöntemlerine geçirilmediğini belirtir. |
RequestProcessing kural kümesini seçmek için
Microsoft Visual Studio'da sürücü projenizi (.vcxProj) seçin. Sürücüsü menüsünde tıklayın, Statik Sürücü Doğrulayıcıyı Başlat....
Kurallar sekmesine tıklayın. Kural Kümeleri'nin altında requestProcessing'i seçin.
Visual Studio geliştirici komut istemi penceresinden varsayılan kural kümesini seçmek için /check seçeneğiyle RequestProcessing.sdv değerini belirtin. Örneğin:
msbuild /t:sdv /p:Inputs="/check:RequestProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Daha fazla bilgi için Sürücülerdeki Hataları Bulmak için Statik Sürücü Doğrulayıcı Kullanma ve Statik Sürücü Doğrulayıcı Komutları (MSBuild)bölümüne bakın.