Поделиться через


Функция 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

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

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

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

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

Замечания

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

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

После успешного вызова IoGetDeviceDirectory используйте полученный ДЕСКРиптор в качестве корневого каталога в 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