ExCreateCallback 函式 (wdm.h)
ExCreateCallback 例程會建立新的回呼物件,或代表呼叫端開啟現有的回呼物件。
語法
NTSTATUS ExCreateCallback(
[out] PCALLBACK_OBJECT *CallbackObject,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
[in] BOOLEAN Create,
[in] BOOLEAN AllowMultipleCallbacks
);
參數
[out] CallbackObject
接收回呼對象指標之位置的指標,這是不透明的系統結構。 如果 ExCreateCallback 呼叫成功,例程會將新建立或開啟的回呼對象的位址寫入這個位置。 從這個例程取得的回呼對象指標可以做為參數提供給 ExRegisterCallback 或 ExNotifyCallback 例程。
[in] ObjectAttributes
包含回呼物件屬性之 OBJECT_ATTRIBUTES 結構的指標。 這個結構先前是由 InitializeObjectAttributes 例程初始化。
[in] Create
是否要建立回呼物件。 設定為 TRUE,以在無法開啟要求的物件時建立新的回呼物件。 否則,請將 設為 FALSE。
[in] AllowMultipleCallbacks
新建立的回呼物件是否應該允許多個已註冊的回呼例程。 設定為 TRUE,以允許多個已註冊的回呼例程。 否則,請將 設為 FALSE。 當 建立FALSE 或開啟現有物件時,會忽略此參數。
傳回值
如果已開啟或建立回呼物件,ExCreateCallback 會傳回STATUS_SUCCESS。 否則,它會傳回NTSTATUS錯誤碼,以指出失敗的性質。
言論
驅動程式會呼叫 ExCreateCallback,以建立新的回呼對象或開啟現有的回呼物件。 建立或開啟對象之後,其他元件可以呼叫 ExRegisterCallback 例程,向回呼物件註冊回呼例程。
在呼叫 exCreateCallback之前,驅動程式必須呼叫 InitializeObjectAttributes,以初始化回呼物件的 OBJECT_ATTRIBUTES 結構。 不允許未命名的回呼物件。 呼叫端必須指定物件的名稱;否則,呼叫會因為STATUS_UNSUCCESSFUL而失敗。 呼叫端應該在回呼物件中指定OBJ_PERMANENT屬性,以防止刪除物件,然後才能向物件管理員註冊該物件。 呼叫端也應該指定可能需要的任何其他屬性,例如OBJ_CASE_INSENSITIVE。
當所有作業都已完成回呼物件時,驅動程式必須刪除物件,以避免記憶體流失。 如需刪除以 OBJ_PERMANENT 物件屬性建立的物件的相關信息,請參閱 ObDereferenceObject。
下表顯示作系統建立供驅動程式使用的回呼物件。
回呼物件名稱 | 用法 |
---|---|
\Callback\SetSystemTime | 每當系統時間變更時,作系統就會呼叫針對這個物件註冊的任何回呼例程。 |
\Callback\PowerState | 每當特定系統電源特性變更時,作系統會呼叫針對這個物件註冊的任何回呼例程。 當驅動程式註冊回呼通知時(藉由呼叫 ExRegisterCallback),它可以指定應該通知的變更。 |
如需回呼對象的詳細資訊,請參閱 回呼物件。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIS(storport),IrqlExApcLte2(wdm),IrqlExPassive |