能否修改CreateFileW的dwShareMode:从FILE_SHARE_WRITE改为FILE_SHARE_READ?
关于修改CreateFileW共享模式的问题
不行,无法在调用CreateFileW打开文件后修改已有的共享模式。共享模式是文件句柄创建时就确定的属性,一旦打开就无法更改——Windows内核不会提供修改共享权限的API,因为这会打破文件句柄之间的共享约定,引发竞态条件。
你提到的内存映射文件提升权限,其实是映射时可以指定比原句柄更高的访问权限(只要原句柄的权限足够),但这和共享模式是两码事:
- 访问权限控制的是当前句柄能对文件做什么(读/写/执行)
- 共享模式控制的是其他进程打开文件时能使用什么权限
如果你的需求是阻止其他进程写入文件,可以换个思路:
- 直接以
FILE_SHARE_READ模式打开文件(完全不允许共享写入),这样其他进程就无法以可写方式打开它 - 如果必须先允许写入再锁定,只能先关闭原句柄,再以
FILE_SHARE_READ重新打开——但这中间存在间隙,可能被其他进程抢占打开 - 或者使用文件锁(比如
LockFileEx)锁定整个文件范围,这样其他进程的写入操作会被阻塞,但这只是锁定内容,不是修改共享模式
内容的提问来源于stack exchange,提问作者Okoba
相关产品推荐
相关产品推荐

