You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DokanNet 2.1.0挂载驱动器时遇System.UnauthorizedAccessException权限问题

解决DokanNet 2.1.0 + .NET 8虚拟文件系统创建文件/文件夹权限拒绝问题

以下是针对你遇到的System.UnauthorizedAccessException问题的具体解决步骤:

  • 检查挂载配置的权限选项
    Dokan的挂载权限完全由DokanOptions控制,默认配置可能是只读模式。必须显式添加写入、创建相关的权限标志:

    var mountOptions = new DokanOptions
    {
        MountPoint = "Z:", // 选一个未被占用的驱动器号
        Options = DokanOptions.Write 
                 | DokanOptions.Delete 
                 | DokanOptions.CreateFiles 
                 | DokanOptions.CreateDirectories 
                 | DokanOptions.MountManager, // 让系统正确识别虚拟挂载点
        ThreadCount = 4,
        Version = DokanVersion.Version18 // 匹配DokanNet 2.1.0对应的驱动版本
    };
    
  • 完整实现IDokanOperations回调方法
    虚拟文件系统的所有操作(创建、读写、删除)都依赖你实现的IDokanOperations接口方法,遗漏或错误实现会导致权限拒绝:

    1. 必须正确实现CreateDirectory和CreateFile方法,返回DokanError.Success:
      public DokanError CreateDirectory(string dirPath, FileAccess access, IDokanFileInfo info)
      {
          // 在这里添加你的目录创建逻辑(比如内存字典、数据库存储)
          info.IsDirectory = true;
          return DokanError.Success;
      }
      
      public DokanError CreateFile(string filePath, FileAccess access, FileShare share, FileMode mode, FileOptions options, FileAttributes attributes, IDokanFileInfo info)
      {
          // 在这里添加你的文件创建逻辑
          info.Context = new YourFileContext(); // 关联自定义文件上下文
          return DokanError.Success;
      }
      
    2. 禁用不必要的用户模拟:如果你的后端存储不需要模拟当前用户,设置info.Impersonate = false,避免权限模拟冲突。
    3. 确保GetFileInformation、SetFileAttributes方法正确返回文件/目录的元数据,否则系统会判定权限不足。
  • 修复Dokan内核驱动权限
    Dokan依赖内核级驱动,即使管理员运行VS,驱动未正确安装也会导致权限问题:

    1. 下载与DokanNet 2.1.0匹配的Dokan驱动安装包(版本2.1.0)。
    2. 右键以管理员身份运行安装程序,选择「Repair」修复驱动安装。
    3. 重启电脑后重新测试挂载。
  • 测试时跳过系统权限检查(仅用于排查)
    临时添加DokanOptions.NoSecurity标志,跳过Windows ACL权限验证,排查是否是权限回调逻辑的问题:

    Options = DokanOptions.Write | DokanOptions.NoSecurity | DokanOptions.CreateDirectories | ...
    

    如果此时能正常创建文件/文件夹,说明你需要重新实现GetFileSecurity和SetFileSecurity方法,正确处理虚拟文件系统的权限控制。

  • 确认挂载驱动器号未被占用
    使用diskpart命令检查驱动器号占用情况:

    diskpart
    list volume
    

    选择一个未被物理驱动器或其他虚拟盘占用的驱动器号(如Z:)重新挂载。

内容的提问来源于stack exchange,提问作者Chizaram Obiakor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:13:16