Чтение файла в режиме ядра

#visual-c #driver #device-driver #wdk #nt-native-api

#visual-c #драйвер #устройство-драйвер #wdk #nt-native-api

Вопрос:

Я создаю драйвер и хочу прочитать некоторые файлы. Есть ли какой-либо способ использовать «ZwReadFile ()» или аналогичную функцию для чтения содержимого файлов построчно, чтобы я мог обрабатывать их в цикле.

В документации в MSDN указано, что:- ZwReadFile начинает чтение из заданного byteOffset или текущей позиции файла в заданный буфер. Это завершает операцию чтения при одном из следующих условий:

  1. Буфер заполнен, поскольку было прочитано количество байтов, указанное параметром Length. Следовательно, больше никаких данных нельзя поместить в буфер без переполнения.
  2. Во время операции чтения достигается конец файла, поэтому в файле больше нет данных для переноса в буфер.

Спасибо.

Ответ №1:

Нет, этого не происходит. Вам придется создать оболочку, чтобы достичь того, чего вы хотите.

Однако, учитывая, что код режима ядра потенциально может привести к сбою системы, а не процесса, в котором он выполняется, вы должны убедиться, что проблемы, подобные тем, которые известны из пользовательского режима с очень длинными строками и т.д., Не вызовут проблем.

Если объем данных находится (и останется) ниже порогового значения, которое могут содержать значения реестра, вам следует использовать это вместо. В частности, REG_MULTI_SZ который обладает свойствами, которые вы ищете («построчное» хранение данных).

Ответ №2:

В этой ситуации, если производительность не является критической (например, в режиме реального времени), я бы передал фильтрацию службе или приложению пользовательского режима. Отправьте имя файла приложению для обработки. Приложение в пользовательском режиме проще тестировать и отлаживать. Это не приведет к синему экрану или зависанию вашего окна.