共用方式為


處理重疊的 I/O 作業

在其裝置上進行重疊操作的驅動程式的 DpcForIsrCustomDpc 例程不能依賴輸入到 StartIo 例程的請求與 ISR 對 IoRequestDpcKeInsertQueueDpc 呼叫之間的一對一對應。 這類驅動程式的DpcForIsrCustomDpc不一定會使用指向IRP和ISR提供的內容的輸入指標,或目標裝置物件中的CurrentIrp指標,來僅完成該IRP。

在任何指定的時刻,相同的 DPC 對象無法排入佇列兩次。 如果ISR在對應的 DpcForIsrCustomDpc 執行之前多次呼叫 IoRequestDpcKeInsertQueueDpc,則只有在處理器上的 IRQL 低於DISPATCH_LEVEL時,DPC 例程才會執行一次。 另一方面,如果ISR呼叫 IoRequestDpcKeInsertQueueDpc ,而對應的 DpcForIsrCustomDpc 在另一個處理器上執行,則 DPC 例程可以同時在兩個處理器上執行。

因此,在其裝置上重疊中斷驅動的輸入/輸出作業的任何驅動程式都必須具有下列專案:

  • DpcForIsrCustomDpc 例程,可在每次呼叫時完成一些由驅動程序維護的未完成要求計數

  • ISR 不會覆寫其傳遞給 DpcForIsrCustomDpc 例程的上下文資訊,直到該例程使用了這些上下文資訊並完成其所屬的 IRP。

  • 代表 DpcForIsrCustomDpc 例程存取 ISR 內容區域的 SynchCritSection 例程