處理重迭的 I/O 作業

在裝置上重迭作業的驅動程式 DpcForIsrCustomDpc 常式,無法依賴對 StartIo 常式的要求輸入與 ISR 對 IoRequestDpcKeInsertQueueDpc的呼叫之間的一對一對應。 這類驅動程式的 DpcForIsrCustomDpc 不一定使用 IRP 和 ISR 提供內容的輸入指標,或目標裝置物件中的 CurrentIrp 指標,只完成該 IRP。

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

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

  • DpcForIsrCustomDpc常式,可在每次呼叫時完成一些未處理要求的驅動程式維護計數

  • 永遠不會覆寫傳遞給 DpcForIsrCustomDpc 常式之內容資訊的 ISR,直到該常式使用內容資訊並完成內容資訊所屬的 IRP 為止

  • 代表DpcForIsrCustomDpc常式存取 ISR 內容區域的SynchCritSection常式