【问题标题】:filesystem:error cannot remove: Input/output error文件系统:错误无法删除:输入/输出错误
【发布时间】:2021-07-02 22:15:53
【问题描述】:

我正在尝试使用这种方式删除字体文件,

std::filesystem::remove(std::filesystem::path("C:\\Windows\\Fonts\\segmdl2.ttf"));

但这会失败并抛出异常,

filesystem:error cannot remove: Input/output error

例外没有帮助。删除此类文件的正确方法是什么?

更新,

我试图从 Powershell 中删除它,但它会引发以下错误,

del C:\Windows\Fonts\segmdl2.ttf
del : Cannot remove item C:\Windows\Fonts\segmdl2.ttf: Access to the path 'C:\Windows\Fonts\segmdl2.ttf' is denied.
At line:1 char:1
+ del C:\Windows\Fonts\segmdl2.ttf
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\Windows\Fonts\segmdl2.ttf:FileInfo) [Remove-Item], UnauthorizedAcc
   essException
    + FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand

我什至尝试直接从字体文件夹中删除它,但我收到一个错误,因为另一个应用程序已经在使用该字体,所以无法完成。

但我成功地从命令提示符中删除了它。

cmd 是如何做到这一点的?

我的应用需要达到相同的水平。

【问题讨论】:

  • 我相信UAC会阻止你在没有提升的情况下删除windows系统文件。
  • 即使是管理员也需要提升。
  • @drescherjm 我认为这完全是一个骗局
  • 您可以使用DeleteFile API 并使用GetLastError 并得到实际错误吗?我几乎可以肯定它将是 ERROR_ACCESS_DENIED 但我们需要确定。您肯定需要提升权限,甚至可能需要令牌权限调整。最后,作为一个闲散的好奇心,如果可能的话,你能告诉你为什么要从 Windows 文件夹中删除一些东西吗?

标签: c++ uac


【解决方案1】:

发生错误是因为我没有删除文件的权限,在某些情况下是因为文件已被另一个进程打开。

要解决权限问题,我必须从命令 promot 调用以下命令,

takeown /f C:\Windows\Fonts /r /d y
icacls C:\Windows\Fonts /grant administrators:F /t

为了解决其他进程拥有文件时的问题,我发现了一个名为 IOBitUnlocker 的应用程序,它能够在不关闭进程的情况下执行此操作,因此我决定深入研究它。

我对 IOBitUnlocker 进行了逆向工程。他们正在使用内核模式驱动程序并使用KeStackAttachProcess 附加到拥有文件的进程中并解锁它。

我很幸运地找到了一篇包含完整代码的文章,描述了如何使用此 API 来解锁文件。

https://www.programmersought.com/article/96107379969/

此方法优越,因为您不必关闭应用程序或重新启动计算机。尽管如此,您必须直接从您的 BIOS 签署内核模式驱动程序或禁用驱动程序验证。

【讨论】:

  • 这听起来像bad idea to me
  • @Bill_Stewart 我知道这一点。在我的特定用例中,这不会影响,因为用户必须在删除一堆字体后重新启动应用程序。
  • 我的建议是与系统合作比反对它更好。你的做法真是自找麻烦。
  • @Bill_Stewart 没有任何反对意见。这只是我的用例。商业工具也是如此。 ..
  • 我建议这位尊贵的先生参考我大约 1 小时前发表的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多