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 调用成功后,使用收到的 HANDLE 作为传递给 ZwOpenFile 的 OBJECT_ATTRIBUTES 中的根目录,ZwCreateFile。
驱动程序必须调用 ZwClose 才能在不再需要访问时关闭收到的句柄。
IoGetDeviceDirectory 的调用方必须在系统线程的上下文中在 IRQL = PASSIVE_LEVEL运行。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 10 版本 1803 |
标头 | wdm.h |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |