gpt4 book ai didi

c++ - Windows CreateFile - 文件打开时的动态共享模式?

转载 作者:行者123 更新时间:2023-11-27 22:49:15 24 4
gpt4 key购买 nike

我的应用程序处理高度敏感的文件。通常 - 此文件不与其他人共享,只能由我的应用程序访问。因此打开如下:

DWORD   dwShareMode = 0; // Exclusive no share
hFile = CreateFile(
pszSrc, // file to open
GENERIC_READ | GENERIC_WRITE, // open for reading
dwShareMode, // No share!!
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // normal file
NULL); // no attr. template

但是 - 在某些情况下,我的应用程序应该允许其他人读取此文件的某些部分。这应该在没有任何其他共享机制的情况下执行:没有锁,没有互斥锁,没有那种东西。除此之外——我的应用程序必须始终保持此文件打开。在此 APP 的关键任务条款下,不适用关闭/重新打开。

我的问题是:有没有办法在打开时动态更改与句柄关联的文件的共享模式?实际上 - 可以打开一个文件进行独占共享,然后将其更改为 - 比如说 - FILE_SHARE_READ | FILE_SHARE_WRITE - 来回?

谢谢

E.

最佳答案

您只需使用 FILE_SHARE_READ 打开文件并使用访问控制列表来防止未经授权的用户进程读取文件。

要协调访问文件的进程之间的访问,您应该使用 API 的 LockFile/UnlockFile 系列。

使用 LockFile,您可以锁定文件,这样,即使另一个进程可以打开它,具有读取权限,他们也无法读取它,直到您使用 UnlockFile 解锁它。

请注意,您可以锁定超出分配文件大小的区域。所以要锁定整个文件:

LockFile(hFile, 0x0, 0x0, 0xffffffff, 0xffffffff);

// To unlock it:
UnlocFile(hFile, 0x0, 0x0, 0xffffffff, 0xffffffff);

您应该注意,打开文件进行独占访问或锁定文件区域都不是安全机制。特别是它们不会阻止管理用户使用备份 API 读取文件。

关于c++ - Windows CreateFile - 文件打开时的动态共享模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39268051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com