【发布时间】:2020-05-17 01:21:44
【问题描述】:
我正在编写一个使用 API 的 Windows 内核模式驱动程序
PsSetCreateProcessNotifyRoutineEx
在它的回调函数中,我需要获取进程的当前工作目录。 如何做到这一点?任何想法、线索都会非常有用。
提前致谢。
【问题讨论】:
-
通过
PsGetProcessPeb获取PEB地址,附加到进程,然后读取ProcessParameters->CurrentDirectory.DosPath -
有什么用?在驱动程序中使用它似乎是个坏主意。进程工作目录是为用户模式下的单线程代码设计的一种便利,即使是大多数 Windows 程序(包括 PowerShell)也会忽略它。在内核中,对象和 I/O 管理器不使用进程的工作目录。在 NT API 中,相对文件路径是相对于文件对象的句柄和前导“.”的。组件没有意义。
-
嗨@RbMm,我对驱动程序开发非常陌生,所以我的知识非常基础。从您之前的评论中,我发现 PsGetProcessPeb 是未记录的 Windows API,这可能会使驱动程序变得脆弱。那么有什么方法可以从驱动代码的标准 API 中获取 CWD 呢?
-
如果你害怕使用“undocumenred” api - 不要接受这样的任务
-
@Hemant:你能澄清一下进程的“当前工作目录”是什么意思吗?该进程可能具有许多目录的打开句柄。您绝对可以掌握所有这些。可以告诉我们您要解决什么更大的问题?
标签: windows winapi kernel driver wdm