kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

APIでEFS暗号化をする

きかれたので。

  • 新規作成するときはCreateFile(...)にFILE_ATTRIBUTE_ENCRYPTEDをつけましょう。
  • 既存のファイルを暗号化するときはEncryptFile
  • すでに暗号化されているファイルにアクセス可能なアカウントを追加するにはAddUsersToEncryptedFile()。ただし複数のユーザにEFS暗号化したファイルへのアクセスをサポートするのはXP以降。この辺をどうぞ。Adding Users to an Encrypted File (Windows)

ただし、EFSを使うにはちょっと注意する必要があります。暗号化キーをWindowsの保護領域(っていういい方でいいのかな。Protected Storage Serviceで保護している領域)に格納するのですが、このキーが無効になっている場合このAPIは失敗します(確かアクセス拒否)。
このキーはどんな事があってもどこか別のリムーバブルメディアなどに保持しておく必要があります。いったんプロファイルが壊れてキーを失った場合、二度とEFS暗号化したファイルにアクセスできなくなります。私一度やりました。Windows 2000 Professionalでプロファイルが壊れてしまい、EFS暗号化したファイルにアクセスできなくなって青い顔。幸いなことにキーを別のところに保持していたので読み込みなおして無事アクセスできましたが。
Windows VistaのUltimateだけですが、このEFS暗号化キーをMicrosoftのオンラインストレージに保持する機能があります。Ultimateならこれを使うのもいいかもしれません。
Windows - Microsoft Windows ヘルプ