示例#1
0
        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);
            }
        }
示例#2
0
        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));
            }
            }
        }