How can I get the SID of the current Windows account?

后端 未结 11 1126
面向向阳花
面向向阳花 2020-12-14 01:02

I am looking for an easy way to get the SID for the current Windows user account. I know I can do it through WMI, but I don\'t want to go that route.

Apologies to ev

11条回答
  •  攒了一身酷
    2020-12-14 01:27

    In Win32, call GetTokenInformation, passing a token handle and the TokenUser constant. It will fill in a TOKEN_USER structure for you. One of the elements in there is the user's SID. It's a BLOB (binary), but you can turn it into a string by using ConvertSidToStringSid.

    To get hold of the current token handle, use OpenThreadToken or OpenProcessToken.

    If you prefer ATL, it has the CAccessToken class, which has all sorts of interesting things in it.

    .NET has the Thread.CurrentPrinciple property, which returns an IPrincipal reference. You can get the SID:

    IPrincipal principal = Thread.CurrentPrincipal;
    WindowsIdentity identity = principal.Identity as WindowsIdentity;
    if (identity != null)
        Console.WriteLine(identity.User);
    

    Also in .NET, you can use WindowsIdentity.GetCurrent(), which returns the current user ID:

    WindowsIdentity identity = WindowsIdentity.GetCurrent();
    if (identity != null)
        Console.WriteLine(identity.User);
    

提交回复
热议问题