.NetでC#を使用して書き込み権限があるかどうかをプログラムで判断するにはどうすればよいですか?
-
02-07-2019 - |
質問
.NetのC#を使用して、イントラネットのリモートマシンに書き込み権限があるかどうかを確認するにはどうすればよいですか?
解決
簡単な答えは、試してみることです。 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権限のリストを取得します。 .NET 2.0以降でのみ利用可能です。また、SMBネットワークがあることを前提としています。 Windows以外のネットワークを使用している場合はどうなるかわかりません。
.NET 2.0以降を使用していない場合、通常のpInvokeおよびWin32 APIジャズです。
ScottKoonは、WindowsのACLパーミッションのチェックについて書いています。 CAS(コードアクセスセキュリティ)を使用して、マネージコードのアクセス許可を確認することもできます。これは、アクセス許可を制限する.Net固有の方法です。ユーザーが書き込み権限を持っていない場合、コードは書き込み権限を持たないことに注意してください(CASがそれを許可している場合でも)。
CASは非常に使いやすいです。メソッドの開始時に宣言属性を追加することもできます。詳細については、 MSDN
所属していません StackOverflow