Функция 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
Указатель на переменную, которая получает ДЕСКРиптор запрошенного каталога драйверов. Вызывающий объект не должен передавать значение NULL.
Возвращаемое значение
Возвращает соответствующее значение NTSTATUS. Возможные значения:
Код ошибки | Описание |
---|---|
STATUS_SUCCESS | Вызов успешно открыл дескриптор в запрошенном каталоге драйверов. |
STATUS_INVALID_PARAMETER | Недопустимое входное значение для этой функции. Например, DriverObject или driverDirectoryHand le имеет значение NULL; Флаги не равно 0. |
Замечания
Если IoGetDriverDirectory вызывается до запуска необходимых дисков и томов, функция не открывает дескриптор и возвращает ошибку.
Драйверы обычно используют ZwOpenFile и ZwCreateFile для доступа и создания файлов. Одним из параметров этих функций является структура OBJECT_ATTRIBUTES, содержащая имя объекта и корневой каталог. Если корневой каталог имеет значение NULL, то имя объекта должно быть полным путем. Однако если предоставить дескриптор корневого каталога, то имя объекта должно быть относительно объекта (в случае файлов, каталога), который представляет дескриптор.
После успешного вызова IoGetDriverDirectory используйте полученный ДЕСКРиптор в качестве корневого каталога в OBJECT_ATTRIBUTES, который передается ZwOpenFile и ZwCreateFile.
Драйвер должен вызвать ZwClose, чтобы закрыть полученный дескриптор, если доступ больше не требуется.
Вызывающие IoGetDriverDirectory должны выполняться в IRQL = PASSIVE_LEVEL в контексте системного потока.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 10 версии 1803 |
заголовка | wdm.h |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |