如何解决写入USB磁盘扇区会导致权限错误5
我的应用程序需要以下代码才能写入外部USB驱动器的磁盘扇区。它可以在大多数Win10 PC上运行,但由于几台PC上的权限被拒绝而返回错误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,NULL,OPEN_EXISTING,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;
}
解决方法
我找到了意料之外的答案。我认为这必须与文件句柄的打开方式有关。相反,在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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。