windows - CreateFile 如何以 FILE_SHARE_READ 失败并以 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE 成功?

标签 windows winapi file-io process

自己试试:

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

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

连续两次调用 ::CreateProcess。第一次调用要求读取权限,并被拒绝访问。第二次调用要求读加写加删除并通过。

这正常吗?

最佳答案

如果您使用 FILE_SHARE_READ 打开一个文件,您表示您愿意共享对该文件的访问权限,但仅限于读取。

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

FILE_SHARE_READFILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE

更严格

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

关于windows - CreateFile 如何以 FILE_SHARE_READ 失败并以 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE 成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5339882/

相关文章:

c# - 垂直滚动 gridview XAML windows store app

c++ - 使用多线程获得连续的蜂鸣声

c++ - EnumDisplayDevices vs WMI Win32_DesktopMonitor,如何检测事件监视器?

java - 准确总结文件大小以在 JProgressBar 中使用

linux - 使用多个 Linux 隧道运行 Windows 脚本

c++ - 我如何为我的应用程序创建自己的实例 excel 并使用它?

c++ - WinAPI SetWindowLongPtr - 改变 windowProc

c - 为什么在按下控制键的同时滚动鼠标滚轮时应用程序无故终止?

c - 将字符串写入 .mc 文件

c++ - 文件输入和编译错误