Windows CreateFile如何在文件共享读取时失败,在文件共享读取、文件共享写入、文件共享删除时成功?

Windows CreateFile如何在文件共享读取时失败,在文件共享读取、文件共享写入、文件共享删除时成功?,windows,winapi,file-io,process,Windows,Winapi,File Io,Process,你自己试试吧: 创建一个XLS文件,在Excel中打开它 打开sysinternals Process Monitor,观察在资源管理器中复制XLS文件时发生的情况(只需点击ctrl-c ctrl-v) 两个对:CreateProcess的调用连成一行。第一次调用请求读取权限,但访问被拒绝。第二个调用请求读加写加删除并通过 这正常吗?如果您使用文件共享\u读取打开文件,则表示您愿意共享此文件的访问权限,但仅用于读取 如果使用所有标志打开,您也愿意共享写入/删除的访问权限 文件共享读取比文件共享读

你自己试试吧:

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

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

两个对
:CreateProcess
的调用连成一行。第一次调用请求读取权限,但访问被拒绝。第二个调用请求读加写加删除并通过


这正常吗?

如果您使用
文件共享\u读取
打开文件,则表示您愿意共享此文件的访问权限,但仅用于读取

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

文件共享读取
文件共享读取|文件共享写入|文件共享删除


如果其他进程(excel)打开此文件进行写入(并且设置了共享标志),则访问该文件的唯一方法是接受共享以进行写入。

您必须使用兼容的共享模式。如果Excel以文件共享读取文件共享写入文件的方式打开文件,则后续打开文件的尝试必须至少使用这些相同的标志。特别是从以下方面:

无法请求与具有打开句柄的现有请求中指定的访问模式冲突的共享模式。CreateFile将失败,GetLastError函数将返回错误\u共享\u冲突