锁定文件但允许当前进程使用?

问题描述 投票:0回答:2

我希望能够在 Win32 中锁定文件,以便它只能由我当前的进程使用。实现这一目标的最明显方法似乎是通过

CreateFile
:

HANDLE file = ::CreateFile("c:\\foo.txt", 
                           GENERIC_READ | GENERIC_WRITE,
                           0,
                           NULL,
                           OPEN_EXISTING,
                           FILE_ATTRIBUTE_NORMAL,
                           NULL);

但是,一旦该调用成功,该文件显然也被我自己的进程锁定,即。一旦 MFC 框架尝试打开它,我就会收到“共享冲突”。

有没有一种方便的方法来阻止其他进程访问该文件,但仍然允许我的进程访问该文件?我不想替换所有加载/保存框架代码...我在传递给 CreateFile 的参数中做错了什么吗?

winapi mfc locking
2个回答
4
投票

来自创建和打开文件

应用程序还使用 CreateFile 来 指定是否要共享 文件用于读取、写入、或 两者都不。这就是所谓的共享 模式。未共享的打开文件 (dwShareMode 设置为零)不能 再次打开,或者通过 打开它的应用程序或通过 另一个应用程序,直到它的句柄 已经被关了。这也有参考 作为独占访问权。

另请参阅FILE_SHARE_* 位如何与所需的访问位交互?


1
投票

我不知道有什么简单的方法可以做到这一点。至于更复杂的方法,您可以:

  1. 设置一个特殊的用户名来访问该文件。
  2. 打开非共享文件。
  3. 编辑 ACL 以仅允许特殊用户名使用
  4. 关闭文件。
  5. 冒充该用户
  6. 打开文件,允许共享
  7. 关闭文件
  8. 重新设置 ACL 以允许其他用户访问

请注意,我并不是说我会建议这样做——它很丑陋,而且或多或少是对系统的滥用——但如果你确定需要这样做,那么这是一种可能有效的方法。

© www.soinside.com 2019 - 2024. All rights reserved.