IsolatedStorageContainment 枚举

定义

注意

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
继承
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、站点和区域的定义,请参阅 UrlIdentityPermissionSiteIdentityPermissionZoneIdentityPermission

这些标识组合在一起,在这种情况下,将一个接一个地应用标识,直到创建所需的独立存储。 有效分组为 User+Assembly 和 User+Assembly+Domain。 这种标识分组在许多不同的应用程序中很有用。

如果数据按域、用户和程序集存储,则数据是私有的,只有该程序集中的代码可以访问数据。 数据存储也由运行它的应用程序隔离,因此程序集不会通过向其他应用程序公开数据来表示潜在的泄漏。

程序集和用户的隔离可用于跨多个应用程序应用的用户数据;例如,独立于应用程序的许可证信息或用户个人信息 (名称、身份验证凭据等) 。

IsolatedStorageContainment 公开标志,这些标志确定是否允许应用程序使用独立存储,如果是,则允许哪些标识组合使用它。 它还确定是否允许应用程序将信息存储在可与用户一起漫游的位置, (Windows 漫游用户配置文件或文件夹重定向必须配置) 。

适用于

另请参阅