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