Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / clr / src / BCL / System / Security / Principal / WindowsPrincipal.cs / 1 / WindowsPrincipal.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//
// WindowsPrincipal.cs
//
// Group membership checks.
//
namespace System.Security.Principal
{
using Microsoft.Win32;
using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Hashtable = System.Collections.Hashtable;
[Serializable]
[ComVisible(true)]
public enum WindowsBuiltInRole {
Administrator = 0x220,
User = 0x221,
Guest = 0x222,
PowerUser = 0x223,
AccountOperator = 0x224,
SystemOperator = 0x225,
PrintOperator = 0x226,
BackupOperator = 0x227,
Replicator = 0x228
}
[Serializable()]
[HostProtection(SecurityInfrastructure=true)]
[ComVisible(true)]
public class WindowsPrincipal : IPrincipal {
private WindowsIdentity m_identity = null;
// Following 3 fields are present purely for serialization compatability with Everett: not used in Whidbey
#pragma warning disable 169
private String[] m_roles;
private Hashtable m_rolesTable;
private bool m_rolesLoaded;
#pragma warning restore 169
//
// Constructors.
//
private WindowsPrincipal () {}
public WindowsPrincipal (WindowsIdentity ntIdentity) {
if (ntIdentity == null)
throw new ArgumentNullException("ntIdentity");
m_identity = ntIdentity;
}
//
// Properties.
//
public virtual IIdentity Identity {
get {
return m_identity;
}
}
//
// Public methods.
//
public virtual bool IsInRole (string role) {
if (role == null || role.Length == 0)
return false;
NTAccount ntAccount = new NTAccount(role);
IdentityReferenceCollection source = new IdentityReferenceCollection(1);
source.Add(ntAccount);
IdentityReferenceCollection target = NTAccount.Translate(source, typeof(SecurityIdentifier), false);
SecurityIdentifier sid = target[0] as SecurityIdentifier;
if (sid == null)
return false;
return IsInRole(sid);
}
public virtual bool IsInRole (WindowsBuiltInRole role) {
if (role < WindowsBuiltInRole.Administrator || role > WindowsBuiltInRole.Replicator)
throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)role), "role");
return IsInRole((int) role);
}
public virtual bool IsInRole (int rid) {
SecurityIdentifier sid = new SecurityIdentifier(IdentifierAuthority.NTAuthority,
new int[] {Win32Native.SECURITY_BUILTIN_DOMAIN_RID, rid});
return IsInRole(sid);
}
// This methods (with a SID parameter) is more general than the 2 overloads that accept a WindowsBuiltInRole or
// a rid (as an int). It is also better from a performance standpoint than the overload that accepts a string.
// The aformentioned overloads remain in this class since we do not want to introduce a
// breaking change. However, this method should be used in all new applications and we should document this.
[ComVisible(false)]
public virtual bool IsInRole (SecurityIdentifier sid) {
if (sid == null)
throw new ArgumentNullException("sid");
// special case the anonymous identity.
if (m_identity.TokenHandle.IsInvalid)
return false;
// CheckTokenMembership expects an impersonation token
SafeTokenHandle token = SafeTokenHandle.InvalidHandle;
if (m_identity.ImpersonationLevel == TokenImpersonationLevel.None) {
if (!Win32Native.DuplicateTokenEx(m_identity.TokenHandle,
(uint) TokenAccessLevels.Query,
IntPtr.Zero,
(uint) TokenImpersonationLevel.Identification,
(uint) TokenType.TokenImpersonation,
ref token))
throw new SecurityException(Win32Native.GetMessage(Marshal.GetLastWin32Error()));
}
bool isMember = false;
// CheckTokenMembership will check if the SID is both present and enabled in the access token.
if (!Win32Native.CheckTokenMembership((m_identity.ImpersonationLevel != TokenImpersonationLevel.None ? m_identity.TokenHandle : token),
sid.BinaryForm,
ref isMember))
throw new SecurityException(Win32Native.GetMessage(Marshal.GetLastWin32Error()));
token.Dispose();
return isMember;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//
// WindowsPrincipal.cs
//
// Group membership checks.
//
namespace System.Security.Principal
{
using Microsoft.Win32;
using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Hashtable = System.Collections.Hashtable;
[Serializable]
[ComVisible(true)]
public enum WindowsBuiltInRole {
Administrator = 0x220,
User = 0x221,
Guest = 0x222,
PowerUser = 0x223,
AccountOperator = 0x224,
SystemOperator = 0x225,
PrintOperator = 0x226,
BackupOperator = 0x227,
Replicator = 0x228
}
[Serializable()]
[HostProtection(SecurityInfrastructure=true)]
[ComVisible(true)]
public class WindowsPrincipal : IPrincipal {
private WindowsIdentity m_identity = null;
// Following 3 fields are present purely for serialization compatability with Everett: not used in Whidbey
#pragma warning disable 169
private String[] m_roles;
private Hashtable m_rolesTable;
private bool m_rolesLoaded;
#pragma warning restore 169
//
// Constructors.
//
private WindowsPrincipal () {}
public WindowsPrincipal (WindowsIdentity ntIdentity) {
if (ntIdentity == null)
throw new ArgumentNullException("ntIdentity");
m_identity = ntIdentity;
}
//
// Properties.
//
public virtual IIdentity Identity {
get {
return m_identity;
}
}
//
// Public methods.
//
public virtual bool IsInRole (string role) {
if (role == null || role.Length == 0)
return false;
NTAccount ntAccount = new NTAccount(role);
IdentityReferenceCollection source = new IdentityReferenceCollection(1);
source.Add(ntAccount);
IdentityReferenceCollection target = NTAccount.Translate(source, typeof(SecurityIdentifier), false);
SecurityIdentifier sid = target[0] as SecurityIdentifier;
if (sid == null)
return false;
return IsInRole(sid);
}
public virtual bool IsInRole (WindowsBuiltInRole role) {
if (role < WindowsBuiltInRole.Administrator || role > WindowsBuiltInRole.Replicator)
throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)role), "role");
return IsInRole((int) role);
}
public virtual bool IsInRole (int rid) {
SecurityIdentifier sid = new SecurityIdentifier(IdentifierAuthority.NTAuthority,
new int[] {Win32Native.SECURITY_BUILTIN_DOMAIN_RID, rid});
return IsInRole(sid);
}
// This methods (with a SID parameter) is more general than the 2 overloads that accept a WindowsBuiltInRole or
// a rid (as an int). It is also better from a performance standpoint than the overload that accepts a string.
// The aformentioned overloads remain in this class since we do not want to introduce a
// breaking change. However, this method should be used in all new applications and we should document this.
[ComVisible(false)]
public virtual bool IsInRole (SecurityIdentifier sid) {
if (sid == null)
throw new ArgumentNullException("sid");
// special case the anonymous identity.
if (m_identity.TokenHandle.IsInvalid)
return false;
// CheckTokenMembership expects an impersonation token
SafeTokenHandle token = SafeTokenHandle.InvalidHandle;
if (m_identity.ImpersonationLevel == TokenImpersonationLevel.None) {
if (!Win32Native.DuplicateTokenEx(m_identity.TokenHandle,
(uint) TokenAccessLevels.Query,
IntPtr.Zero,
(uint) TokenImpersonationLevel.Identification,
(uint) TokenType.TokenImpersonation,
ref token))
throw new SecurityException(Win32Native.GetMessage(Marshal.GetLastWin32Error()));
}
bool isMember = false;
// CheckTokenMembership will check if the SID is both present and enabled in the access token.
if (!Win32Native.CheckTokenMembership((m_identity.ImpersonationLevel != TokenImpersonationLevel.None ? m_identity.TokenHandle : token),
sid.BinaryForm,
ref isMember))
throw new SecurityException(Win32Native.GetMessage(Marshal.GetLastWin32Error()));
token.Dispose();
return isMember;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MD5.cs
- CodeBlockBuilder.cs
- VerificationAttribute.cs
- OutOfProcStateClientManager.cs
- Crc32.cs
- FormViewInsertEventArgs.cs
- GB18030Encoding.cs
- XmlReaderSettings.cs
- DynamicActivity.cs
- DashStyle.cs
- RuleSettingsCollection.cs
- DetailsViewModeEventArgs.cs
- EmbeddedMailObjectsCollection.cs
- InputBindingCollection.cs
- VariableDesigner.xaml.cs
- DetailsViewDeletedEventArgs.cs
- ScaleTransform.cs
- ReadOnlyDictionary.cs
- ButtonFieldBase.cs
- UnsafeNativeMethodsCLR.cs
- RenamedEventArgs.cs
- DocumentDesigner.cs
- JoinCqlBlock.cs
- TemplateBindingExpressionConverter.cs
- UInt16Converter.cs
- DataObject.cs
- SetterBaseCollection.cs
- DataServiceKeyAttribute.cs
- TextClipboardData.cs
- parserscommon.cs
- AppearanceEditorPart.cs
- XhtmlConformanceSection.cs
- EventLogPermissionAttribute.cs
- MemberDescriptor.cs
- CurrentChangingEventArgs.cs
- EmbeddedMailObjectsCollection.cs
- ActivityMarkupSerializationProvider.cs
- XmlAutoDetectWriter.cs
- MediaElement.cs
- errorpatternmatcher.cs
- _HTTPDateParse.cs
- DbSetClause.cs
- GraphicsContext.cs
- SQLMembershipProvider.cs
- Encoding.cs
- ThrowHelper.cs
- EmptyEnumerator.cs
- BoolLiteral.cs
- DoubleStorage.cs
- TextDecorationLocationValidation.cs
- ServiceBusyException.cs
- PipeStream.cs
- AsymmetricAlgorithm.cs
- ActivityPreviewDesigner.cs
- Preprocessor.cs
- CatalogZoneBase.cs
- LinqDataSourceInsertEventArgs.cs
- ScrollBar.cs
- InternalCache.cs
- ComponentCommands.cs
- XmlIgnoreAttribute.cs
- RegexRunnerFactory.cs
- IdnElement.cs
- SafePointer.cs
- Base64Encoder.cs
- WebPartDescriptionCollection.cs
- TraceEventCache.cs
- TargetException.cs
- _LocalDataStoreMgr.cs
- OpCopier.cs
- CompilerInfo.cs
- FragmentNavigationEventArgs.cs
- DescendentsWalker.cs
- CustomAttribute.cs
- coordinatorfactory.cs
- PropertySourceInfo.cs
- RequiredAttributeAttribute.cs
- Ticks.cs
- UpDownEvent.cs
- BooleanProjectedSlot.cs
- PersianCalendar.cs
- RangeContentEnumerator.cs
- PropertyCondition.cs
- ProcessHost.cs
- QilChoice.cs
- ReadOnlyTernaryTree.cs
- RuleSetDialog.Designer.cs
- HasCopySemanticsAttribute.cs
- Condition.cs
- Utils.cs
- CollectionBuilder.cs
- Stream.cs
- Privilege.cs
- ReflectEventDescriptor.cs
- DataProtection.cs
- WebPartZoneBase.cs
- TTSVoice.cs
- MouseEvent.cs
- PeerDuplexChannelListener.cs
- UnsafeNativeMethods.cs