Программирование драйверов Windows


Функции для работы с файлами - часть 3


Этот префикс является обязательным для файлов на диске.

Таблица 7.40. Прототип вызова ZwWriteFile

NTSTATUS ZwWriteFile IRQL == PASSIVE_LEVEL
Параметры Производит модификацию объекта (файла), указанного открытым дескриптором
IN HANDLE FileHandle Дескриптор открытого для модификации файлового объекта
IN HANDLE Event OPTIONAL Драйверы устройств и драйверы средних слоев должны установить этот параметр равным NULL
IN PIO_APC_ROUTINE

pApcRoutine OPTIONAL

Драйверы устройств и драйверы средних слоев должны установить этот параметр равным NULL
IN PVOID ApcContext OPTIONAL Драйверы устройств и драйверы средних слоев должны установить этот параметр равным NULL
OUT PIO_STATUS_BLOCK pIoStatusBlock

В поле pIoStatusBlock-&#62Information по завершении вызова находится число реально записанных байт

IN PVOID Buffer Буфер с данными для записи
IN ULONG Length Размер записываемой порции данных
IN PLARGE_INTEGER pByteOffset OPTIONAL Указатель на переменную, где содержится смещение в файле (от начала), по которому следует производить запись данных
IN PULONG Key OPTIONAL Драйверы устройств и драйверы средних слоев должны установить этот параметр равным NULL
Возвращаемое значение STATUS_SUCCESS или код ошибки

При помощи ZwCreateFile можно получать и доступ к драйверам, как это делается из вызова CreateFile пользовательского режима. Таким образом, в частности, предлагается получать доступ к драйверу отладочной печати DebugPrint. Разумеется, вид имени для использования будет несколько другим. Для драйвера DebugPrint это будет имя L"\\Device\\PHDDebugPrint". По данному имени через ZwCreateFile можно получить доступ к драйверу из другого драйвера, несмотря на то, что символьная ссылка этим драйвером не создается. Аналогично, к нашему драйверу Example можно получить доступ из другого драйвера по имени L"\\Device\\Example", но ничего не получится, если пытаться использовать имя L"\\\\.\\Example", как в вызове CreateFile.




Начало  Назад  Вперед