DRIVER_PROXY_REGISTER_CALLBACK 回呼會定義在 DriverProxy 端點註冊和熱抽換作業期間不同階段叫用的常式。
語法
DRIVER_PROXY_REGISTER_CALLBACK DriverProxyRegisterCallback;
NTSTATUS DriverProxyRegisterCallback(
DRIVER_PROXY_REGISTER_CALLBACK_PHASE Phase,
PVOID Context
)
{...}
參數
Phase
[在] DRIVER_PROXY_REGISTER_CALLBACK_PHASE 值,指出目前正在執行註冊程序的哪個階段。
Context
[in,可選]傳遞至 IoRegisterDriverProxyEndpoints 的驅動程式定義內容資訊指標。 如果未提供內容,則此參數可以為 Null。
返回值
DRIVER_PROXY_REGISTER_CALLBACK 會傳回下列其中一個 NTSTATUS 值:
| 回傳碼 | Description |
|---|---|
| STATUS_SUCCESS | 回呼已順利完成。 端點註冊程序將繼續進行下一階段。 |
| 其他 NTSTATUS 值 | 回呼發生錯誤。 整個端點註冊作業將會失敗,而且任何部分變更都會復原。 |
備註
此回呼可讓驅動程式在端點註冊程式期間的特定點執行自訂作業,從而與熱插拔機制協調。
此回呼是由 IoRegisterDriverProxyEndpoints 在端點註冊和熱抽換作業期間叫用。 回呼會以 PASSIVE_LEVEL 執行,並為驅動程式提供在熱抽換程式的重要階段與 DriverProxy 系統協調的機會。
在端點註冊期間,會以特定順序叫用回呼:
前置處理階段:在任何端點函數切換開始之前呼叫。 驅動程式可以使用此階段來為即將到來的變更做準備,例如:
- 取得驅動程式專用鎖
- 儲存目前狀態
- 通知其他驅動程式元件
- 準備切換期間所需的資源
Proxy 停滯階段:在封鎖所有已註冊端點的呼叫時呼叫。 在此階段期間,DriverProxy 系統會保留執行鎖定,而且不會繼續對端點函式進行新的呼叫。 這是執行需要獨佔存取端點函式可能存取之資源的作業的最安全時間,例如:
- 更新共用資料結構
- 重新配置硬體
- 修改全域驅動程式狀態
後處理階段:在端點功能切換完成,恢復正常操作後呼叫。 驅動程式可以使用此階段進行清除作業,例如:
- 釋放驅動程式特定的鎖定
- 更新內部狀態
- 通知其他元件完成
- 記錄或效能追蹤
回呼必須傳回 STATUS_SUCCESS 才能繼續註冊。 任何失敗都會導致整個作業失敗並回滾。
在 DriverProxyRegisterCallbackProxyStalled 階段期間,會封鎖所有端點呼叫,因此回呼應該快速執行作業,以將系統中斷降到最低。
回呼不應該執行可能回呼至相同 DriverProxy 延伸模組的作業,因為這可能會導致死結。
回呼是選擇性的,如果在端點註冊期間不需要驅動程式特定的協調,則可以是 Null。
需求
| Requirement | 價值觀 |
|---|---|
| 目標平臺 | 普遍 |
| Header | wdm.h |
| IRQL | PASSIVE_LEVEL |
另請參閱
IoRegisterDriverProxyEndpoints
DRIVER_PROXY_REGISTER_CALLBACK_PHASE