處理重迭的 I/O 作業
在裝置上重迭作業的驅動程式 DpcForIsr 或 CustomDpc 常式,無法依賴對 StartIo 常式的要求輸入與 ISR 對 IoRequestDpc 或 KeInsertQueueDpc的呼叫之間的一對一對應。 這類驅動程式的 DpcForIsr 或 CustomDpc 不一定使用 IRP 和 ISR 提供內容的輸入指標,或目標裝置物件中的 CurrentIrp 指標,只完成該 IRP。
在任何指定的時間點,相同的 DPC 物件無法排入佇列兩次。 如果 ISR 在對應的DpcForIsr或CustomDpc執行之前多次呼叫IoRequestDpc或KeInsertQueueDpc,則 DPC 常式只會在處理器上的 IRQL 低於DISPATCH_LEVEL執行一次。 另一方面,如果 ISR 呼叫 IoRequestDpc 或 KeInsertQueueDpc ,而對應的 DpcForIsr 或 CustomDpc 在另一個處理器上執行,DPC 常式可以同時在兩個處理器上執行。
因此,在其裝置上重迭中斷驅動 I/O 作業的任何驅動程式都必須具有下列專案:
DpcForIsr或CustomDpc常式,可在每次呼叫時完成一些未處理要求的驅動程式維護計數
永遠不會覆寫傳遞給 DpcForIsr 或 CustomDpc 常式之內容資訊的 ISR,直到該常式使用內容資訊並完成內容資訊所屬的 IRP 為止
代表DpcForIsr或CustomDpc常式存取 ISR 內容區域的SynchCritSection常式