ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【C#】ログインユーザのSIDを取得する

 以前システムログについての記事を書きました。

 その時にユーザをSIDに変換する必要があると書きましたが、今回はそれをC#でやってみる内容となります。

 基本的には参考資料に挙げているページ様とほぼ同じ内容となるため、詳しくはそちらを参照してください。またVisual Studio C#で開発しているという前提なので、他の環境では書き方などが違う場合があるので注意してください。


 では、始めます。


1:ユーザ名からUserSidを取得する
 やり方は簡単で以下の方法でできます。ただし.NET 2.0以上が必要らしいので、古いものだと動かないようです。

// プログラムの実行ユーザを取得
string myUser = Environment.UserName;

NTAccount nTAccount = new NTAccount(myUser);
SecurityIdentifier s = (SecurityIdentifier)nTAccount.Translate(typeof(SecurityIdentifier)); // ユーザが存在しなかった場合ここでエラーになる
string userSid = s.ToString(); // UserSID


2:サンプルコード
 やり方がわかったのでサンプルコードで動かしてみます。Visual Studioを起動させて新しいプロジェクトで「C#コンソール」のみを作成し、その名前を「コンソールプロジェクト」として保存します。

 保存出来たらProgram.csファイルを以下のように書き換えて実行してみてください。

・Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;

namespace コンソールプロジェクト
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string myUser = Environment.UserName;
            string userSid = GetUserSid(myUser);
            Console.WriteLine(userSid);
            Console.ReadKey();
        }

        // ユーザ名からSIDに変換する
        private static string GetUserSid(string username)
        {
            NTAccount nTAccount = new NTAccount(username);
            SecurityIdentifier s = (SecurityIdentifier)nTAccount.Translate(typeof(SecurityIdentifier)); // ユーザが存在しなかった場合ここでエラーになる
            string userSid = s.ToString();
            return userSid;
        }
    }
}

 実行すると以下のようにUserSIDが表示されます。先に挙げた記事のイベントビューアーに出ているUserSIDと比較すると、同じユーザであれば一致しているのが確認できると思います。

 終了させる場合は、表示されたコンソール上で何かキーを入力すると終了します。


 以上がC#でログインユーザのSIDを取得する方法になります。

 あとはシステムログをうまく取得してそのSIDとログインユーザのSIDを比較することができれば、色々とやれることが増えると思います。


・参考資料