3

在 Win32 CreateFile() API 中,我可以在打开文件时指定 dwShareMode,以防止在打开文件时删除或更改该文件。

我正在寻找 WinRT 中的 C# 模拟。假设我打开一个文件:

StorageFile sf = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("x.txt");
IRandomAccessStreamWithContentType iras = await sf.OpenReadAsync();

然后从 CMD.EXE 的实例,我可以 CD 到 ...\AppData\Local\Packages\zzz\LocalState 目录并在 WinRT 应用程序打开文件时删除该文件。

我可以在我的 C# 代码中做什么来导致删除失败?

4

1 回答 1

1

不能直接使用。这对于 WinRT 来说很典型,它通过简单地不公开功能来强制应用程序运行良好,而不是在 api 级别占用资源。这也是一个相当严重的可用性问题,当用户离开应用程序时,应用程序可能会暂停很长时间。将文件锁定那么长时间当然是非常有问题的,用户没有很好的方法来诊断问题。

无论如何,当您使用 LocalFolder 时,这不是问题,没有其他人可以做到这一点。好吧,不算有上帝帐户的人。

有一个可用的后门,您可以调用 CreateFile2()。商店应用程序允许使用的 CreateFile() 版本。它有一个 dwShareMode 参数。在 C# 程序中使用它并没有什么乐趣,而且商店验证拒绝的可能性也不为零。

于 2013-02-07T23:47:23.790 回答