Freigeben über


Ungültige Schlüsselobjektzeiger in Registrierungsbenachrichtigungen

Um schwerwiegende Fehler und mögliche Speicherbeschädigungen zu vermeiden, darf ein Registrierungsfiltertreiber nicht versuchen, mithilfe eines ungültigen Objektzeigers auf ein Schlüsselobjekt zuzugreifen. In diesem Thema werden die Umstände aufgeführt, unter denen das Objektelement einer Registrierungsrückrufbenachrichtigungsstruktur einen nicht definierten, nicht NULL-Wert enthalten kann.

Bei einem Registrierungsfiltertreiber ist der zweite Parameter der RegistryCallback-Routine ein REG_NOTIFY_CLASS Enumerationswert. Dieser Wert gibt an, auf welchen Typ der Registrierungsrückrufbenachrichtigungsstruktur der dritte Parameter der RegistryCallback-Routine verweist. Die Benachrichtigungsstruktur enthält Informationen zum Registrierungsvorgang. Der Typ dieser Struktur variiert je nach dem Registrierungsvorgang, der ausgeführt wird.

Viele der Benachrichtigungsstrukturtypen enthalten ein Objektelement , das auf ein Schlüsselobjekt verweist. In einigen Fällen kann das Objektelement einen Wert enthalten, der nicht NULL ist, aber kein Zeiger auf ein gültiges Schlüsselobjekt ist.

Key-Objektwert ist nicht definiert

Wenn der zweite Parameter in einem Aufruf der RegistryCallback-Routine eines Registrierungsfiltertreibers ein REG_NOTIFY_CLASS Enumerationswert von RegNtPostCreateKeyEx oder RegNtPostOpenKeyEx ist, ist der dritte Parameter ein Zeiger auf eine REG_POST_OPERATION_INFORMATION Struktur. Das Objektelement dieser Struktur ist nur gültig, wenn das Statuselement der Struktur auf STATUS_SUCCESS festgelegt ist. Jeder andere Statuswert, einschließlich eines Nicht-Null-Statuscodes, für den das NT_SUCCESS-Makro den Wert WAHR ergibt, gibt an, dass der Wert des Mitglied-Objekts nicht definiert ist.

Der Schlüsselobjektwert befindet sich nicht im gültigen Zustand.

Wenn der zweite Parameter in einem Registrierungsrückruf eines der folgenden REG_NOTIFY_CLASS Enumerationswerte ist, verweist das Objektelement der Registrierungsrückrufbenachrichtigungsstruktur auf ein Schlüsselobjekt, das zerstört wird und dessen Verweisanzahl null ist:

Da das Objektelement auf ein Schlüsselobjekt verweist, das sich nicht in einem gültigen Zustand befindet, darf der Registrierungsfiltertreiber den Objektzeigerwert nicht als Parameter an eine Windows-Treiberunterstützungsroutine übergeben (z. B. ObReferenceObjectByPointer).

Während eines Registrierungscallback-Aufrufs zum Behandeln einer RegNtPreKeyHandleClose - oder RegNtPostKeyHandleClose-Benachrichtigung kann ein Registrierungsfiltertreiber jedoch eine Configuration Manager-Routine (z. B. CmGetBoundTransaction) aufrufen, die ein Registrierungsobjekt als Parameter akzeptiert.