Здравствуйте, okman, Вы писали:
O>Здравствуйте, sergey77666, Вы писали:
S>>Примерно такой код S>>... S>>И вот на этом самом месте, где RtlStringCchPrintfW, иногда происходит ерунда.
O>1. Спецификатор '%wZ' требует передачи указателя на UNICODE_STRING, а не сам UNICODE_STRING.
O>2. Вместо вытаскивания имени из FILE_OBJECT надежнее FltGetFileNameInformation.
1. А почему тогда у меня кругом без указателя, и в основном все работает?
На моем ноутбуке драйвер работал в течение минут 20. Edge тоже. Нигде так и не упало.
2. Хм, может и переделаю. Как я понял, она даст более "нормальный" путь, с буквой диска — это бы не помешало...
А нужны ли тогда будут многочисленные проверки, которые есть в начале этого кода? Проверка PFILE_OBJECT на NULL, проверка того, что вернет FltGetFileNameInformation (там структура, в ней много UNICODE_STRING, не надо ли проверять какие-то из них с помощью &str == NULL (или с помощью str.Length==0?))
3. Еще бы точно определить, файл или папка. Все-таки моя проверка FILE_DIRECTORY_FILE почему-то иногда лажает. Вроде бы не страшно, поскольку я потом еще расширение проверяю, и у папок нету шанса попасть в лог, если не оканчивается .sys/.dll/.exe/.bat и т.д., а это очень низкий шанс, тем более в сочетании с "лажей". Но...