「ほっ」と。キャンペーン
(.Net)SIDを文字列に変換
ActiveDirectoryから取得したオブジェクトの SID はバイト型配列になっています。
これを文字列(S-1-5-21-xxx-xxx...)に変換する方法です。

WindowsAPIにMSDN:ConvertSidToStringSidという関数があるようなので、これを使うと簡単に文字列形式にできるようですね。

サンプルはこんな感じです。(C#)
/// <summary>
/// ActiveDirectoryから取得したbyte配列をSID文字列形式に変換
/// </summary>
/// <param name="psid">変換する SID へのポインタを指定します</param>
/// <param name="stringSid">NULL で終わる SID 文字列へのポインタを受け取る変数へのポインタを指定します。返されたバッファを解放するには、LocalFree 関数を使います。</param>
/// <returns>関数が成功すると、0 以外の値が返ります。関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、GetLastError 関数を使います。</returns>
[DllImport("advapi32.dll")]
private static extern int ConvertSidToStringSid(byte[] psid, ref IntPtr stringSid);
 
public static string SidToString(SearchResult res)
{
ResultPropertyValueCollection pvc = res.Properties["objectSid"];
byte[] sids = (byte[])pvc[0];
//ポインタ定義
IntPtr pStringSid = IntPtr.Zero;
//APIを使って変換 第二引数ポインタに結果が入ってる
int ret = ConvertSidToStringSid(sids, ref pStringSid);
//結果となる文字列変数定義
string strSid = string.Empty;
if (ret != 0)
{
//ポインタの先にある文字列をマネージStringに変換。
strSid = Marshal.PtrToStringAnsi(pStringSid);
//メモリ解放
Marshal.FreeCoTaskMem(pStringSid);
}
return strSid;
}


参考:
@IT:C#からActive Directoryのユーザ、グループのSIDを取得したい
[PR]
by jehoshaphat | 2010-03-21 09:32 | .Net開発 | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/12344564
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


<< (.Net,ADSI)Acti... (.Net,ADSI)Acti... >>