#visual-c #driver #device-driver #wdk #nt-native-api
#visual-c #драйвер #устройство-драйвер #wdk #nt-native-api
Вопрос:
Я создаю драйвер и хочу прочитать некоторые файлы. Есть ли какой-либо способ использовать «ZwReadFile ()» или аналогичную функцию для чтения содержимого файлов построчно, чтобы я мог обрабатывать их в цикле.
В документации в MSDN указано, что:- ZwReadFile начинает чтение из заданного byteOffset или текущей позиции файла в заданный буфер. Это завершает операцию чтения при одном из следующих условий:
- Буфер заполнен, поскольку было прочитано количество байтов, указанное параметром Length. Следовательно, больше никаких данных нельзя поместить в буфер без переполнения.
- Во время операции чтения достигается конец файла, поэтому в файле больше нет данных для переноса в буфер.
Спасибо.
Ответ №1:
Нет, этого не происходит. Вам придется создать оболочку, чтобы достичь того, чего вы хотите.
Однако, учитывая, что код режима ядра потенциально может привести к сбою системы, а не процесса, в котором он выполняется, вы должны убедиться, что проблемы, подобные тем, которые известны из пользовательского режима с очень длинными строками и т.д., Не вызовут проблем.
Если объем данных находится (и останется) ниже порогового значения, которое могут содержать значения реестра, вам следует использовать это вместо. В частности, REG_MULTI_SZ
который обладает свойствами, которые вы ищете («построчное» хранение данных).
Ответ №2:
В этой ситуации, если производительность не является критической (например, в режиме реального времени), я бы передал фильтрацию службе или приложению пользовательского режима. Отправьте имя файла приложению для обработки. Приложение в пользовательском режиме проще тестировать и отлаживать. Это не приведет к синему экрану или зависанию вашего окна.