Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Подпрограмма 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;
}