登錄通知中的索引鍵物件指標無效

為了避免嚴重錯誤和可能的記憶體損毀,登錄篩選驅動程式不得嘗試使用不正確物件指標來存取機碼物件。 本主題列出登錄回呼通知結構的 Object 成員可能包含未定義的非Null 值的情況。

在登錄篩選驅動程式中, RegistryCallback 常式的第二個參數是 REG_NOTIFY_CLASS 列舉值。 這個值表示 RegistryCallback 常式的第三個參數所指向的登錄回呼通知結構類型。 通知結構包含登錄作業的相關資訊。 此結構的型別會根據所執行的登錄作業而有所不同。

許多通知結構類型都包含指向索引鍵物件的 Object 成員。 在某些情況下, Object 成員可以包含非Null的值,但不是有效索引鍵物件的指標。

索引鍵物件值未定義

如果登錄篩選驅動程式之RegistryCallback常式中的第二個參數是RegNtPostCreateKeyExRegNtPostOpenKeyExREG_NOTIFY_CLASS列舉值,則第三個參數是REG_POST_OPERATION_INFORMATION結構的指標。 只有當結構的Status成員設定為 STATUS_SUCCESS 時,這個結構的Object成員才有效。 任何其他 Status 值,包括 NT_SUCCESS 宏評估為 TRUE的非零狀態碼,表示 Object 成員的值未定義。

索引鍵物件值不是處於有效狀態

如果登錄回呼中的第二個參數是下列其中一個 REG_NOTIFY_CLASS 列舉值,登錄回呼通知結構的 Object 成員會指向損毀且其參考計數為零的索引鍵物件:

由於 Object 成員指向不是處於有效狀態的機碼物件,因此登錄篩選驅動程式不得將 Object 指標值當做參數傳遞至 Windows 驅動程式支援常式 (,例如 ObReferenceObjectByPointer) 。

不過,在處理RegNtPreKeyHandleClose 或 RegNtPostKeyHandleClose通知的RegistryCallback呼叫期間,登錄篩選驅動程式可以呼叫組態管理員常式 (例如,以登錄物件作為參數的CmGetBoundTransaction) 。