В общем, нужны советы. Ситуация такая: есть драйвер-минифильтр он следит за файловой активностью некоторых процессов, есть прога которая работает с его настройками (через устройство которое создаёт драйвер). Сейчас драйвер принимает все строки (имена процессов и имена файлов) в обычном DOS-формате, конвертит их в нормальные Native-имена и инициализирует для каждой строки UNICODE_STRING. потом при фильтрации работает с готовыми UNICODE_STRING. Вопросы: 1. Алгоритм конвертирования из DOS в Native понятен, но как конвертнуть из Native в DOS? (Программа отправит драйверу строки типа "C:\...", а получит уже "\Device\.....") 2. Правильно ли сравнивает функция RtlCompareUnicodeString русские строки если указан CaseInSensitive=TRUE
Кратко. Перечислить буквы. Сравнить имена целевых девайсов. Взять букву, если совпало, и приклеить остаток пути. Ну и не лишним будет вот это почитать, для повышения образованности, так сказать. Как-то не проверял, но думаю, да - Unicode же. Впрочем, лучше перепроверить, конечно, это не сложно.
доступна ли функция FilterGetDosName в ядре? я думаю нет, но в моём случае как вариант подойдёт, конвертить имена после получения их от драйвера
Да, верно, всё время забываю, что в минифильтрах всё несколько проще. Интересно только, а как оно с сетевыми Native-именами работает, корректно ли?
короче решил, зачем возлагать на драйвер лишний функционал? Вся работа по конвертированию строк будет возложена на user-mode приложение, драйвер будет принимать только native-имена (будет проверять только их валидность) и выдавать приложению тоже native-имена. Приложение будет конвертировать из DOS в native через QueryDosDevice, а из native в DOS через FilterGetDosName. и ещё вопрос: вообще какие могут быть косяки с сетевыми именами? 1. с именами сетевых дисков 2. с именами типа \\comp\papka\file или \\192.168.10.212\papka\file