【问题标题】:Win32 files locked for reading: how to find out who's locking themWin32 文件被锁定以供阅读:如何找出谁在锁定它们
【发布时间】:2023-03-19 04:40:01
【问题描述】:

在 C++ 中(特别是在 Visual C++ 中),有时您无法打开文件,因为另一个可执行文件已打开该文件并且未共享该文件以供读取。如果我尝试打开这样的文件,我如何以编程方式找出谁在锁定该文件?

【问题讨论】:

    标签: c++ visual-c++ winapi file-io


    【解决方案1】:

    在 Windows 2000 和更高版本中,如果不使用内核模式驱动程序,您将无法执行此操作。 Process Explorer 和其他类似工具会自动加载驱动程序来完成此操作。这是因为文件句柄位于内核空间中,用户模式应用程序(EXE 文件)无法访问。

    如果您真的对此感兴趣,请查看this project

    【讨论】:

    • 通过查看System进程的DLL可以看到Process Explorer正在加载驱动程序;你会看到一个类似PROCEXP113.SYS的驱动加载
    【解决方案2】:

    MSDN 认可的方式是IFileIsInUse::GetAppName()。不过需要 Vista。

    【讨论】:

    • 这似乎需要打开文件的程序的配合,这和要求的不一样。
    • 这是信息最丰富的方式,所以你应该先尝试一下。
    • 当然,尝试它并没有什么坏处,但它起作用的机会非常低,因此 OP 很可能需要一个替代方案。
    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    相关资源
    最近更新 更多