ようこそ 屋根裏部屋 mkII へ ログイン | 登録 | ヘルプ

Technological

ちょっとしたTIPSや私がはまったこと、調べたことなんかを書いていきます。

EFS暗号化されたファイルを解除する

会社でEFSで暗号化したファイル群を元に戻すために作ったプログラムを整形したバージョン。ファイルの暗号化を戻した場合、タイムスタンプが書き換わってうれしくないので(仕様的には書き変わらないとまずいのでしょうが)、タイムスタンプを保持しておいて、戻すという技を使っています。

実際はエラーチェックとか入っていたり、構造がちょっと違いますが。エラーが出たら許してくださいEmbarrassed。参照にSystem.Security.dllを追加してください。

readonly(読み取り専用)をはずしているのはVSSなどにチェックインしたファイル対策。ReadOnly属性をはずしておかないと例外が発生します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System.Security;
//指定されたフォルダ配下のファイルの暗号化ファイルを解除する

void DecryptFolderFiles(string nameFolder)
{
DirectoryInfo di = new DirectoryInfo(nameFolder);
FileInfo[] AllFiles = di.GetFiles("*.*", SearchOption.AllDirectories);
bool ReadOnlyFlag;
foreach (FileInfo oneFile in AllFiles) {
if ((oneFile.Attributes & FileAttributes.Encrypted) == FileAttributes.Encrypted) {
Console.WriteLine(oneFile.FullName + " の暗号化を解除します");
DateTime lastAccessTime = File.GetLastWriteTime(oneFile.FullName);
if ((oneFile.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) {
ReadOnlyFlag = true;
oneFile.Attributes ^= FileAttributes.ReadOnly;
} else {
ReadOnlyFlag = false;
}
oneFile.Decrypt();
File.SetLastWriteTime(oneFile.FullName, lastAccessTime);
if (ReadOnlyFlag == true) {
oneFile.Attributes |= FileAttributes.ReadOnly;
}
}
}
}

が、このソースでは不十分で、ファイルの解除しかやりません。フォルダに対しても解除しなければならないのですが、(このソースからは削っていますが)FileInfoにフォルダ名を入れても華麗に無視してくれます。Win32 APIつかうしかないのかなぁ...。Decrypt()メソッドはFileInfoにしかはいっていないようで、この辺が.NET Frameworkちょっと不満。

今回は面倒だったので、Explorerから解除しましたWink。C#で書いた理由はWindows 2000 Professionalで実行する必要があったので、PowerShellがつかえなかったのです。

公開 2007年8月12日 23:39 投稿者 kkamegawa
タグ , , , , , ,

コメントの通知

この投稿にコメントが付いた場合にメールを受信するには、登録してください。ここ

また次のフィードから、お気に入りのRSSリーダーを使って最新の状態を知ることもできます。 コメントのRSSフィード

コメント

コメントはありません

どのような感想ですか?

(必須) 
必須 
(必須) 
Powered by Community Server, by Telligent Systems