public static string LookupAccountSid(string accountName)
{
if (String.IsNullOrEmpty(accountName))
{
return null;
}
// check if already a SID.
if (accountName.StartsWith("S-"))
{
if (Create(accountName) == null)
{
return null;
}
return accountName;
}
string domain = null;
int index = accountName.IndexOf('\\');
if (index != -1)
{
domain = accountName.Substring(0, index).ToUpper();
accountName = accountName.Substring(index+1);
}
StringBuilder builder = new StringBuilder();
builder.AppendFormat("Name='{0}'", accountName);
if (!String.IsNullOrEmpty(domain))
{
if (domain != "BUILTIN" && domain != "NT AUTHORITY")
{
builder.AppendFormat(" AND Domain='{0}'", domain);
}
}
SelectQuery query = new SelectQuery("Win32_Account", builder.ToString());
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
try
{
foreach (ManagementObject target in searcher.Get())
{
return target["SID"] as string;
}
}
finally
{
searcher.Dispose();
}
return null;
}