2000/10/17
NTFSの話
NTFSと言われても詳しい人でもセキュリティレベルが高いファイルシステムという程度の認識しかないと思います。そういう人ならエクスプローラからファイルを右クリックしてプロパティを見ると誰がアクセスできるのか、どういったアクセスができるのかを一つずつ定義できるなんてのくらいは知っていると思います。で、問題はこのセキュリティレベルの設定です。こいつをプログラムで変更しようとするとまこと複雑怪奇な処理が必要となるのです。今日はその話。
実はセキュリティレベルというのはファイルのセキュリティ情報の中にセキュリティディスプリプタというセキュリティ関連の記述されたデータがあり、その中にアクセス制御リストがありさらにその中にアクセス制御エントリというのがあり、そこにユーザ名とアクセス方法が記述されているというとんでもない入れ子構造なのです。ですからこれを設定するためにはまず、目的のファイルのセキュリティディスプリプタという、セキュリティ情報の大元を取得します。このセキュリティディスプリプタからアクセス制御リストというリストを取得します。このアクセス制御リストからアクセス制御エントリというものを取得します。ここで一段落。追加するためにはまず、新しいアクセス制御リストを作り、これに先ほど取得したアクセス制御エントリのデータを1つずつコピーします。、ユーザはSIDという番号で管理されていますので、ユーザ名からこのSIDを取得します。このSIDを元に新たにアクセス制御エントリを作ります。このアクセス制御エントリを新しいアクセス制御リストに追加します。新しいセキュリティディスプリプタを作成し、これに新しいアクセス制御リストを追加します。これで完成です。混乱したでしょう。私も混乱しました。
この機能はプログラムの基本のファイルを作成するコマンド、CreateFileにも記述できます。ところが私が見た限り、これだけ複雑な処理をしてわざわざセキュリティ記述をするプログラムはありません。みんなここに「使わない」フラグを入れてます。もうちょっと簡単にしろよ、マイクロソフト。


 

Topへ