【发布时间】:2023-03-19 04:40:01
【问题描述】:
在 C++ 中(特别是在 Visual C++ 中),有时您无法打开文件,因为另一个可执行文件已打开该文件并且未共享该文件以供读取。如果我尝试打开这样的文件,我如何以编程方式找出谁在锁定该文件?
【问题讨论】:
标签: c++ visual-c++ winapi file-io
在 C++ 中(特别是在 Visual C++ 中),有时您无法打开文件,因为另一个可执行文件已打开该文件并且未共享该文件以供读取。如果我尝试打开这样的文件,我如何以编程方式找出谁在锁定该文件?
【问题讨论】:
标签: c++ visual-c++ winapi file-io
在 Windows 2000 和更高版本中,如果不使用内核模式驱动程序,您将无法执行此操作。 Process Explorer 和其他类似工具会自动加载驱动程序来完成此操作。这是因为文件句柄位于内核空间中,用户模式应用程序(EXE 文件)无法访问。
如果您真的对此感兴趣,请查看this project。
【讨论】:
System进程的DLL可以看到Process Explorer正在加载驱动程序;你会看到一个类似PROCEXP113.SYS的驱动加载
MSDN 认可的方式是IFileIsInUse::GetAppName()。不过需要 Vista。
【讨论】: