Isolationstypen

Der Zugriff auf isolierten Speicher ist immer auf den Benutzer eingeschränkt, der ihn erstellt hat. Bei der Implementierung dieses Isolationstyps verwendet die Common Language Runtime den Begriff der Benutzeridentität, der auch vom Betriebssystem erkannt wird. Dabei handelt es sich um die Identität, die mit dem Prozess verknüpft ist, in dem der Code beim Öffnen des Speichers ausgeführt wird. Diese Identität ist eine authentifizierte Benutzeridentität, wobei ein Identitätswechsel dazu führen kann, dass sich die Identität des aktuellen Benutzers dynamisch ändert.

Zudem ist der Zugriff auf isolierte Speicherplätze durch die Identität eingeschränkt, die mit der Domäne und Assembly der Anwendung oder nur mit der Assembly verbunden ist. Die Runtime erhält diese Identitäten auf folgende Weise:

  • Die Domänenidentität stellt den Beweis für die Anwendung dar, die im Falle einer Webanwendung die vollständige URL sein kann. Bei Shell-gehostetem Code kann die Domänenidentität auf dem Pfad des Anwendungsverzeichnisses basieren. Wenn die ausführbare Datei beispielsweise aus dem Pfad C:\Office\MyApp.exe ausgeführt wird, lautet die Domänenidentität C:\Office\MyApp.exe.

  • Die Assemblyidentität ist der Beweis für die Assembly. Diese kann aus einer kryptographischen digitalen Signatur stammen, die der starke Name der Assembly, der Softwareherausgeber der Assembly oder ihre URL-Identität sein kann. Wenn eine Assembly sowohl einen starken Namen als auch eine Softwareherausgeberidentität hat, wird die Softwareherausgeberidentität verwendet. Wenn die Assembly aus dem Internet stammt und unsigniert ist, wird die URL-Identität verwendet. Weitere Informationen zu Assemblys und starken Namen finden Sie unter Programming with Assemblies (Programmieren mit Assemblys).

  • Roamingspeicher wandern mit einem Benutzer, der über ein Roamingbenutzerprofil verfügt. Die Dateien werden in ein Netzwerkverzeichnis geschrieben und auf jeden Computer heruntergeladen, bei dem sich der Benutzer anmeldet. Weitere Informationen zu Roamingbenutzerprofilen finden Sie unter IsolatedStorageScope.Roaming.

Durch die Kombination der Konzepte von Benutzer-, Domänen- und Assemblyidentität kann ein isolierter Speicher die Daten wie folgt isolieren, wobei es für jede dieser Methoden eigene Verwendungsszenarien gibt:

Jede dieser Isolationen kann mit einem Roamingbenutzerprofil kombiniert werden. Weitere Informationen finden Sie im Abschnitt Isolierter Speicher und Roaming.

Die folgende Abbildung zeigt, wie Speicher in verschiedenen Bereichen isoliert werden:

Diagram that shows isolation by user and assembly.

Isolierte Speicher (mit Ausnahme von Roamingspeichern) sind immer implizit nach Computer isoliert, da sie die Speicherfunktionen verwenden, die sich lokal auf einem bestimmten Computer befinden.

Wichtig

Die isolierte Speicherung ist nicht für Windows 8.x Store-Apps verfügbar. Verwenden Sie stattdessen zum Speichern von lokalen Daten und Dateien die in der Windows-Runtime-API enthaltenen Anwendungsdatenklassen in den Windows.Storage-Namespaces. Weitere Informationen finden Sie im Windows Developer Center unter Anwendungsdaten .

Isolation nach Benutzer und Assembly

Wenn die Assembly, die den Datenspeicher verwendet, von der Domäne einer beliebigen Anwendung aus zugänglich sein muss, ist eine Isolation nach Benutzer und Assembly angebracht. Typischerweise wird in dieser Situation isolierter Speicher verwendet, um Daten zu speichern, die für mehrere Anwendungen gelten und nicht an eine bestimmte Anwendung gebunden sind, wie z.B. der Benutzername oder Lizenzinformationen. Für den Zugriff auf Speicher, der nach Benutzer und Assembly isoliert ist, muss der Code vertrauenswürdig sein, um eine Datenübertragung zwischen Anwendungen zu ermöglichen. In der Regel ist die Isolation nach Benutzer und Assembly in Intranets erlaubt, nicht aber im Internet. Durch den Aufruf der statischen IsolatedStorageFile.GetStore-Methode und die Übergabe an einen Benutzer und eine Assembly gibt IsolatedStorageScope Speicher dieses Isolationstyps zurück.

Im folgenden Codebeispiel wird ein Speicher abgerufen, der nach Benutzer und Assembly isoliert ist. Der Zugriff auf den Speicher wird durch das isoFile-Objekt ermöglicht.

IsolatedStorageFile^ isoFile =
    IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
        IsolatedStorageScope::Assembly, (Type^)nullptr, (Type^)nullptr);
IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
    IsolatedStorageScope.Assembly, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Assembly, Nothing, Nothing)

Ein Beispiel zur Verwendung der Beweisparameter finden Sie unter GetStore(IsolatedStorageScope, Evidence, Type, Evidence, Type).

Wie im folgenden Codebeispiel gezeigt, ist die GetUserStoreForAssembly-Methode als Verknüpfung verfügbar. Diese Verknüpfung kann nicht zum Öffnen von Speichern verwendet werden, für die Roaming möglich ist. Verwenden Sie in solchen Fällen GetStore.

IsolatedStorageFile^ isoFile = IsolatedStorageFile::GetUserStoreForAssembly();
IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForAssembly();
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetUserStoreForAssembly()

Isolation nach Benutzer, Domäne und Assembly

Wenn eine Anwendung eine Drittanbieterassembly verwendet, die einen privaten Datenspeicher erfordert, können Sie für die privaten Daten einen isolierten Speicher nutzen. Durch die Isolation nach Benutzer, Domäne und Assembly wird sichergestellt, dass nur Code in einer bestimmten Assembly auf die Daten zugreifen kann. Hierzu müssen zwei Voraussetzungen erfüllt sein. Erstens muss die Assembly von der Anwendung verwendet werden, die ausgeführt wurde, als die Assembly den Speicher angelegt hat. Und zweitens muss die Anwendung durch den Benutzer ausgeführt werden, für den der Speicher angelegt wurde. So wird bei der Isolation nach Benutzer, Domäne und Assembly verhindert, dass die Drittanbieterassembly Daten an andere Anwendungen weitergibt. Wählen Sie diesen Isolationstyp standardmäßig aus, wenn Sie isolierten Speicher verwenden möchten, sich aber nicht sicher sind, welchen Isolationstyp Sie verwenden sollen. Durch den Aufruf der statischen GetStore-Methode von IsolatedStorageFile und die Übergabe an einen Benutzer, eine Domäne und eine Assembly gibt IsolatedStorageScope Speicher dieses Isolationstyps zurück.

Im folgenden Codebeispiel wird ein Speicher abgerufen, der nach Benutzer, Domäne und Assembly isoliert ist. Der Zugriff auf den Speicher wird durch das isoFile-Objekt ermöglicht.

IsolatedStorageFile^ isoFile =
    IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
        IsolatedStorageScope::Domain |
        IsolatedStorageScope::Assembly, (Type^)nullptr, (Type^)nullptr);
IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
        IsolatedStorageScope.Domain |
        IsolatedStorageScope.Assembly, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Domain Or _
        IsolatedStorageScope.Assembly, Nothing, Nothing)

Wie im folgenden Codebeispiel gezeigt, ist eine weitere Methode als Verknüpfung verfügbar. Diese Verknüpfung kann nicht zum Öffnen von Speichern verwendet werden, für die Roaming möglich ist. Verwenden Sie in solchen Fällen GetStore.

IsolatedStorageFile^ isoFile = IsolatedStorageFile::GetUserStoreForDomain();
IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForDomain();
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetUserStoreForDomain()

Isolierte Speicherung und Roaming

Roamingbenutzerprofile sind ein Windows-Feature, über das ein Benutzer eine Identität in einem Netzwerk einrichten und sich damit bei jedem Netzwerkcomputer anmelden kann, wobei alle personalisierten Einstellungen übernommen werden. In einer Assembly, die isolierten Speicher verwendet, kann festgelegt werden, dass der isolierte Speicher des Benutzers gemeinsam mit dem Roamingbenutzerprofil wandert bzw. wechselt. Roaming kann in Verbindung mit der Isolation nach Benutzer und Assembly oder mit der Isolation nach Benutzer, Domäne und Assembly verwendet werden. Wenn ein Roamingbereich nicht verwendet wird, wechseln Speicher selbst dann nicht mit dem Profil, wenn ein Roamingbenutzerprofil verwendet wird.

Im folgenden Codebeispiel wird ein Roamingspeicher abgerufen, der nach Benutzer und Assembly isoliert ist. Der Zugriff auf den Speicher wird durch das isoFile-Objekt ermöglicht.

IsolatedStorageFile^ isoFile =
    IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
        IsolatedStorageScope::Assembly |
        IsolatedStorageScope::Roaming, (Type^)nullptr, (Type^)nullptr);
IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
        IsolatedStorageScope.Assembly |
        IsolatedStorageScope.Roaming, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Assembly Or _
        IsolatedStorageScope.Roaming, Nothing, Nothing)

Ein Domänenbereich kann hinzugefügt werden, um einen Roamingspeicher zu erstellen, der nach Benutzer, Domäne und Anwendung isoliert ist. Dies wird im folgenden Codebeispiel veranschaulicht.

IsolatedStorageFile^ isoFile =
    IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
        IsolatedStorageScope::Assembly | IsolatedStorageScope::Domain |
        IsolatedStorageScope::Roaming, (Type^)nullptr, (Type^)nullptr);
IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
        IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain |
        IsolatedStorageScope.Roaming, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain Or _
        IsolatedStorageScope.Roaming, Nothing, Nothing)

Siehe auch