创建一个目录并通过发出一个IRP来获取句柄
当我们通过CreateFile创建文件时,文件被创建并且我们得到了句柄。
但 CreateDirectory 不返回目录的句柄。
我还想在创建目录时获得句柄。
我想通过仅发出一个 I/O 请求数据包来处理此问题。
因此,“使用 FILE_FLAG_BACKUP_SEMANTICS 创建目录,然后创建文件。”不会是一个答案。
它会向文件系统发出两个 Irp。
是否有可以在用户模式下使用的 Api(Win32 Api)?
When we create a file by CreateFile, the file created and we get the handle.
But CreateDirectory doesn't return directory's handle.
I'd like to also get the handle when I create a directory.
I want to handle this by issuing only one I/O request packet.
So, 'Do CreateDirectory, then CreateFile with FILE_FLAG_BACKUP_SEMANTICS.' won't be an answer.
It will issue two Irps to file system.
Is there an Api I can use in Usermode(Win32 Api)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
NT 可以做到这一点,但 Win32 不会公开它。为此,您需要使用 NT API。
NtCreateFile
,具体来说。它应遵循 ZwCreateFile。这是一个说明性示例(在 Web 表单中匆忙破解 - YMMV):
需要注意的一些事项...
NT 路径的约定与 Win32 路径略有不同...您可能必须清理该路径。< /p>
HANDLE
时,NT API 通常处理NULL
而不是INVALID_HANDLE_VALUE
。我没有在这里这样做,但是通过更改
InitializeObjectAttributes
调用,您可以做一些有趣的事情,例如相对于另一个目录句柄进行创建。当然,您可能还想更改我放在这里的所有标志。请查阅文档和/或网络以获得最佳结果。NT can do this, but Win32 doesn't expose it. You need to use NT APIs for this.
NtCreateFile
, specifically. It should follow the same parameters of ZwCreateFile.Here's an illustrative example (hacked up in a hurry inside a web form -- YMMV):
Some things to note...
NT paths have slightly different conventions than Win32 paths... You might have to sanitize the path.
When talking about
HANDLE
s, NT APIs generally deal withNULL
rather thanINVALID_HANDLE_VALUE
.I didn't do it here, but by changing the
InitializeObjectAttributes
call you can do interesting things, like do a create relative to another directory handle. Of course all the flags I've put in here you might also want to change. Consult documentation and/or the web for best results.