public unsafe string AccountName(string systemName) { if (sid != null) { System.Text.StringBuilder Name = new System.Text.StringBuilder(256); System.Text.StringBuilder DomainName = new System.Text.StringBuilder(256); UInt32 cbName = (UInt32)Name.Capacity; UInt32 cbDomainName = (UInt32)DomainName.Capacity; NativeMethods.SidNameUse Use = (NativeMethods.SidNameUse) 0; fixed(byte *psid = sid) { if (!NativeMethods.LookupAccountSid(systemName, psid, Name, &cbName, DomainName, &cbDomainName, &Use)) { throw NativeMethods.NewSystemError("System call LookupAccountSid failed"); } } Name.Length = (int)cbName; if (cbDomainName > 0) { DomainName.Length = (int)cbDomainName; return(DomainName.ToString() + '\\' + Name.ToString()); } else { return(Name.ToString()); } } else { return(string.Empty); } }
public static unsafe Sid AccountSid(string systemName, string accountName) { if (accountName is null) { throw new ArgumentNullException(nameof(accountName)); } switch (accountName) { case "Nobody": return(Nobody); case "Everyone": return(Everyone); case "CreatorOwner": return(CreatorOwner); case "CreatorGroup": return(CreatorGroup); case "Dialup": return(Dialup); case "Network": return(Network); case "Batch": return(Batch); case "Interactive": return(Interactive); case "Service": return(Service); case "Anonymous": return(Anonymous); case "EnterpriseControllers": return(EnterpriseControllers); case "PrincipalSelf": return(PrincipalSelf); case "AuthenticatedUsers": return(AuthenticatedUsers); case "TerminalServerUsers": return(TerminalServerUsers); case "LocalSystem": return(LocalSystem); case "Administrators": return(Administrators); case "Users": return(Users); case "Guests": return(Guests); case "PowerUsers": return(PowerUsers); case "AccountOperators": return(AccountOperators); case "ServerOperators": return(ServerOperators); case "PrintOperators": return(PrintOperators); case "BackupOperators": return(BackupOperators); default: { System.Text.StringBuilder DomainName = new System.Text.StringBuilder(256); UInt32 cbDomainName = (UInt32)DomainName.Capacity; NativeMethods.SidNameUse Use = (NativeMethods.SidNameUse) 0; UInt32 cbSid = 96; byte * sid = stackalloc byte[(int)cbSid]; if (!NativeMethods.LookupAccountName(systemName, accountName, sid, &cbSid, DomainName, &cbDomainName, &Use)) { throw NativeMethods.NewSystemError("System call LookupAccountName(\"" + (systemName ?? ".") + "\",\"" + accountName + "\") failed"); } return(new Sid(sid)); } } }