Hantera meddelanden

Rutinen RegistryCallback tar emot en pekare till en REG_XXX-_KEY_INFORMATION struktur som innehåller information om registeråtgärden som inträffar.

RegistryCallback- rutin kan övervaka, blockera eller ändra en registeråtgärd.

Övervaka registeranrop

Om en registerfiltreringsdrivrutin övervakar registeråtgärder kan dess RegistryCallback- rutin uppdatera räknare eller utföra andra bokföringsåtgärder och sedan returnera STATUS_SUCCESS. När en RegistryCallback- rutin returnerar STATUS_SUCCESS fortsätter konfigurationshanteraren att utföra registeråtgärden.

Övervakning av registeranrop stöds i Windows XP och senare versioner av Windows.

Blockera registeranrop

En registerfiltreringsdrivrutin kan blockera registeråtgärder om dess RegistryCallback--rutin returnerar ett statusvärde för vilket NT_SUCCESS(status) är lika med FALSE- (d.ex. ett NTSTATUS-värde som inte lyckades). När konfigurationshanteraren får ett ej framgångsrikt returvärde återgår den omedelbart till den anropande tråden med det av drivrutinen specificerade statusvärdet. Därför kan en registerfiltreringsdrivrutin använda föraviseringar för att förhindra att registeråtgärder bearbetas.

Om en RegistryCallback--rutin returnerar ett statusvärde som NT_SUCCESS(status) är lika med FALSE- för ett förhandsmeddelande sker inte åtgärdens återanrop efter meddelandet.

Blockering av registeranrop stöds i Windows XP och senare versioner av Windows. För Windows Vista och senare kan drivrutinen ändra de värden som registeråtgärden returnerar till den anropande tråden. Dessa värden finns i REG_XXX-_KEY_INFORMATION-strukturer för Windows Vista och senare.

Ändring av registeranrop

En registerfiltreringsdrivrutin kan ändra en registeråtgärds utdataparametrar eller returnera värde. Dessutom kan drivrutinen helt bearbeta en registeråtgärd i stället för att tillåta att registret hanterar åtgärden.

När en registerfiltreringsdrivrutins RegistryCallback- rutin får ett eftermeddelande kan den:

  • Ändra de utdataparametrar som dess REG_XXX-_KEY_INFORMATION struktur innehåller och returnera sedan STATUS_SUCCESS. Konfigurationshanteraren returnerar de ändrade utdataparametrarna till den anropande tråden.

    Du kan ändra utdataparametrar i Windows Vista och senare.

  • Ändra registeråtgärdens returvärde genom att ange ett statusvärde för medlemmen ReturnStatus av strukturen REG_POST_OPERATION_INFORMATION och sedan returnera STATUS_CALLBACK_BYPASS. Konfigurationshanteraren returnerar det angivna returvärdet till den anropande tråden.

    Obs Om drivrutinen ändrar en statuskod från lyckad till misslyckad, kan den behöva frigöra objekt som konfigurationshanteraren allokerade. Om drivrutinen ändrar en statuskod från fel till framgång kan den också behöva ange lämpliga utdataparametrar.

Ändring av returvärden stöds i Windows Vista och senare.

När en registerfiltreringsdrivrutins RegistryCallback- rutin tar emot ett förhandsmeddelande kan rutinen hantera själva registeråtgärden och sedan returnera STATUS_CALLBACK_BYPASS. När registret tar emot STATUS_CALLBACK_BYPASS från drivrutinen returneras bara STATUS_SUCCESS till den anropande tråden och bearbetar inte åtgärden. Drivrutinen förhindrar registeroperationen och måste hantera den helt, och drivrutinen måste vara noga med att returnera giltiga utdatavärden i REG_XXX_KEY_INFORMATION-strukturen.

Drivrutiner kan föregripa registeråtgärder i Windows Vista och senare.

Om en RegistryCallback- rutin returnerar STATUS_CALLBACK_BYPASS för ett förhandsmeddelande sker inte åtgärdens återanrop efter meddelandet.

Observera Flera registersystemanrop dokumenteras inte eftersom de sällan används, och när de används är det vanligtvis för att uppnå något okonventionellt resultat i registret. Det är svårt och felbenäget att ändra de åtgärder som utförs av dessa anrop. Drivrutinsutvecklare avråder från att försöka ändra följande registersystemanrop:

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