代码之家  ›  专栏  ›  技术社区  ›  phagio

为什么我无法使用CreateFile Win32 API打开文件RW,但可以使用std::remove删除它?

  •  0
  • phagio  · 技术社区  · 8 年前

    我的C++应用程序在Windows 10的用户界面下运行 SYSTEM . 我试着打开一个 只读 具有Win32 api的文件使用访问权限创建文件 GENERIC_READ | GENERIC_WRITE ,获得 INVALID_HANDLER_VALUE 从函数调用。

    然而,同一个程序能够使用对的简单调用来删除所述文件 std::remove() .

    我的猜测是,C标准库中的函数不检查用户访问权限,允许您从程序的任何执行级别自由访问FS,但我并不是百分之百确信这一点,也无法在网上找到证据。

    有谁能解开这个小谜团?

    1 回复  |  直到 8 年前
        1
  •  4
  •   MSalters    8 年前

    Windows具有特定的 DELETE 权限(与FAT文件系统无关,但在NTFS上本机实现)。这些独立于 WRITE 权限。权限可能存在于文件本身或从父级(即目录)继承。

    在Unix和Linux上,情况略有不同;文件删除是通过对父目录的写入权限在那里处理的。