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