如何使用FILE_SHARE_READ使CreateFile失败并使用FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE成功?

Ben*_*oit 6 windows file-io winapi process

亲自尝试一下:

创建一个XLS文件,在Excel中打开它.

打开sysinternals Process Monitor,观察在资源管理器中复制XLS文件时发生的情况(只需点击ctrl-c ctrl-v).

::CreateProcess连续两次打电话.第一次调用请求读取权限,并拒绝访问.第二次调用要求读取加写入加删除和传递.

这是正常的吗?

Eri*_*rik 11

如果您打开一个文件,并且FILE_SHARE_READ说您愿意共享对此文件的访问权限,但仅限于读取.

如果您打开所有标志,您也愿意共享写入/删除访问权限.

FILE_SHARE_READ 比...更具限制性 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE

如果某个其他进程(excel)已打开此文件(例如write)(并且它已设置了共享标志),则可以访问它的唯一方法是接受共享以进行写入.