ディレクトリをスキャンしていくつかの情報を収集するC#アプリケーションがあります。各ファイルのアカウント名を表示したいのですが。FileInfoオブジェクトのSIDを取得し、次の手順を実行することで、ローカルシステムでこれを行うことができます。
string GetNameFromSID( SecurityIdentifier sid )
{
NTAccount ntAccount = (NTAccount)sid.Translate( typeof( NTAccount ) );
return ntAccount.ToString();
}
ただし、これはネットワーク上のファイルでは機能しません。おそらく、Translate()関数はローカルユーザーアカウントでのみ機能するためです。SIDでLDAPルックアップを実行できると思ったので、次のことを試しました。
string GetNameFromSID( SecurityIdentifier sid )
{
string str = "LDAP://<SID=" + sid.Value + ">";
DirectoryEntry dirEntry = new DirectoryEntry( str );
return dirEntry.Name;
}
これは、「dirEntry.Name」へのアクセスがオフになってネットワークにクエリを実行しているように数秒間ハングするという点で機能しているように見えますが、その後System.Runtime.InteropServices.COMExceptionがスローされます。
任意のファイルまたはSIDのアカウント名を取得する方法を知っている人はいますか?ネットワークやLDAPなどについてはよくわかりません。DirectorySearcherというクラスがありますが、これはおそらく私が使用することになっていますが、ドメイン名が必要であり、それを取得する方法もわかりません。スキャンしているディレクトリへのパスだけがあります。
前もって感謝します。