プロが教えるわが家の防犯対策術!

たびたびお世話になります。

現在下記の環境でプログラムを作成しており、掲題の問題に突き当たりました。
 開発環境:Visual C++ 2008 Professional Edition(.NETアプリ)
 OS: WindowsXP SP3

あるフォルダが指定されたとき、そのフォルダに対するアクセス権を取得したいと考えています。
目的は、(作成中の)実行中のプログラムがそのフォルダへアクセスできるかどうかを知りたいためです。

アクセス権の調査の結果、アクセス権が有ると判断される場合には、そのフォルダ以下で特定の処理をして、アクセス権が無い場合には、処理を中止したいと考えています。

ドキュメントなどを見ていると、アクセス権を設定する方法は載っているのですが、アクセス権を取得する方法を見つけることが出来ず、ここで質問させていただいた次第です。

何か良い方法をご存知の方がいらっしゃいましたら、ご教示いただきますよう、お願い致します。

A 回答 (1件)

原則:


アクセス権の有無のチェックではなく,実際にアクセスした時に例外が発生したならばアクセス権がなかったとして取り扱う


上記で納得できないならば……
まず,DACLについて。
http://msdn.microsoft.com/en-us/library/aa374862 …
次に,System.IO.File.GetAccessControlについて
http://msdn.microsoft.com/ja-jp/library/system.i …

一応,上記で全部なのですが……
DACLを順番にみていって,
・最初に現在のユーザーまはた現在のユーザーを含むグループに対するAllowエントリが見つかったらアクセス許可
・最初に現在のユーザーまはた現在のユーザーを含むグループに対するDenyエントリが見つかったらアクセス不許可
・現在のユーザーおよび現在のユーザーを含むグループに対するエントリが見つからなかったらアクセス不許可
となります。はっきりいって,面倒くさいことこの上ないです。

さらに,他のプロセスが開いていた場合はアクセス不可だったりするのですが,
それは全部のプロセスに対して開いているハンドルを調べて,さらにそこからファイル名を調べて……という作業が必要になります。
# Process Explorerでやっているのでできるはず。やりかたは知りませんが。
さらに,ファイル名だけではハードリンクやシンボリックリンクに対して対処できないので,そのあたりも考慮する必要があります。
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ありません。

ご回答、ありがとうございます。

・・・考えることは沢山有りそうですね。
まずは、例外を検出したら処理を飛ばすようにしたいと思います。

お礼日時:2009/06/11 02:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!