Функция IoGetDeviceDirectory (wdm.h)

Возвращает дескриптор в каталог на диске, в котором драйверы могут хранить файлы. Файлы в этом каталоге применяются к определенному экземпляру устройства.

Синтаксис

NTSTATUS IoGetDeviceDirectory(
  [_In_]  PDEVICE_OBJECT        PhysicalDeviceObject,
  [_In_]  DEVICE_DIRECTORY_TYPE DirectoryType,
  [_In_]  ULONG                 Flags,
  [_In_]  PVOID                 Reserved,
  [_Out_] PHANDLE               DeviceDirectoryHandle
);

Параметры

[_In_] PhysicalDeviceObject

Указатель на объект физического устройства , запрашиваемый в стеке устройств конкретного экземпляра устройства. Не должно иметь значение NULL.

[_In_] DirectoryType

Значение типа _DEVICE_DIRECTORY_TYPE, указывающее тип запрошенного каталога.

[_In_] Flags

Должно быть равно 0.

[_In_] Reserved

Зарезервировано. Должен иметь значение NULL.

[_Out_] DeviceDirectoryHandle

Указатель на переменную, которая получает HANDLE в запрошенный каталог устройства. Вызывающий объект не должен передавать значение NULL.

Возвращаемое значение

Возвращает соответствующее значение NTSTATUS. Возможные значения:

Код ошибки Описание
STATUS_SUCCESS Вызов успешно открыл дескриптор запрошенного каталога устройства.
STATUS_INVALID_PARAMETER Недопустимое входное значение для этой функции. Например, PhysicalDeviceObject или DeviceDirectoryHandle имеет значение NULL; Флаги не равно 0; Зарезервированное значение не равно NULL.

Комментарии

Если IoGetDeviceDirectory вызывается до запуска необходимых дисков и томов, функция не открывает дескриптор и возвращает ошибку.

Драйверы обычно используют ZwOpenFile и ZwCreateFile для доступа к файлам и их создания. Одним из параметров этих функций является структура OBJECT_ATTRIBUTES , которая содержит имя объекта и корневой каталог. Если корневой каталог имеет значение NULL, имя объекта должно быть полным путем. Однако если предоставить дескриптор для корневого каталога, имя объекта должно быть относительно объекта (в случае файлов — каталога), который представляет дескриптор.

После успешного вызова IoGetDeviceDirectory используйте полученный HANDLE в качестве корневого каталога в OBJECT_ATTRIBUTES , который передается в ZwOpenFile и ZwCreateFile.

Драйвер должен вызвать ZwClose , чтобы закрыть полученный дескриптор, когда доступ больше не требуется.

Вызывающие объект IoGetDeviceDirectory должны выполняться в IRQL = PASSIVE_LEVEL в контексте системного потока.

Требования

Требование Значение
Минимальная версия клиента Windows 10 версии 1803
Верхняя часть wdm.h
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

См. также раздел

ZwOpenFile

ZwCreateFile

ZwClose

_DEVICE_DIRECTORY_TYPE

OBJECT_ATTRIBUTES

InitializeObjectAttributes