Функция IoGetDriverDirectory (wdm.h)
Возвращает дескриптор каталога на диске, из которого драйвер может считывать и записывать файлы. Файлы в этом каталоге применяются к определенному объекту драйвера.
Синтаксис
NTSTATUS IoGetDriverDirectory(
[_In_] PDRIVER_OBJECT DriverObject,
[_In_] DRIVER_DIRECTORY_TYPE DirectoryType,
[_In_] ULONG Flags,
[_Out_] PHANDLE DriverDirectoryHandle
);
Параметры
[_In_] DriverObject
Указатель на объект драйвера (DRIVER_OBJECT структуру) вызывающего драйвера.
[_In_] DirectoryType
Значение типа _DRIVER_DIRECTORY_TYPE, указывающее тип запрошенного каталога.
[_In_] Flags
Должно быть равно 0.
[_Out_] DriverDirectoryHandle
Указатель на переменную, которая получает HANDLE для запрошенного каталога драйвера. Вызывающий объект не должен передавать значение NULL.
Возвращаемое значение
Возвращает соответствующее значение NTSTATUS. Возможные значения:
Код ошибки | Описание |
---|---|
STATUS_SUCCESS | Вызов успешно открыл дескриптор для запрошенного каталога драйвера. |
STATUS_INVALID_PARAMETER | Входное значение этой функции является недопустимым. Например, DriverObject или DriverDirectoryHandle имеет значение NULL; Флаги не равно 0. |
Комментарии
Если IoGetDriverDirectory вызывается до запуска необходимых дисков и томов, функция не открывает дескриптор и возвращает ошибку.
Драйверы обычно используют ZwOpenFile и ZwCreateFile для доступа к файлам и их создания. Одним из параметров для этих функций является структура OBJECT_ATTRIBUTES , содержащая имя объекта и корневой каталог. Если корневой каталог имеет значение NULL, то имя объекта должно быть полным путем. Однако если предоставить дескриптор для корневого каталога, имя объекта должно быть относительно объекта (в случае файлов — каталога), который представляет дескриптор.
После успешного вызова IoGetDriverDirectory используйте полученный HANDLE в качестве корневого каталога в OBJECT_ATTRIBUTES , который передается в ZwOpenFile и ZwCreateFile.
Драйвер должен вызвать ZwClose , чтобы закрыть полученный дескриптор, если доступ больше не требуется.
Вызывающие объект IoGetDriverDirectory должны выполняться в среде IRQL = PASSIVE_LEVEL в контексте системного потока.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 10 версии 1803 |
Верхняя часть | wdm.h |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |