分派常式和 IRQL

大部分驅動程式的分派常式都會在 IRQL = PASSIVE_LEVEL的任意執行緒內容中呼叫,但有下列例外狀況:

  • 任何最高層級驅動程式的分派常式,都是在源自 I/O 要求的執行緒內容中呼叫,通常是使用者模式應用程式執行緒。

    換句話說,在 IRQL = PASSIVE_LEVEL的非bitrary 執行緒內容中,會呼叫檔案系統驅動程式和其他最高層級驅動程式的分派常式。

  • 最低層級設備磁碟機的 DispatchReadDispatchWriteDispatchDeviceControl 常式,以及在系統分頁路徑中階層式中繼驅動程式,可以在 IRQL = APC_LEVEL和任意執行緒內容中呼叫。

    DispatchRead和/或DispatchWrite常式,以及處理這類最低層級裝置或中繼驅動程式中讀取和/或寫入要求的任何其他常式,都必須隨時駐留。 這些驅動程式常式不能是可分頁的,也無法是驅動程式的可分頁影像區段的一部分;它們不得存取任何可分頁的記憶體。 此外,它們不應該依賴任何封鎖呼叫 (,例如 KeWaitForSingleObject 與非零逾時) 。

  • 您可以在 IRQL = DISPATCH_LEVEL呼叫休眠和/或分頁路徑中的驅動程式 DispatchPower 常式。 這類驅動程式的 DispatchPnP 常式必須準備好來處理 PnP IRP_MN_DEVICE_USAGE_NOTIFICATION 要求。

  • 在啟動時需要啟動電源的驅動程式 DispatchPower 常式可以在 IRQL = DISPATCH_LEVEL呼叫。

如需詳細資訊,請參閱 管理硬體優先順序