Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подпрограмма DriverEntry должна сохранить копию аргумента, а не указатель, так как диспетчер ввода-вывода освобождает буфер.
Комментарии
Подпрограмма DriverEntry драйвера сохраняет копию указателя на буфер, а не копию буфера. Так как буфер освобождается при возврате DriverEntry подпрограммы, указатель на буфер скоро станет недопустимым.
Имя анализа кода: NOT_COPYING_NAME
Пример
Следующий код создает это предупреждение.
g_RP имеет тип PUNICODE_STRING, который является указателем на тип UNICODE_STRINGданных .
PUNICODE_STRING RegistryPathСохраняя , мы сохраняем только указатель на объект , UNICODE_STRING в котором существуют данные. Эта функция будет потеряна DriverEntryв конце .
PUNICODE_STRING g_RP;
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
g_RP = RegistryPath;
return 0;
}
Следующий код устраняет эту проблему.
g_RP Теперь является , с собственным буфером UNICODE_STRING. При копировании данные сохраняются после возврата 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;
}