在 C# 中将用户名转换为 SID

Converting username to SID in C#

我正在尝试使用此代码将 Windows 用户名(采用经典 .\username 形式)转换为 SID 对象:

NTAccount account = new NTAccount(".\MyUser");
SecurityIdentifier sid = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));

但是,在执行最后一条指令时,我不断收到以下异常:

System.Security.Principal.IdentityNotMappedException: 'Some or all identity references could not be translated.'

我做错了什么?

经过反复试验后回答我自己的问题:

代码是正确的,但翻译功能似乎不支持 shorthand . 以指示该帐户是本地帐户而不是域中的帐户。因此,如果您的用户名以 .\ 开头,则需要将点替换为机器名称。以下代码工作正常:

public static SecurityIdentifier usernameToSid(string user)
{
    if (user.StartsWith(@".\"))
    {
        user = user.Replace(@".\", Environment.MachineName + @"\");
    }

    NTAccount account = new NTAccount(user);
    return (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
}