【问题标题】:Writing USB Disk Sectors Results in Permission Error 5写入 USB 磁盘扇区导致权限错误 5
【发布时间】:2020-09-25 10:52:01
【问题描述】:

我的应用程序需要以下代码来写入外部 USB 驱动器的磁盘扇区。它适用于大多数 Win10 电脑,但它在几台电脑上返回错误 5,因为权限被拒绝。我为 Windows Defender 和 Malwarebytes 创建了排除项。事件查看器中没有与失败相关的任何内容。读取功能正常工作。

我尝试添加对 FSCTL_LOCK_VOLUME 和 FSCTL_DISMOUNT_VOLUME 的调用,但这无济于事。可能不需要,因为我在清理物理磁盘后访问它,而不是任何卷。

知道是什么原因造成的,或者如何解决?

如果有其他读写磁盘扇区的方法,我会很高兴。

BOOL Partitioner::BlockWrite(wchar_t* devIdentifier, unsigned __int64 lngStartbyte, DWORD bytesToRead, BYTE* buf)
{
    BOOL ret = FALSE;

    HANDLE devHan = CreateFile(devIdentifier, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (devHan != INVALID_HANDLE_VALUE)
    {
        // Seek to the starting block to write
        LARGE_INTEGER startByte;
        startByte.QuadPart  = lngStartbyte;
        SetFilePointer(devHan, startByte.LowPart, (long*)&startByte.HighPart, FILE_BEGIN);

        // Write the data (this is where error 5 is returned)
        DWORD bytesWritten = 0;
        ret = WriteFile(devHan, buf, bytesToRead, &bytesWritten, NULL);
        FlushFileBuffers(devHan);
        CloseHandle(devHan);
    }
    else
    {
        ret = GetLastError();
        wchar_t msg[PATH_BUFFER_SIZE] = {0};
        swprintf_s(msg, WCSIZE_FULL(msg), L"Error= %d, byte= %llu", ret, lngStartbyte);
        mLog->LogError(msg);
    }

    return ret;
}

【问题讨论】:

  • 我可以确认是CreateFile 还是WriteFile 导致ERROR_ACCESS_DENIED。如果在大部分PC上都能正常运行,有少数被拒绝,那我觉得你需要比较不同PC的权限差异,否则我们很难重现问题。
  • @朱松,WriteFile 失败。读取文件没问题。我不确定需要比较哪些权限。

标签: c++ winapi windows-10-desktop


【解决方案1】:

我在没有预料到的地方找到了答案。我认为这必须与文件句柄的打开方式有关。相反,在 Windows 10 的病毒威胁防护设置中关闭实时防护会导致错误 5s 消失。要在不禁用实时保护的情况下解决问题,您需要为每个已安装的 EXE 添加允许的应用排除项。

您可以通过编写 PowerShell 脚本在代码中执行此操作:

string script = "powershell -Command \"Add-MpPreference -ControlledFolderAccessAllowedApplications '" + GetAppPath() + "\\AppServer.exe" + "'";
Process.Start(new ProcessStartInfo() { FileName = "cmd.exe", Arguments = "/c " + script, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden }).WaitForExit();

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 2012-09-02
    • 2013-10-05
    • 2019-03-26
    • 2014-06-25
    • 2020-06-01
    • 2023-03-23
    • 2017-06-17
    • 2010-12-17
    相关资源
    最近更新 更多