Aturan DeferredRequestCompleted (kmdf)

Aturan DeferredRequestCompleted menentukan bahwa jika permintaan I/O yang disajikan ke antrean I/O default driver tidak diselesaikan dalam fungsi panggilan balik tetapi ditangguhkan untuk diproses nanti, permintaan harus diselesaikan dalam fungsi panggilan balik pemrosesan yang ditangguhkan, kecuali permintaan diteruskan dan dikirimkan ke kerangka kerja, atau kecuali metode WdfRequestStopAcknowledge dipanggil.

Aturan DeferredRequestCompleted mengharuskan Anda mengidentifikasi permintaan yang ditangguhkan menggunakan makro __sdv_save_request dan __sdv_retrieve_request . Untuk informasi tentang cara menggunakan makro ini, lihat Menggunakan __sdv_save_request dan __sdv_retrieve_request untuk Panggilan Prosedur Yang Ditangguhkan. Aturan prasyarat AliasWithinTimerDpc memeriksa keberadaan makro ini.

Permintaan yang disajikan ke antrean default driver melalui salah satu fungsi panggilan balik antrean dan ditangguhkan, harus diselesaikan sebelum keluar dari fungsi panggilan balik permintaan I/O, kecuali dalam kasus berikut:

  • Permintaan I/O diteruskan ke target I/O atau ke antrean lain

  • Permintaan I/O dikirimkan ke kerangka kerja (dengan memanggil WdfDeviceEnqueueRequest)

  • Metode WdfRequestStopAcknowledge dipanggil

Aturan diverifikasi ketika driver keluar dari fungsi panggilan balik berikut:

  • EvtIoStop, EvtCleanupCallback , atau EvtDestroyCallback untuk antrean

  • EvtCleanupCallback atau EvtDestroyCallback untuk objek file

  • EvtFileClose, EvtFileCleanup, EvtDeviceSelfManagedIoSuspend, EvtDeviceSelfManagedIoFlush, EvtDeviceSelfManagedIoCleanup, EvtDeviceShutdownNotification, EvtDeviceSurpriseRemoval, EvtCleanupCallback atau EvtDestroyCallback untuk perangkat

  • EvtDriverUnload

Fungsi panggilan balik antrean I/O untuk presentasi permintaan I/O adalah EvtIoDefault, EvtIoRead, EvtIoWrite, EvtIoDeviceControl, dan EvtIoInternalDeviceControl.

Fungsi panggilan balik pemrosesan yang ditangguhkan untuk permintaan I/O adalah EvtTimerFunc, EvtDpcFunc, EvtInterruptDpc, EvtInterruptEnable, EvtInterruptDisable, dan EvtWorkItem.

Aturan DeferredRequestCompleted menggunakan panggilan ke metode WdfRequestMarkCancelable, WdfDmaTransactionInitializeUsingRequest, WdfDmaTransactionInitialize, atau WdfWorkItemEnqueue untuk menunjukkan bahwa permintaan I/O sedang ditangguhkan.

Model driver: KMDF

Cara menguji

Pada waktu kompilasi

Jalankan Pemverifikasi Driver Statis dan tentukan aturan DeferredRequestCompleted .

Gunakan langkah-langkah berikut untuk menjalankan analisis kode Anda:
  1. Siapkan kode Anda (gunakan deklarasi jenis peran).
  2. Jalankan Pemverifikasi Driver Statis.
  3. Lihat dan analisis hasilnya.

Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver.

Berlaku untuk

WdfDeviceEnqueueRequestWdfDmaTransactionInitializeWdfDmaTransactionInitializeUsingRequestWdfIoTargetSendInternalIoctlOthersSynchronouslyWdfIoTargetSendInternalIoctlSy Secara sinkronWdfIoTargetSendIoctlSynchronouslyWdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfRequestCompleteWdfRequestCompleteWithInformationWdfRequestCompleteWithPriorityBoostWdfRequestForwardToIoQueueWdfRequestMarkCancelableWdfRequestMarkCancelableExWdfRequestSendWdfRequestStopAcknowledgeWdfRequestUnmarkCancelableWdfWorkItemEnqueue