public SecurityIdentifier(WellKnownSidType sidType, SecurityIdentifier domainSid)
{
if (sidType == WellKnownSidType.LogonIdsSid)
{
throw new ArgumentException(Environment.GetResourceString("IdentityReference_CannotCreateLogonIdsSid"), "sidType");
}
if (!Win32.WellKnownSidApisSupported)
{
throw new PlatformNotSupportedException(Environment.GetResourceString("PlatformNotSupported_RequiresW2kSP3"));
}
if (sidType < WellKnownSidType.NullSid || sidType > WellKnownSidType.WinBuiltinTerminalServerLicenseServersSid)
{
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue"), "sidType");
}
if (sidType >= WellKnownSidType.AccountAdministratorSid && sidType <= WellKnownSidType.AccountRasAndIasServersSid)
{
if (domainSid == null)
{
throw new ArgumentNullException("domainSid", Environment.GetResourceString("IdentityReference_DomainSidRequired", new object[]
{
sidType
}));
}
SecurityIdentifier left;
int windowsAccountDomainSid = Win32.GetWindowsAccountDomainSid(domainSid, out left);
if (windowsAccountDomainSid == 122)
{
throw new OutOfMemoryException();
}
if (windowsAccountDomainSid == 1257)
{
throw new ArgumentException(Environment.GetResourceString("IdentityReference_NotAWindowsDomain"), "domainSid");
}
if (windowsAccountDomainSid != 0)
{
throw new SystemException(Win32Native.GetMessage(windowsAccountDomainSid));
}
if (left != domainSid)
{
throw new ArgumentException(Environment.GetResourceString("IdentityReference_NotAWindowsDomain"), "domainSid");
}
}
byte[] binaryForm;
int num = Win32.CreateWellKnownSid(sidType, domainSid, out binaryForm);
if (num == 87)
{
throw new ArgumentException(Win32Native.GetMessage(num), "sidType/domainSid");
}
if (num != 0)
{
throw new SystemException(Win32Native.GetMessage(num));
}
this.CreateFromBinaryForm(binaryForm, 0);
}