c - 等待文件解锁 - Windows

标签 c windows winapi

我正在为大学编写一个 TFTP 服务器程序,它需要独占访问它打开以供阅读的文件。因此,可以配置为如果一个文件被另一个进程锁定,它会等待文件解锁。

在 Win32 上有什么方法可以等待文件解锁而不先为它创建句柄吗?

我问的原因是,如果另一个进程调用 CreateFile()使用与我的进程使用的不兼容的 dwShareMode,我什至无法使用 LockFileEx() 获得用于等待锁定的文件句柄.

提前感谢您的帮助!

最佳答案

如果您查看 Stack Overflow 问题 What Win32 API can be used to find the process that has a given file open?SYSTEM_HANDLE_INFORMATION structure ,您会找到指向可用于枚举进程和每个正在运行的进程的所有打开句柄的代码的链接。此信息可用于获取打开文件的进程的 HANDLE 以及该文件的 HANDLE。然后您将使用 DuplicateHandle()创建文件 HANDLE 的副本,但在 TFTP 进程的句柄表中。复制的 HANDLE 可以被 TFTP 进程使用 LockFileEx() .

此解决方案依赖于一个内部函数 NtQuerySystemInformation(),以及一个未记录的系统信息类值,可用于枚举打开的句柄。请注意,NtQuerySystemInformation() 的此功能“可能会在未来的 Windows 版本中更改或不可用”。您可能想使用 SEH防止发生访问冲突的处理程序。

关于c - 等待文件解锁 - Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621248/

相关文章:

windows - 在 Windows 上关闭 echo 来启动 cmd.exe

c++ - ExtractIcon和ExtractAssociatedIcon之间的区别?需要提取特定大小的图标

javascript - 将基于 JIT 的 lang 编译为 Webassembly

c - 了解 GStreamer 管道

c++ - 将 WinMain 入口点嵌入到类中?

windows - 在powershell中创建右键命令的教程

c - 当我尚未验证 RECT 时,为什么 Drawtext 仍在绘制文本?

c++ - 如何使用 Win32 TextOut 绘制波浪下划线

c - 如何在ANSI C(C89)中使用printf打印size_t和ptrdiff_t

c - C 中的逻辑表达式