====== IsolatedStorageFile クラス (System.IO.IsolatedStorage) ======
.NET Frameworkには、アプリケーションの信頼性を向上させる仕組みとして、分離ストレージ(Isolated Storage)という機能が存在する。\\
この機能を利用してアプリケーションの重要なデータを保存しておくと、データが不用意に書き換えられたり、破壊してしまうようなトラブルの発生の可能性を最小にすることができる。\\
\\
using System;
using System.IO;
using System.IO.IsolatedStorage;
class Program
{
static void Main()
{
// 分離ストレージを取得(アセンブリ単位のスコープ)
IsolatedStorageFile isolatedStorageFile =
IsolatedStorageFile.GetMachineStoreForAssembly();
// 分離ストレージファイルのストリームを開く(読み込み用)
using (IsolatedStorageFileStream outputStream =
new IsolatedStorageFileStream("TextFile.txt",
FileMode.Create, FileAccess.Write, isolatedStorageFile))
// ストリーム経由でデータを書き込む
using (StreamWriter writer = new StreamWriter(outputStream))
{
writer.WriteLine("データ書き込み");
}
// 分離ストレージファイルのストリームを開く(書き込み用)
using (IsolatedStorageFileStream inputStream =
new IsolatedStorageFileStream("TextFile.txt",
FileMode.Open, FileAccess.Read, isolatedStorageFile))
// ストリーム経由でデータを書き込む
using (StreamReader reader = new StreamReader(inputStream))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
===== 分離ストレージ ツール(storeadm.exe) =====
分離ストレージ ツールを利用すると、現在マシンに存在する ユーザーストアおよびマシンストアの一覧を表示したり削除することができる。\\
^ コマンド例 ^ 説明 ^
|storeadm /list |ユーザー ストアを一覧表示する。 |
|storeadm /list /machine |マシン ストアを一覧表示する。 |
|storeadm /list /roaming |ローミング ストアを一覧表示する。 |
|storeadm /remove |ユーザー ストアを削除する。 |
|storeadm /remove /machine |マシン ストアを削除する。 |
|storeadm /remove /roaming |ローミング ストアを削除する。 |
|storeadm /remove /quiet |クワイエット モードは、情報の表示を抑制する。 |
|storeadm /help |使い方を表示する。 |
==== ユーザーストアの一覧表示 ====
> storeadm /list
C:\>storeadm /list
Microsoft (R) .NET Framework Store Admin 3.5.21022.8
Copyright (c) Microsoft Corporation. All rights reserved.
Record #1
[Assembly]
4563987...
Size : 1024
Record #2
[Application]
Size : 1024
==== マシンストアの削除 ====
> storeadm /machine /remove
Microsoft (R) .NET Framework Store Admin 3.5.21022.8
Copyright (c) Microsoft Corporation. All rights reserved.
Unable to delete some files, the store could be in use.
===== 分離ストレージの取得でInvalidOperationException例外が発生する場合 =====
Windowsのセキュリティ設定で、「システム暗号化: 暗号化、ハッシュ、署名のための FIPS 準拠アルゴリズムを使う」を有効に設定している場合、分離ストレージの取得で InvalidOperationException例外が発生する。例外メッセージは、「この実装は Windows プラットフォーム FIPS 検証暗号化アルゴリズムの一部ではありません。」というもの。\\
\\
これは、分離ストレージが内部的に利用しているSHA1Managedクラスが、FIPS(連邦情報処理標準)アルゴリズムに準拠していないためである。つまり、これはSHA1Managedクラスの仕様であり、SHA1Managedクラスも使用できなくなる。\\
\\
この問題を回避するには、Windowsのセキュリティ設定で「システム暗号化: 暗号化、ハッシュ、署名のための FIPS 準拠アルゴリズムを使う」の設定を無効にする必要がある。\\
そのためには、以下の手順を実施する。\\
- [スタート]メニューの[ファイル名を指定して実行]をクリックする。
- 名前テキストボックスに「gpedit.msc」と入力して[OK]ボタンをクリックする。\\ {{:dotnet:gpedit_run.png?280|gpedit_run}}
- 「グループ ポリシー」の画面で、[ローカル コンピュータ ポリシー] - [Windows の設定] - [セキュリティの設定] - [ローカル ポリシー]を展開して、[セキュリティ オプション]を選択する。\\ {{:dotnet:gpedit_security_option.png?380|gpedit_security_option}}
- ポリシーの「システム暗号化: 暗号化、ハッシュ、署名のための FIPS 準拠アルゴリズムを使う」をダブルクリックする。\\ {{:dotnet:gpedit_security_option_fips.png?520|gpedit_security_option_fips}}
- [有効]である場合は、[無効]をクリックして[OK]ボタンをクリックする。\\ {{:dotnet:gpedit_security_option_fips_off.png?330|gpedit_security_option_fips_off}}
===== 参考文献 =====
[[http://www.atmarkit.co.jp/fdotnet/dotnettips/578isolatedstorage/isolatedstorage.html|分離ストレージを活用するには?[C#、VB] - @IT]] - @IT\\
[[http://support.microsoft.com/?scid=kb%3Ben-us%3B928833&x=16&y=14|The application may crash, Visual Studio may crash, or you may receive an error message when you develop or run a Windows Workflow Foundation-based application on a computer that has FIPS-compliant algorithms enabled]] - microsoft.com\\
[[http://social.msdn.microsoft.com/forums/en-US/devdocs/thread/f813a28b-5823-4076-bc86-55669ea1262d/|Sandcastle problem with FIPS enabled]] - microsoft.com - Developer Documentation and Help System\\
[[http://msdn.microsoft.com/ja-jp/library/ezabwsbk%28v=vs.80%29.aspx]] - MSDN 分離ストレージ ツール (Storeadm.exe)\\