Типы изоляции

Доступ к изолированному хранилищу всегда предоставляется только пользователю, который его создал. Чтобы поддерживать изоляцию такого типа, общеязыковая среда выполнения использует тот же подход к идентификации пользователя, что и операционная система, применяя идентификатор, связанный с процессом, в котором выполнялся код при открытии хранилища. Этот идентификатор обозначает аутентифицированного пользователя, но использование функции олицетворения может привести к тому, что идентификатор текущего пользователя изменится в ходе выполнения приложения.

Доступ к изолированному хранилищу также ограничивается идентификатором, связанным с доменом приложения и сборкой, или только со сборкой. Среда выполнения получает идентификаторы следующими способами:

  • Идентификатор домена является свидетельством приложения. Например, для веб-приложения это может быть полный URL-адрес. Для кода, запускаемого в оболочке, в качестве идентификатора домена может использовать путь к каталогу приложения. Например, если исполняемый файл размещается по пути C:\Office\MyApp.exe, для него будет установлен идентификатор домена "C:\Office\MyApp.exe".

  • Удостоверение сборки является свидетельством сборки. Оно может извлекаться из криптографической цифровой подписи, роль которой может выполнять строгое имя сборки, обозначение издателя программного обеспечения или идентификатор URL-адреса. Если сборка имеет и строгое имя, и идентификатор издателя программного обеспечения, то используется идентификатор издателя программного обеспечения. Если сборка получена из Интернета и не имеет подписи, используется идентификатор URL-адреса. Дополнительные сведения о сборках и строгих именах вы найдете в статье Программирование с использованием сборок.

  • Перемещаемые хранилища перемещаются с пользователем, который имеет перемещаемый профиль пользователя. Файлы записываются в сетевую папку и скачиваются на каждый компьютер, с которого этот пользователь выполняет вход. Дополнительные сведения о перемещаемых профилях пользователей см. в статье IsolatedStorageScope.Roaming.

Объединяя концепции идентификаторов пользователя, домена и сборки, изолированное хранилище может изолировать данные несколькими разными способами, для каждого из которых есть применимые сценарии использования:

Каждый из этих способов изоляции можно объединить с перемещаемым профилем пользователя. Дополнительные сведения см. в разделе об изолированном хранении и перемещении.

На следующем изображении показано, как хранилища изолируются в разных областях:

Diagram that shows isolation by user and assembly.

Изолированные хранилища, за исключением перемещаемых, всегда неявно изолируются по компьютерам, так как для них применяются локальные средства хранения конкретного компьютера.

Внимание

Изолированное хранилище недоступно для приложений Магазина Windows 8.x. Вместо этого используйте классы данных приложений в пространствах имен Windows.Storage, включенных в API среды выполнения Windows для хранения локальных данных и файлов. Дополнительные сведения см. в статье Доступ к данным приложения в Центре разработки для Windows.

Изоляция по пользователям и сборкам

Изоляция по пользователям и сборкам подходит в тех случаях, когда использующая это хранилище сборка должна быть доступна из любого домена приложения. Обычно таким образом изолированное хранилище используется для хранения данных, применяющихся в несколькими приложениях и не привязанных к любому из них, например имен пользователей и (или) сведений о лицензиях. Для доступа к хранилищу, изолированному по пользователю и сборке, код должен иметь доверие на передачу данных между приложениями. Как правило, изоляция по пользователям и сборкам допускается только в интрасетях, но не в Интернете. Чтобы получить хранилище с этим типом изоляции, вызовите статический метод IsolatedStorageFile.GetStore и передайте в него IsolatedStorageScope с указанием пользователя и сборки.

Приведенный ниже код возвращает хранилище, изолированное по пользователю, сборке и домену. Доступ к этому хранилищу может осуществляться через объект isoFile.

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)

Пример использования параметров свидетельства см. в разделе GetStore(IsolatedStorageScope, Evidence, Type, Evidence, Type).

Можно также использовать метод GetUserStoreForAssembly, как показано в следующем примере кода. Этот упрощенный вариант не позволяет открывать хранилища с поддержкой перемещения. В таких случаях используется GetStore.

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

Изоляция по пользователям, доменам и сборкам

Если приложение использует сборку стороннего поставщика, для которой нужно закрытое хранилище данных, вы можете применить изолированное хранилище. Изоляция по пользователям, доменам и сборкам гарантирует, что доступ к данным получит только код из определенной сборки и только в том случае, если эту сборку использует приложение, запущенное в момент создания хранилища. Это приложение должно работать от имени пользователя, для которого было создано хранилище. Изоляция по пользователям, доменам и сборкам не позволяет сторонним сборкам влиять на данные других приложений. По умолчанию следует использовать именно этот тип изоляции, если вы намерены использовать изолированное хранилище, но не уверены в выборе его типа. Чтобы получить хранилище с этим типом изоляции, вызовите статический метод GetStore из IsolatedStorageFile и передайте в него IsolatedStorageScope с указанием пользователя, домена и сборки.

После выполнения приведенного ниже кода возвращается хранилище, изолированное по пользователю, домену и сборке. Доступ к этому хранилищу может осуществляться через объект isoFile.

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)

Можно использовать другой метод, как показано в приведенном ниже примере кода. Этот упрощенный вариант не позволяет открывать хранилища с поддержкой перемещения. В таких случаях используется GetStore.

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

Изолированное хранилище и роуминг

Перемещаемые профили пользователя — это функция Windows, которая позволяет пользователю настроить и использовать сетевой идентификатор, чтобы при входе на любой сетевой компьютер применялись одинаковые персональные настройки. Сборка, которая использует изолированное хранилище, может потребовать переноса изолированного хранилища вместе с перемещаемым профилем пользователя. Роуминг можно использовать в сочетании с изоляцией по пользователям и сборкам или с изоляцией по пользователям, доменам и сборкам. Если функция перемещения не используется, хранилище будет сохраняться только локально даже для пользователей с перемещаемым профилем.

После выполнения приведенного ниже кода возвращается перемещаемое хранилище, изолированное по пользователю и сборке. Доступ к этому хранилищу может осуществляться через объект isoFile.

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)

Добавив к нему область домена, вы получите перемещаемое хранилище, изолированное по пользователю, домену и приложению. Это действие представлено в следующем примере кода:

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)

См. также