【问题标题】:CreateFileA fails with ERROR_ACCESS_DENIEDCreateFileA 失败并显示 ERROR_ACCESS_DENIED
【发布时间】:2012-03-04 23:04:32
【问题描述】:

我需要检索目录的句柄才能调用 ReadDirectoryChangesW。实际上,我需要的还不止这些,但让我们先放轻松。我已将问题范围缩小到:

m_directoryHandle = CreateFileA(
    "C:\\Users\\victor\\Documents\\Projets\\libxnotify\\unittests", // __in      LPCTSTR lpFileName,
    FILE_LIST_DIRECTORY,    // __in      DWORD dwDesiredAccess,
    0,                      // __in      DWORD dwShareMode,
    0,                      // __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    OPEN_EXISTING,          // __in      DWORD dwCreationDisposition,
    0,                      // __in      DWORD dwFlagsAndAttributes,
    0                       // __in_opt  HANDLE hTemplateFile
);

这将返回一个INVALID_HANDLE_VALUE,最后一个错误代码为ERROR_ACCESS_DENIED。不用说,我已经尝试了很多不同的参数,但没有一个起作用。我以 victor 身份运行我的程序,为了确保我确实拥有该 unittests 目录中的权限,我打开了一个命令 shell 并输入:

C:\Users\victor>echo bla >> "C:\Users\victor\Documents\Projets\libxnotify\unittests\test"

它成功了。

【问题讨论】:

  • 您是否必须在第一个参数中指定文件名(连同路径)? C:\\Users...unittests\\filename.txt
  • @pmg 嗯,我错误地陈述了我的问题。我真的需要对目录进行处理,以便能够在其上调用ReadDirectoryChangesW(并监视文件)..
  • 0 for dwShareMode?这是它可能失败的地方,因为您请求一种独占访问句柄......
  • @RomanR 我将尝试使用其他参数并让您知道。
  • Quoted from msdn: "要获取现有目录的句柄,请使用 FILE_FLAG_BACKUP_SEMANTICS 标志调用 CreateFile 函数。"跨度>

标签: c winapi


【解决方案1】:

ReadDirectoryChangesW 的文档有一条说明:

要获取目录句柄,请使用带有 FILE_FLAG_BACKUP_SEMANTICS 标志的 CreateFile 函数。

CreateFile 的文档也对此有更详细的说明:

目录

应用程序无法使用CreateFile 创建目录,因此对于此用例,只有 OPEN_EXISTING 值对 dwCreationDisposition 有效。要创建目录,应用程序必须调用CreateDirectoryCreateDirectoryEx

要使用CreateFile 打开目录,请将FILE_FLAG_BACKUP_SEMANTICS 标志指定为dwFlagsAndAttributes 的一部分。在没有 SE_BACKUP_NAMESE_RESTORE_NAME 权限的情况下使用此标志时,仍然适用适当的安全检查。

您错过了 dwFlagsAndAttributes 的重要 FILE_FLAG_BACKUP_SEMANTICS 标志。

【讨论】:

  • 你是绝对正确的。现在,如果目录是强制性的,他们为什么不自己放自己的标志……
  • @qdii:Windows API 总是很有趣。我也可能将FILE_SHARE_READ 用于dwShareMode 而不是0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 2011-07-23
相关资源
最近更新 更多