Freigeben über


Behandeln von Benachrichtigungen

Die RegistryCallback-Routine empfängt einen Zeiger auf eine REG_XXX_KEY_INFORMATION-Struktur , die Informationen zum durchgeführten Registrierungsvorgang enthält.

Die RegistryCallback-Routine kann einen Registrierungsvorgang überwachen, blockieren oder ändern.

Überwachen von Registrierungsaufrufen

Wenn ein Registrierungsfiltertreiber Registrierungsvorgänge überwacht, kann seine RegistryCallback-Routine Leistungsindikatoren aktualisieren oder andere Buchhaltungsvorgänge ausführen und dann STATUS_SUCCESS zurückgeben. Immer wenn eine RegistryCallback-Routine STATUS_SUCCESS zurückgibt, führt der Konfigurations-Manager den Registrierungsvorgang weiter aus.

Die Überwachung von Registrierungsaufrufen wird in Windows XP und höheren Versionen von Windows unterstützt.

Blockieren von Registrierungsaufrufen

Ein Registrierungsfiltertreiber kann Registrierungsvorgänge blockieren, wenn seine RegistryCallback-Routine einen status Wert zurückgibt, für den NT_SUCCESS(status) FALSE (d. h. ein nicht erfolgreicher NTSTATUS-Wert) entspricht. Wenn der Konfigurations-Manager einen Rückgabewert ohne Erfolg empfängt, kehrt er sofort mit dem treiberseitig angegebenen status Wert zum aufrufenden Thread zurück. Daher kann ein Registrierungsfiltertreiber Vorabbenachrichtigungen verwenden, um die Verarbeitung von Registrierungsvorgängen zu verhindern.

Wenn eine RegistryCallback-Routine einen status Wert zurückgibt, für den NT_SUCCESS(status) für eine Vorabbenachrichtigung gleich FALSE ist, erfolgt der Rückruf des Vorgangs nach der Benachrichtigung nicht.

Das Blockieren von Registrierungsaufrufen wird in Windows XP und höheren Versionen von Windows unterstützt. Für Windows Vista und höher kann der Treiber die Werte ändern, die der Registrierungsvorgang an den aufrufenden Thread zurückgibt. Diese Werte sind in den REG_XXX_KEY_INFORMATION strukturen für Windows Vista und höher enthalten.

Ändern von Registrierungsaufrufen

Ein Registrierungsfiltertreiber kann die Ausgabeparameter oder den Rückgabewert eines Registrierungsvorgangs ändern. Darüber hinaus kann der Treiber einen Registrierungsvorgang vollständig verarbeiten, anstatt der Registrierung die Verarbeitung des Vorgangs zu gestatten.

Wenn die RegistryCallback-Routine einer Registrierung, die den Treiber filtert, eine Nachbenachrichtigung empfängt, kann folgendes möglich sein:

  • Ändern Sie die Ausgabeparameter, die die REG_XXX_KEY_INFORMATION-Struktur enthält, und geben Sie dann STATUS_SUCCESS zurück. Der Konfigurations-Manager gibt die geänderten Ausgabeparameter an den aufrufenden Thread zurück.

    Das Ändern von Ausgabeparametern wird in Windows Vista und höher unterstützt.

  • Ändern Sie den Rückgabewert des Registrierungsvorgangs, indem Sie einen status Wert für den ReturnStatus-Member der REG_POST_OPERATION_INFORMATION-Struktur angeben und dann STATUS_CALLBACK_BYPASS zurückgeben. Der Konfigurations-Manager gibt den angegebenen Rückgabewert an den aufrufenden Thread zurück.

    Hinweis Wenn der Treiber einen status Code von "Erfolg" in "Fehler" ändert, muss er möglicherweise die Zuordnung von Objekten aufheben, die der Konfigurations-Manager zugewiesen hat. Wenn der Treiber einen status Code von "Fehler" in "Erfolg" ändert, muss er möglicherweise geeignete Ausgabeparameter bereitstellen.

Das Ändern von Rückgabewerten wird in Windows Vista und höher unterstützt.

Wenn die RegistryCallback-Routine eines Registrierungsfiltertreibers eine Vorabbenachrichtigung empfängt, kann die Routine den Registrierungsvorgang selbst verarbeiten und dann STATUS_CALLBACK_BYPASS zurückgeben. Wenn die Registrierung STATUS_CALLBACK_BYPASS vom Treiber empfängt, gibt sie nur STATUS_SUCCESS an den aufrufenden Thread zurück und verarbeitet den Vorgang nicht. Der Treiber entfernt den Registrierungsvorgang und muss ihn vollständig verarbeiten, und der Treiber muss darauf achten, gültige Ausgabewerte in der REG_XXX_KEY_INFORMATION-Struktur zurückzugeben.

Treiber können Registrierungsvorgänge in Windows Vista und höher vorzeitig deaktivieren.

Wenn eine RegistryCallback-Routine STATUS_CALLBACK_BYPASS für eine Vorabbenachrichtigung zurückgibt, erfolgt der Rückruf des Vorgangs nach der Benachrichtigung nicht.

Hinweis Mehrere Aufrufe von Registrierungssystem sind nicht dokumentiert, da sie selten verwendet werden, und wenn sie verwendet werden, sollen in der Regel unkonventionelle Ergebnisse in der Registrierung erzielt werden. Das Ändern der von diesen Aufrufen ausgeführten Vorgänge ist schwierig und fehleranfällig. Treiberentwickler werden davon abgeraten, die folgenden Registrierungssystemaufrufe zu ändern:

  • NtRestoreKey
  • NtSaveKey
  • NtSaveKeyEx
  • NtLoadKeyEx
  • NtUnloadKey2
  • NtUnloadKeyEx
  • NtReplaceKey
  • NtRenameKey
  • NtSetInformationKey