Avviso C28131
La routine DriverEntry deve salvare una copia dell'argomento, non il puntatore, perché Gestione I/O libera il buffer
Commenti
La routine del DriverEntry
driver salva una copia del puntatore nel buffer anziché salvare una copia del buffer. Poiché il buffer viene liberato quando la DriverEntry
routine restituisce, il puntatore al buffer sarà presto non valido.
Nome analisi del codice: NOT_COPYING_NAME
Esempio
Il codice seguente genera questo avviso. g_RP
è di tipo PUNICODE_STRING
, che è un puntatore al tipo di UNICODE_STRING
dati . Salvando , si salva PUNICODE_STRING RegistryPath
solo il puntatore alla UNICODE_STRING
posizione in cui esistono i dati. Questa operazione verrà persa alla fine di DriverEntry
.
PUNICODE_STRING g_RP;
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
g_RP = RegistryPath;
return 0;
}
Il codice seguente risolve questo problema. g_RP
è ora un UNICODE_STRING
oggetto , con il proprio buffer. Quando i dati vengono copiati, i dati verranno mantenuti oltre la restituzione di DriverEntry
UNICODE_STRING g_RP;
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
g_RP = CloneRegistryPath(RegistryPath); // CloneRegistryPath is an example helper function that copies over the data.
return 0;
}