IsolatedStorageContainment 枚举
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
注意
Code Access Security is not supported or honored by the runtime.
指定独立存储区所允许的用途。
public enum class IsolatedStorageContainment
[System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public enum IsolatedStorageContainment
[System.Serializable]
public enum IsolatedStorageContainment
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum IsolatedStorageContainment
public enum IsolatedStorageContainment
[<System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
type IsolatedStorageContainment =
[<System.Serializable>]
type IsolatedStorageContainment =
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type IsolatedStorageContainment =
type IsolatedStorageContainment =
Public Enum IsolatedStorageContainment
- 继承
- 属性
字段
AdministerIsolatedStorageByUser | 112 | 对用户存储区的无限制的管理能力。 允许浏览和删除整个用户存储区,但除用户自己的域/程序集标识外,不允许进行读访问。 |
ApplicationIsolationByMachine | 69 | 存储首先按计算机隔离,然后按应用程序隔离。 这为在任何域上下文中均可访问的应用程序提供了数据存储区。 基于应用程序的数据隔离舱需要额外的信任,原因是数据隔离舱可能会在应用程序之间提供“隧道”,从而危及特定网站中应用程序的数据隔离。 |
ApplicationIsolationByRoamingUser | 101 | 存储首先按用户隔离,然后按应用程序证据隔离。 当启用 Windows 用户数据漫游时,存储将漫游。 这为在任何域上下文中均可访问的应用程序提供了数据存储区。 基于应用程序的数据隔离舱需要额外的信任,原因是数据隔离舱可能会在应用程序之间提供“隧道”,从而危及特定网站中应用程序的数据隔离。 |
ApplicationIsolationByUser | 21 | 存储首先按用户隔离,然后按应用程序隔离。 存储也被计算机隔离。 这为在任何域上下文中均可访问的应用程序提供了数据存储区。 基于应用程序的数据隔离舱需要额外的信任,原因是数据隔离舱可能会在应用程序之间提供“隧道”,从而危及特定网站中应用程序的数据隔离。 |
AssemblyIsolationByMachine | 64 | 存储首先按计算机隔离,然后按代码程序集隔离。 这为在任何域上下文中都可访问的程序集提供了数据存储区。 基于程序集的数据室需要额外的信任,因为它可能在应用程序之间提供“隧道”,该隧道会危及特定网站中应用程序的数据隔离。 |
AssemblyIsolationByRoamingUser | 96 | 存储首先按用户隔离,然后按程序集证据隔离。 当启用 Windows 用户数据漫游时,存储将漫游。 这为在任何域上下文中都可访问的程序集提供了数据存储区。 基于程序集的数据室需要额外的信任,因为它可能在应用程序之间提供“隧道”,该隧道会危及特定网站中应用程序的数据隔离。 |
AssemblyIsolationByUser | 32 | 存储首先按用户隔离,然后按代码程序集隔离。 存储也被计算机隔离。 这为在任何域上下文中都可访问的程序集提供了数据存储区。 基于程序集的数据室需要额外的信任,因为它可能在应用程序之间提供“隧道”,该隧道会危及特定网站中应用程序的数据隔离。 |
DomainIsolationByMachine | 48 | 存储首先按计算机隔离,然后按域和程序集隔离。 只有在相同应用程序的上下文内并且仅在相同的计算机上运行时,才可访问数据。 这在第三方程序集想要保留私有数据存储区时很有用。 |
DomainIsolationByRoamingUser | 80 | 存储首先按用户隔离,然后按域和程序集隔离。 当启用 Windows 用户数据漫游时,存储将漫游。 只有在相同应用程序的上下文内并且仅由相同用户运行时,才可访问数据。 这在第三方程序集想要保留私有数据存储区时很有用。 |
DomainIsolationByUser | 16 | 存储首先按用户隔离,然后按域和程序集隔离。 存储也被计算机隔离。 只有在相同应用程序的上下文内并且仅由相同用户运行时,才可访问数据。 这在第三方程序集想要保留私有数据存储区时很有用。 |
None | 0 | 不允许使用独立存储。 |
UnrestrictedIsolatedStorage | 240 | 允许在没有任何限制的情况下使用独立存储。 代码对用户存储区的任何部分均有完全访问权限,而不管域或程序集的标识如何。 独立存储的这种使用允许对独立存储数据存储区中的内容进行枚举。 |
示例
此示例演示如何告诉 CLR 此程序集中的代码需要 IsolatedStoragePermission ,还演示如何从独立存储写入和读取。
using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;
using namespace System::IO::IsolatedStorage;
using namespace System::IO;
static void WriteIsolatedStorage()
{
try
{
// Attempt to create a storage file that is isolated by
// user and assembly. IsolatedStorageFilePermission
// granted to the attribute at the top of this file
// allows CLR to load this assembly and execution of this
// statement.
Stream^ fileCreateStream = gcnew
IsolatedStorageFileStream(
"AssemblyData",
FileMode::Create,
IsolatedStorageFile::GetUserStoreForAssembly());
StreamWriter^ streamWriter = gcnew StreamWriter(
fileCreateStream);
try
{
// Write some data out to the isolated file.
streamWriter->Write("This is some test data.");
streamWriter->Close();
}
finally
{
delete fileCreateStream;
delete streamWriter;
}
}
catch (IOException^ ex)
{
Console::WriteLine(ex->Message);
}
try
{
Stream^ fileOpenStream =
gcnew IsolatedStorageFileStream(
"AssemblyData",
FileMode::Open,
IsolatedStorageFile::GetUserStoreForAssembly());
// Attempt to open the file that was previously created.
StreamReader^ streamReader = gcnew StreamReader(
fileOpenStream);
try
{
// Read the data from the file and display it.
Console::WriteLine(streamReader->ReadLine());
streamReader->Close();
}
finally
{
delete fileOpenStream;
delete streamReader;
}
}
catch (FileNotFoundException^ ex)
{
Console::WriteLine(ex->Message);
}
catch (IOException^ ex)
{
Console::WriteLine(ex->Message);
}
}
// Notify the CLR to only grant IsolatedStorageFilePermission to called methods.
// This restricts the called methods to working only with storage files that are isolated
// by user and assembly.
[IsolatedStorageFilePermission(SecurityAction::PermitOnly, UsageAllowed = IsolatedStorageContainment::AssemblyIsolationByUser)]
int main()
{
WriteIsolatedStorage();
}
// This code produces the following output.
//
// This is some test data.
using System;
using System.Security.Permissions;
using System.IO.IsolatedStorage;
using System.IO;
// Notify the CLR to only grant IsolatedStorageFilePermission to called methods.
// This restricts the called methods to working only with storage files that are isolated
// by user and assembly.
[IsolatedStorageFilePermission(SecurityAction.PermitOnly, UsageAllowed = IsolatedStorageContainment.AssemblyIsolationByUser)]
public sealed class App
{
static void Main()
{
WriteIsolatedStorage();
}
private static void WriteIsolatedStorage()
{
// Attempt to create a storage file that is isolated by user and assembly.
// IsolatedStorageFilePermission granted to the attribute at the top of this file
// allows CLR to load this assembly and execution of this statement.
using (Stream s = new IsolatedStorageFileStream("AssemblyData", FileMode.Create, IsolatedStorageFile.GetUserStoreForAssembly()))
{
// Write some data out to the isolated file.
using (StreamWriter sw = new StreamWriter(s))
{
sw.Write("This is some test data.");
}
}
// Attempt to open the file that was previously created.
using (Stream s = new IsolatedStorageFileStream("AssemblyData", FileMode.Open, IsolatedStorageFile.GetUserStoreForAssembly()))
{
// Read the data from the file and display it.
using (StreamReader sr = new StreamReader(s))
{
Console.WriteLine(sr.ReadLine());
}
}
}
}
// This code produces the following output.
//
// Some test data.
Option Strict On
Imports System.Security.Permissions
Imports System.IO.IsolatedStorage
Imports System.IO
' Notify the CLR to only grant IsolatedStorageFilePermission to called methods.
' This restricts the called methods to working only with storage files that are isolated
' by user and assembly.
<IsolatedStorageFilePermission(SecurityAction.PermitOnly, UsageAllowed:=IsolatedStorageContainment.AssemblyIsolationByUser)> _
Public NotInheritable Class App
Shared Sub Main()
WriteIsolatedStorage()
End Sub
Shared Sub WriteIsolatedStorage()
' Attempt to create a storage file that is isolated by user and assembly.
' IsolatedStorageFilePermission granted to the attribute at the top of this file
' allows CLR to load this assembly and execution of this statement.
Dim s As New IsolatedStorageFileStream("AssemblyData", FileMode.Create, IsolatedStorageFile.GetUserStoreForAssembly())
Try
' Write some data out to the isolated file.
Dim sw As New StreamWriter(s)
Try
sw.Write("This is some test data.")
Finally
sw.Dispose()
End Try
Finally
s.Dispose()
End Try
' Attempt to open the file that was previously created.
Dim t As New IsolatedStorageFileStream("AssemblyData", FileMode.Open, IsolatedStorageFile.GetUserStoreForAssembly())
Try
' Read the data from the file and display it.
Dim sr As New StreamReader(t)
Try
Console.WriteLine(sr.ReadLine())
Finally
sr.Dispose()
End Try
Finally
t.Dispose()
End Try
End Sub
End Class
' This code produces the following output.
'
' Some test data.
注解
注意
代码访问安全性 (CAS) 已在所有版本的 .NET Framework 和 .NET 中弃用。 如果使用与 CAS 相关的 API,最新版本的 .NET 不会遵循 CAS 注释,并会生成错误。 开发人员应寻求用于完成安全任务的替代方法。
独立存储使用证据来确定应用程序或组件使用的唯一存储区域。 程序集的标识唯一地确定虚拟文件系统的根,供该程序集使用。 因此,与其说许多应用程序和组件共享一个通用资源(如文件系统或注册表),不如说,每个应用程序和组件都有其固有的分配文件区域。
分配独立存储时,使用四个基本隔离范围:
User
- 始终根据当前用户确定代码范围。 同一程序集在由不同用户运行时将接收不同的存储区。Machine
- 代码始终根据计算机确定范围。 当同一计算机上的不同用户运行时,同一程序集将收到相同的存储。Assembly
- 代码通过强名称 ((例如 Microsoft.Office.* 或 Microsoft.Office)进行加密标识。Word) ,根据公钥) 按发布者 (,按 URL (例如http://www.fourthcoffee.com/process/grind.htm
) 、站点或区域。Domain
- 基于与应用程序域关联的证据标识代码。 Web 应用程序标识派生自网站的 URL,或者派生自网页的 URL、站点或区域。 本地代码标识基于应用程序目录路径。
有关 URL、站点和区域的定义,请参阅 UrlIdentityPermission、 SiteIdentityPermission和 ZoneIdentityPermission。
这些标识组合在一起,在这种情况下,将一个接一个地应用标识,直到创建所需的独立存储。 有效分组为 User+Assembly 和 User+Assembly+Domain。 这种标识分组在许多不同的应用程序中很有用。
如果数据按域、用户和程序集存储,则数据是私有的,只有该程序集中的代码可以访问数据。 数据存储也由运行它的应用程序隔离,因此程序集不会通过向其他应用程序公开数据来表示潜在的泄漏。
程序集和用户的隔离可用于跨多个应用程序应用的用户数据;例如,独立于应用程序的许可证信息或用户个人信息 (名称、身份验证凭据等) 。
IsolatedStorageContainment 公开标志,这些标志确定是否允许应用程序使用独立存储,如果是,则允许哪些标识组合使用它。 它还确定是否允许应用程序将信息存储在可与用户一起漫游的位置, (Windows 漫游用户配置文件或文件夹重定向必须配置) 。