c++ - _SH_SECURE 和 _SH_DENYWR 有什么区别

标签 c++ c windows winapi file-io

_SH_DENYWR 拒绝以写权限打开文件的任何其他尝试(共享违规) _SH_SECURE 设置安全模式(共享读,独占写访问)

_SH_SECURE 似乎较新,因为文档似乎掩盖了它或忽略了它,具体取决于您查看的位置。我在网上几乎找不到任何信息。

它们有什么不同?

最佳答案

_SH_SECURE 的行为取决于 mode 中请求的访问权限_fsopen() 的参数/_wfsopen() .如果请求 读取权限,则_SH_SECURE映射到 FILE_SHARE_READ .否则,它映射到 0 (独家访问)。

对比度 _SH_DENYWR总是映射到FILE_SHARE_READ .

CRT源码的相关部分(Visual Studio 2010中的open.c的第269-301行)如下:

/*
 * decode sharing flags
 */
switch ( shflag ) {

    case _SH_DENYRW:        /* exclusive access */
        fileshare = 0L;
        break;

    case _SH_DENYWR:        /* share read access */
        fileshare = FILE_SHARE_READ;
        break;

    case _SH_DENYRD:        /* share write access */
        fileshare = FILE_SHARE_WRITE;
        break;

    case _SH_DENYNO:        /* share read and write access */
        fileshare = FILE_SHARE_READ | FILE_SHARE_WRITE;
        break;

    case _SH_SECURE:       /* share read access only if read-only */
        if (fileaccess == GENERIC_READ)
            fileshare = FILE_SHARE_READ;
        else
            fileshare = 0L;
        break;

    default:                /* error, bad shflag */
        _doserrno = 0L; /* not an OS error */
        *pfh = -1;
        _VALIDATE_RETURN_ERRCODE(( "Invalid sharing flag" , 0 ), EINVAL);
}

关于c++ - _SH_SECURE 和 _SH_DENYWR 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9738960/

相关文章:

c++ - 析构函数末尾的段错误

c++ - 从 'float' 到 'LONG' 的转换需要缩小转换

c - 正/负号位于前导零和数字之间。如何让标志移到开头?

c - 未定义文件指针错误

python - 安装anaconda后无法导入排列

wpf - Web 性能达不到标准……新的 "Microsoft Way"是什么?

c++ - 用户定义类型作为 C++ Armadillo 库中矩阵的标量

C++异常设计

c - 使用表查找的 Alpha 混合没有预期的那么快

.net - 键盘钩子(Hook)改变键的行为