以前システムログについての記事を書きました。
その時にユーザを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を比較することができれば、色々とやれることが増えると思います。
・参考資料