Puntatori a oggetti chiave non validi nelle notifiche del Registro di sistema

Per evitare errori irreversibili e possibile danneggiamento della memoria, un driver di filtro del Registro di sistema non deve provare ad accedere a un oggetto chiave usando un puntatore a oggetti non valido. In questo argomento vengono elencate le circostanze in cui il membro Object di una struttura di notifica di callback del Registro di sistema potrebbe contenere un valore non definito, non NULL .

In un driver di filtro del Registro di sistema il secondo parametro della routine RegistryCallback è un valore di enumerazione REG_NOTIFY_CLASS . Questo valore indica il tipo di struttura di notifica del callback del Registro di sistema a cui punta il terzo parametro della routine RegistryCallback . La struttura di notifica contiene informazioni sull'operazione del Registro di sistema. Il tipo di questa struttura varia in base all'operazione del Registro di sistema eseguita.

Molti dei tipi di struttura di notifica contengono un membro Object che punta a un oggetto chiave. In alcuni casi, il membro Object può contenere un valore non NULL, ma non è un puntatore a un oggetto chiave valido.

Valore dell'oggetto chiave non definito

Se il secondo parametro in una chiamata alla routine RegistryCallback di un driver di filtro del Registro di sistema è un valore di enumerazione REG_NOTIFY_CLASS di RegNtPostCreateKeyEx o RegNtPostOpenKeyEx, il terzo parametro è un puntatore a una struttura REG_POST_OPERATION_INFORMATION. Il membro Object di questa struttura è valido solo se il membro Status della struttura è impostato su STATUS_SUCCESS. Qualsiasi altro valore Status , incluso un codice di stato diverso da zero per cui la macro NT_SUCCESS restituisce TRUE, indica che il valore del membro Object non è definito.

Valore dell'oggetto chiave non è in uno stato valido

Se il secondo parametro in un callback del Registro di sistema è uno dei seguenti valori di enumerazione REG_NOTIFY_CLASS , il membro Object della struttura di notifica del callback del Registro di sistema punta a un oggetto chiave che viene distrutto e il cui numero di riferimenti è zero:

Poiché il membro Object punta a un oggetto chiave che non è in uno stato valido, il driver di filtro del Registro di sistema non deve passare il valore del puntatore oggetto come parametro a una routine di supporto driver di Windows , ad esempio ObReferenceObjectByPointer.

Tuttavia, durante una chiamata RegistryCallback per gestire una notifica RegNtPreKeyHandleClose o RegNtPostKeyHandleClose , un driver di filtro del Registro di sistema può chiamare una routine di configuration manager (ad esempio CmGetBoundTransaction) che accetta un oggetto del Registro di sistema come parametro.