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 此函数的输入值无效。 例如, PhysicalDeviceObjectDeviceDirectoryHandle 为 NULL; 标志 不为 0; Reserved 不为 NULL。

注解

如果在启动所需的磁盘和卷之前调用 IoGetDeviceDirectory ,则函数不会打开句柄并返回错误。

驱动程序通常使用 ZwOpenFileZwCreateFile 来访问/创建文件。 这些函数的参数之一是 OBJECT_ATTRIBUTES 结构,其中包含对象名称和根目录。 如果根目录为 NULL,则对象名称必须是完全限定的路径。 但是,如果为根目录提供句柄,则对象名称必须相对于对象 (,对于句柄表示的文件、目录) 。

IoGetDeviceDirectory 调用成功后,在传递给 ZwOpenFile 和 ZwCreateFile的OBJECT_ATTRIBUTES中使用收到的 HANDLE 作为根目录。

当不再需要访问时,驱动程序必须调用 ZwClose 以关闭收到的句柄。

IoGetDeviceDirectory 的调用方必须在系统线程上下文中的 IRQL = PASSIVE_LEVEL 运行。

要求

要求
最低受支持的客户端 Windows 10 版本 1803
标头 wdm.h
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

另请参阅

ZwOpenFile

ZwCreateFile

ZwClose

_DEVICE_DIRECTORY_TYPE

OBJECT_ATTRIBUTES

InitializeObjectAttributes