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 G/Ç isteğini iptal edilebilir hale getirmek için WdfRequestMarkCancelable veya WdfRequestMarkCancelableEx'i çağırırsa, eşitleme sorunuyla karşılaşılabilir. Örneğin, sürücünüz ve cihazınız EvtInterruptIsr ve EvtInterruptDpc geri çağırma işlevleri yoluyla cihaz G/Ç işlemlerini zaman uyumsuz olarak gerçekleştirebilir ve hem EvtInterruptDpc hem de EvtRequestCancel geri çağırma işlevleri WdfRequestComplete çağrıları içerebilir.
Sürücünün isteği tamamlamak veya iptal etmek için WdfRequestComplete'i yalnızca bir kez çağırması gerekir. Ancak EvtInterruptDpc ve EvtRequestCancel geri çağırma işlevleri birbiriyle eşitlenmemişse, diğeri yürütülürken çerçeve birini çağırabilir.
Sürücünüz çerçevenin otomatik eşitlemesini kullanıyorsa bu sorundan kaçınmak kolaydır, çünkü otomatik eşitleme geri çağırma işlevlerinin birer birer çağrılmasını sağlar.
Sürücünüz çerçevenin otomatik eşitlemesini kullanmıyorsa iptal ve tamamlama kodunu eşitlemek için çerçeve kilitlerini kullanabilir.
Sürücünün ister çerçevenin otomatik eşitlemesini kullansın ister kendi eşitlemesini sağlaması fark etmeksizin, sürücünün EvtRequestCancel geri çağırma işlevinin isteği iptal etmek için WdfRequestComplete'i çağırması gerekir. Sürücünün EvtInterruptDpc geri çağırma işlevi WdfRequestUnmarkCancelable'ı aşağıdaki gibi çağırmalıdır:
Status = WdfRequestUnmarkCancelable(Request);
if( Status != STATUS_CANCELLED ) {
WdfRequestComplete(Request, RequestStatus);
}
Bu kod, sürücü isteği iptal etmek için zaten çağırmışsa isteği tamamlamak için WdfRequestComplete'i çağırmamasını sağlar.
Sürücünüz WdfRequestUnmarkCancelable çağırdığında uyması gereken kurallar hakkında daha fazla bilgi için bkz. WdfRequestUnmarkCancelable.