共用方式為


ExCreateCallback 函式 (wdm.h)

ExCreateCallback 例程會建立新的回呼物件,或代表呼叫端開啟現有的回呼物件。

語法

NTSTATUS ExCreateCallback(
  [out] PCALLBACK_OBJECT   *CallbackObject,
  [in]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in]  BOOLEAN            Create,
  [in]  BOOLEAN            AllowMultipleCallbacks
);

參數

[out] CallbackObject

接收回呼對象指標之位置的指標,這是不透明的系統結構。 如果 ExCreateCallback 呼叫成功,例程會將新建立或開啟的回呼對象的位址寫入這個位置。 從這個例程取得的回呼對象指標可以做為參數提供給 ExRegisterCallbackExNotifyCallback 例程。

[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

另請參閱

ExNotifyCallback

ExRegisterCallback

InitializeObjectAttributes

ObDereferenceObject