安全數位(SD)卡驅動程式沒有中斷服務例程(ISR),而且它們不會取得中斷要求 (IRQ) 資源。 SD 總線驅動程式會偵測和攔截硬體中斷,然後透過中斷通知回呼例程 PSDBUS_CALLBACK_ROUTINE將其報告給設備驅動器,如 安全數位(SD) 驅動程式堆疊 和 開啟和初始化 SD 總線介面一節所述。
設備驅動程式不必在中斷通知回調函式的上下文中完成中斷處理。 驅動程式可以從回呼程序傳回,並在自己的上下文中完成中斷處理。 當驅動程式完成處理中斷時,它會透過明確呼叫 SD 總線介面所提供的中斷通知例程,通知總線驅動程式。 如需中斷通知例程的詳細資訊,請參閱 PSDBUS_ACKNOWLEDGE_INT_ROUTINE。 當總線驅動程式收到此呼叫時,它會重新啟用中斷。
SD 設備驅動器有兩個選項,適用於其執行所在的 IRQ 層級(IRQL)。 SD 驅動程式可以在 PASSIVE_LEVEL 獨佔執行,或者在中斷通知回呼例程中於 DISPATCH_LEVEL 運行,其餘時間則在 PASSIVE_LEVEL 運行。 當 SD 裝置驅動器在 PASSIVE_LEVEL 執行時,總線驅動程式會負責同步處理中斷。 如果您的裝置可以在中斷延遲上不受嚴格限制的情況下運作,請選擇此選項,因為它可簡化驅動程序的設計。 除了將中斷同步處理的工作卸除至總線驅動程式之外,還有其他優點。 例如,驅動程式必須經常傳輸數據,以響應中斷。 如果驅動程式的回呼例程在PASSIVE_LEVEL執行,您可以自由執行同步 I/O 作業,而不是異步 I/O 作業。 如果回呼例程在DISPATCH_LEVEL執行,驅動程式必須等到回呼例程在較低的 IRQL 上執行時,再執行同步 I/O。
SD 設備驅動器會指定 IRQL,以在初始化 SD 總線介面時執行。 若要在中斷通知回呼例程中於DISPATCH_LEVEL執行,驅動程式必須將CallbackAtDpcLevel成員設為TRUE,並將此SDBUS_INTERFACE_PARAMETERS結構傳遞給介面初始化例程。 如需介面例程的描述,請參閱 PSDBUS_INITIALIZE_INTERFACE_ROUTINE。 若要在 PASSIVE_LEVEL 獨佔執行,驅動程式必須將 callbackAtDpcLevel 設定為 FALSE。