如何在 UWP 中为 StorageFile 或 StorageFolder 获得具有 FILE_WRITE_ATTRIBUTES 访问权限的 Win32 HANDLE?

Posted

技术标签:

【中文标题】如何在 UWP 中为 StorageFile 或 StorageFolder 获得具有 FILE_WRITE_ATTRIBUTES 访问权限的 Win32 HANDLE?【英文标题】:How can I get a Win32 HANDLE with FILE_WRITE_ATTRIBUTES access for a StorageFile or StorageFolder in UWP? 【发布时间】:2021-04-23 09:24:47 【问题描述】:

我正在尝试为 UWP 文本编辑器中的文件实现 Notepad++ 样式切换只读标志。我尝试使用SetFileAttributesFromApp,但对于批处理文件和VBScript 文件等敏感文件类型,使用Access to the path is denied 失败。然后我尝试使用 SetFileInformationByHandle,它需要 UWP 应用程序从 StorageFile 获取句柄。我尝试使用CreateSafeFileHandle,但它只提供读写访问权限,修改属性的唯一方法是获得写访问权限。如果文件启用了只读标志或文件被拖放到编辑器,则获取写访问权限失败。我检查了this 问题的答案,该方法指定的唯一额外访问权限是读取属性和删除访问权限。所以我的问题是我可以让FILE_WRITE_ATTRIBUTES 访问从StorageFile 创建的句柄,如果可以,我该怎么做??

【问题讨论】:

请问您使用的项目是 C# UWP 项目还是 C++/WinRT UWP 项目? @YanGu-MSFT 抱歉没有说清楚(我以为SafeFileHandle 的用法会很明显),该项目是一个uwp C# 项目,P/Invoking 一些winapi 方法。跨度> 【参考方案1】:

StorageFile 实例具有只读标志时,没有这样的API 支持让FILE_WRITE_ATTRIBUTES 访问从StorageFile 创建的句柄。

如果要在 UWP 文本编辑器中编辑拖动的文件,可以将拖动的文件复制到 LocalFolder。复制的文件将具有读写访问权限。您可以编辑复制的文件并将其替换为带有FileSavePicker 的原始拖动文件。请注意,如果您不需要保存,可以删除 LocalFolder 中的复制文件。这样,您就无需更改文件的只读标志了。

【讨论】:

以上是关于如何在 UWP 中为 StorageFile 或 StorageFolder 获得具有 FILE_WRITE_ATTRIBUTES 访问权限的 Win32 HANDLE?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 StorageFile.DisplayName getter 在 UWP 中系统地排除 FileType

如何设置 UWP C# StorageFile 以将 SoftwareBitmap 存储到特定路径

另一个进程错误正在使用 UWP StorageFile 文件

移动 StorageFile 后立即在 UWP 中打开 SQLite 连接

uwp 文件系统上 StorageFile 的唯一标识符

uwp StorageFile 没有得到简单的缩略图