.Net で C# を使用して、イントラネット内のリモート マシンに書き込み権限があるかどうかを確認するにはどうすればよいですか?
4 に答える
簡単な答えは、それを試して見ることです。WindowsセキュリティAPIは気の弱い人向けではなく、アクセス許可を表示するアクセス許可がなくても書き込みアクセス許可を持っている可能性があります。
そこにも行って、私が見つけた最良で最も信頼できる解決策はこれでした:
bool hasWriteAccess = true;
string remoteFileName = "\\server\share\file.name"
try
{
createRemoteFile(remoteFileName);
}
catch (SystemSecurityException)
{
hasWriteAccess = false;
}
if (File.Exists(remoteFileName))
{
File.Delete(remoteFileName);
}
return hasWriteAccess;
このフォーラムの投稿をチェックしてください。
http://bytes.com/forum/thread389514.html
System.Security.AccessControl名前空間のオブジェクトを使用して、ファイルのACLアクセス許可のリストを取得する方法について説明します。.NET2.0以降でのみ使用できます。また、SMBネットワークがあることも前提としています。Windows以外のネットワークを使用している場合はどうなるかわかりません。
.NET 2.0以降を使用していない場合は、通常のpInvokeおよびWin32APIジャズです。
ScottKoon は、Windows ACL パーミッションのチェックについて書いています。CAS (コード アクセス セキュリティ) を使用してマネージ コードのアクセス許可を確認することもできます。これは、権限を制限する .Net 固有の方法です。ユーザーが書き込み権限を持っていない場合、コードには書き込み権限がありません (CAS が書き込み権限を持っていると言ったとしても)。
CAS は非常に使いやすく、メソッドの先頭に宣言属性を追加することもできます。詳細については、MSDNを参照してください。