Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Base / System / Security / RightsManagement / SecureEnvironment.cs / 1 / SecureEnvironment.cs
//------------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description: Secure Environment class is a starting point for Managed RM APIs
// It provides basic services of enumerating User Certificates, Initializing Environment
//
// History:
// 06/01/2005: IgorBel : Initial Implementation
//
//-----------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Globalization;
using System.Windows;
using MS.Internal.Security.RightsManagement;
using SecurityHelper=MS.Internal.WindowsBase.SecurityHelper;
using MS.Internal;
using System.Security.Permissions;
namespace System.Security.RightsManagement
{
///
/// This class represent a client session, which used in activation, binding and other function calls.
///
///
/// Critical: This class expose access to methods that eventually do one or more of the the following
/// 1. call into unmanaged code
/// 2. affects state/data that will eventually cross over unmanaged code boundary
/// 3. Return some RM related information which is considered private
///
/// TreatAsSafe: This attrbiute automatically applied to all public entry points. All the public entry points have
/// Demands for RightsManagementPermission at entry to counter the possible attacks that do
/// not lead to the unamanged code directly(which is protected by another Demand there) but rather leave
/// some status/data behind which eventually might cross the unamanaged boundary.
///
[SecurityCritical(SecurityCriticalScope.Everything)]
public class SecureEnvironment : IDisposable
{
///
/// This static Method builds a new instance of a SecureEnvironment for a given user that is already
/// activated. If this method called with a user that isn't activated, and exception will be thrown.
/// The user that is passed into the function must have a well defined authentication type
/// AuthenticationType.Windows or AuthenticationType.Passport, all other Authentication
/// types(AuthenticationType.WindowsPassport or AuthenticationType.Internal) are not allowed.
///
public static SecureEnvironment Create(string applicationManifest,
ContentUser user)
{
SecurityHelper.DemandRightsManagementPermission();
return CriticalCreate(applicationManifest, user);
}
///
/// This static method activates a user and creates a new instance of SecureEnvironment.
/// The authentication type determines the type of user identity that will be activated.
/// If Permanent Windows activation is requested then the default currently logged on
/// Windows Account identity will be activated. If Temporary Windows activation requested
/// then user will be prompted for Windows Domain credentials through a dialog, and the
/// user identified through those credentials will be activated.
/// In case of Passport authentication, a Passport authentication dialog will always
/// appear regardless of temporary or permanent activation mode. The user that authenticatd
/// through that Passport Authentication dialog will be activated.
/// Regardless of Windows or Passport Authentication, all Temporary created activation will be
/// destroyed when SecureEnvironment instance is Disposed or Finalized.
///
public static SecureEnvironment Create(string applicationManifest,
AuthenticationType authentication,
UserActivationMode userActivationMode)
{
SecurityHelper.DemandRightsManagementPermission();
return CriticalCreate(applicationManifest,
authentication,
userActivationMode);
}
///
/// This property verifies whether the current machine was prepared for consuming and producing RM protected content.
/// If property returns true it could be used as an indication that Init function call will not result in a network transaction.
///
public static bool IsUserActivated(ContentUser user)
{
SecurityHelper.DemandRightsManagementPermission();
if (user == null)
{
throw new ArgumentNullException("user");
}
// we only let specifically identified users to be used here
if ((user.AuthenticationType != AuthenticationType.Windows) &&
(user.AuthenticationType != AuthenticationType.Passport))
{
throw new ArgumentOutOfRangeException("user", SR.Get(SRID.OnlyPassportOrWindowsAuthenticatedUsersAreAllowed));
}
using (ClientSession userClientSession = new ClientSession(user))
{
// if machine activation is not present we can return false right away
return (userClientSession.IsMachineActivated() && userClientSession.IsUserActivated());
}
}
///
/// Removes activation for a given user. User must have Windows or Passport authnetication
///
public static void RemoveActivatedUser(ContentUser user)
{
SecurityHelper.DemandRightsManagementPermission();
if (user == null)
{
throw new ArgumentNullException("user");
}
// we only let specifically identifyed users to be used here
if ((user.AuthenticationType != AuthenticationType.Windows) &&
(user.AuthenticationType != AuthenticationType.Passport))
{
throw new ArgumentOutOfRangeException("user", SR.Get(SRID.OnlyPassportOrWindowsAuthenticatedUsersAreAllowed));
}
// Generic client session to enumerate user certificates
using (ClientSession userClientSession = new ClientSession(user))
{
// Remove Licensor certificastes first
List userClientLicensorCertificateIds =
userClientSession.EnumerateUsersCertificateIds(user, EnumerateLicenseFlags.ClientLicensor);
// and now we can remove certificates that have been enumerated
foreach(string licenseId in userClientLicensorCertificateIds)
{
userClientSession.DeleteLicense(licenseId);
}
// Remove User's identity certificastes second
List userGroupIdentityCertificateIds =
userClientSession.EnumerateUsersCertificateIds(user, EnumerateLicenseFlags.GroupIdentity);
// and now we can remove certificates that have been enumerated
foreach(string licenseId in userGroupIdentityCertificateIds)
{
userClientSession.DeleteLicense(licenseId);
}
}
}
///
/// This function returns a read only collection of the activated users.
///
static public ReadOnlyCollection GetActivatedUsers()
{
SecurityHelper.DemandRightsManagementPermission();
//build user with the default authentication type and a default name
// neither name not authentication type is important in this case
//ContentUser tempUser = new ContentUser(_defaultUserName, AuthenticationType.Windows);
// Generic client session to enumerate user certificates
using(ClientSession genericClientSession =
ClientSession.DefaultUserClientSession(AuthenticationType.Windows))
{
List userList = new List();
// if machine activation is not present we can return empty list right away
if (genericClientSession.IsMachineActivated())
{
int index =0;
while(true)
{
// we get a string which can be parsed to get the ID and type
string userCertificate = genericClientSession.EnumerateLicense(EnumerateLicenseFlags.GroupIdentity, index);
if (userCertificate == null)
break;
// we need to parse the information out of the string
ContentUser user = ClientSession.ExtractUserFromCertificateChain(userCertificate);
// User specific client session to check it's status
using(ClientSession userClientSession = new ClientSession(user))
{
if (userClientSession.IsUserActivated())
{
userList.Add(user);
}
}
index ++;
}
}
return new ReadOnlyCollection(userList);
}
}
///
/// This method is responsible for tearing down secure environment that was built as a result of Init call.
///
public void Dispose()
{
SecurityHelper.DemandRightsManagementPermission();
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// Read only property which returns the User provided in the constructor.
///
public ContentUser User
{
get
{
SecurityHelper.DemandRightsManagementPermission();
CheckDisposed();
return _user;
}
}
///
/// Read only property which returns the Application Manifest provided in the constructor.
///
public string ApplicationManifest
{
get
{
SecurityHelper.DemandRightsManagementPermission();
CheckDisposed();
return _applicationManifest;
}
}
///
/// Dispose(bool)
///
///
protected virtual void Dispose(bool disposing)
{
try
{
if (disposing && (_clientSession != null))
{
_clientSession.Dispose();
}
}
finally
{
_clientSession = null;
}
}
internal ClientSession ClientSession
{
get
{
Invariant.Assert(_clientSession != null);
return _clientSession;
}
}
///
/// This static Method builds a new instance of a secure environment for a given user that is assumed to be already activated.
/// client Application can use GetActivatedUsers property to enumerate Activated users.
///
private static SecureEnvironment CriticalCreate(string applicationManifest, ContentUser user)
{
if (applicationManifest == null)
{
throw new ArgumentNullException("applicationManifest");
}
if (user == null)
{
throw new ArgumentNullException("user");
}
// we only let specifically identifyed users to be used here
if ((user.AuthenticationType != AuthenticationType.Windows) &&
(user.AuthenticationType != AuthenticationType.Passport))
{
throw new ArgumentOutOfRangeException("user");
}
if (!IsUserActivated(user))
{
throw new RightsManagementException(RightsManagementFailureCode.NeedsGroupIdentityActivation);
}
ClientSession clientSession = new ClientSession(user);
try
{
clientSession.BuildSecureEnvironment(applicationManifest);
return new SecureEnvironment(applicationManifest, user, clientSession);
}
catch
{
clientSession.Dispose();
throw;
}
}
private static SecureEnvironment CriticalCreate(
string applicationManifest,
AuthenticationType authentication,
UserActivationMode userActivationMode)
{
if (applicationManifest == null)
{
throw new ArgumentNullException("applicationManifest");
}
if ((authentication != AuthenticationType.Windows) &&
(authentication != AuthenticationType.Passport))
{
throw new ArgumentOutOfRangeException("authentication");
}
if ((userActivationMode != UserActivationMode.Permanent) &&
(userActivationMode != UserActivationMode.Temporary))
{
throw new ArgumentOutOfRangeException("userActivationMode");
}
//build user with the given authnetication type and a default name
// only authentication type is critical in this case
ContentUser user;
using (ClientSession tempClientSession =
ClientSession.DefaultUserClientSession(authentication))
{
//Activate Machine if neccessary
if (!tempClientSession.IsMachineActivated())
{
// activate Machine
tempClientSession.ActivateMachine(authentication);
}
//Activate User (we will force start activation at this point)
// at this point we should have a real user name
user = tempClientSession.ActivateUser(authentication, userActivationMode);
}
Debug.Assert(IsUserActivated(user));
ClientSession clientSession = new ClientSession(user, userActivationMode);
try
{
try
{
// make sure we have a Client Licensor Certificate
clientSession.AcquireClientLicensorCertificate();
}
catch (RightsManagementException)
{
// In case of the RightsMnaagement exception we are willing to proceed
// as ClientLicensorCertificate only required for publishing not for consumption
// and therefore it is optional to have one.
}
clientSession.BuildSecureEnvironment(applicationManifest);
return new SecureEnvironment(applicationManifest, user, clientSession);
}
catch
{
clientSession.Dispose();
throw;
}
}
///
/// Private Constructor for the SecureEnvironment.
///
private SecureEnvironment(string applicationManifest,
ContentUser user,
ClientSession clientSession)
{
Invariant.Assert(applicationManifest != null);
Invariant.Assert(user != null);
Invariant.Assert(clientSession != null);
_user = user;
_applicationManifest = applicationManifest;
_clientSession = clientSession;
}
///
/// Call this before accepting any API call
///
private void CheckDisposed()
{
if (_clientSession == null)
throw new ObjectDisposedException("SecureEnvironment");
}
private ContentUser _user;
private string _applicationManifest;
private ClientSession _clientSession; // if null we are disposed
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description: Secure Environment class is a starting point for Managed RM APIs
// It provides basic services of enumerating User Certificates, Initializing Environment
//
// History:
// 06/01/2005: IgorBel : Initial Implementation
//
//-----------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Globalization;
using System.Windows;
using MS.Internal.Security.RightsManagement;
using SecurityHelper=MS.Internal.WindowsBase.SecurityHelper;
using MS.Internal;
using System.Security.Permissions;
namespace System.Security.RightsManagement
{
///
/// This class represent a client session, which used in activation, binding and other function calls.
///
///
/// Critical: This class expose access to methods that eventually do one or more of the the following
/// 1. call into unmanaged code
/// 2. affects state/data that will eventually cross over unmanaged code boundary
/// 3. Return some RM related information which is considered private
///
/// TreatAsSafe: This attrbiute automatically applied to all public entry points. All the public entry points have
/// Demands for RightsManagementPermission at entry to counter the possible attacks that do
/// not lead to the unamanged code directly(which is protected by another Demand there) but rather leave
/// some status/data behind which eventually might cross the unamanaged boundary.
///
[SecurityCritical(SecurityCriticalScope.Everything)]
public class SecureEnvironment : IDisposable
{
///
/// This static Method builds a new instance of a SecureEnvironment for a given user that is already
/// activated. If this method called with a user that isn't activated, and exception will be thrown.
/// The user that is passed into the function must have a well defined authentication type
/// AuthenticationType.Windows or AuthenticationType.Passport, all other Authentication
/// types(AuthenticationType.WindowsPassport or AuthenticationType.Internal) are not allowed.
///
public static SecureEnvironment Create(string applicationManifest,
ContentUser user)
{
SecurityHelper.DemandRightsManagementPermission();
return CriticalCreate(applicationManifest, user);
}
///
/// This static method activates a user and creates a new instance of SecureEnvironment.
/// The authentication type determines the type of user identity that will be activated.
/// If Permanent Windows activation is requested then the default currently logged on
/// Windows Account identity will be activated. If Temporary Windows activation requested
/// then user will be prompted for Windows Domain credentials through a dialog, and the
/// user identified through those credentials will be activated.
/// In case of Passport authentication, a Passport authentication dialog will always
/// appear regardless of temporary or permanent activation mode. The user that authenticatd
/// through that Passport Authentication dialog will be activated.
/// Regardless of Windows or Passport Authentication, all Temporary created activation will be
/// destroyed when SecureEnvironment instance is Disposed or Finalized.
///
public static SecureEnvironment Create(string applicationManifest,
AuthenticationType authentication,
UserActivationMode userActivationMode)
{
SecurityHelper.DemandRightsManagementPermission();
return CriticalCreate(applicationManifest,
authentication,
userActivationMode);
}
///
/// This property verifies whether the current machine was prepared for consuming and producing RM protected content.
/// If property returns true it could be used as an indication that Init function call will not result in a network transaction.
///
public static bool IsUserActivated(ContentUser user)
{
SecurityHelper.DemandRightsManagementPermission();
if (user == null)
{
throw new ArgumentNullException("user");
}
// we only let specifically identified users to be used here
if ((user.AuthenticationType != AuthenticationType.Windows) &&
(user.AuthenticationType != AuthenticationType.Passport))
{
throw new ArgumentOutOfRangeException("user", SR.Get(SRID.OnlyPassportOrWindowsAuthenticatedUsersAreAllowed));
}
using (ClientSession userClientSession = new ClientSession(user))
{
// if machine activation is not present we can return false right away
return (userClientSession.IsMachineActivated() && userClientSession.IsUserActivated());
}
}
///
/// Removes activation for a given user. User must have Windows or Passport authnetication
///
public static void RemoveActivatedUser(ContentUser user)
{
SecurityHelper.DemandRightsManagementPermission();
if (user == null)
{
throw new ArgumentNullException("user");
}
// we only let specifically identifyed users to be used here
if ((user.AuthenticationType != AuthenticationType.Windows) &&
(user.AuthenticationType != AuthenticationType.Passport))
{
throw new ArgumentOutOfRangeException("user", SR.Get(SRID.OnlyPassportOrWindowsAuthenticatedUsersAreAllowed));
}
// Generic client session to enumerate user certificates
using (ClientSession userClientSession = new ClientSession(user))
{
// Remove Licensor certificastes first
List userClientLicensorCertificateIds =
userClientSession.EnumerateUsersCertificateIds(user, EnumerateLicenseFlags.ClientLicensor);
// and now we can remove certificates that have been enumerated
foreach(string licenseId in userClientLicensorCertificateIds)
{
userClientSession.DeleteLicense(licenseId);
}
// Remove User's identity certificastes second
List userGroupIdentityCertificateIds =
userClientSession.EnumerateUsersCertificateIds(user, EnumerateLicenseFlags.GroupIdentity);
// and now we can remove certificates that have been enumerated
foreach(string licenseId in userGroupIdentityCertificateIds)
{
userClientSession.DeleteLicense(licenseId);
}
}
}
///
/// This function returns a read only collection of the activated users.
///
static public ReadOnlyCollection GetActivatedUsers()
{
SecurityHelper.DemandRightsManagementPermission();
//build user with the default authentication type and a default name
// neither name not authentication type is important in this case
//ContentUser tempUser = new ContentUser(_defaultUserName, AuthenticationType.Windows);
// Generic client session to enumerate user certificates
using(ClientSession genericClientSession =
ClientSession.DefaultUserClientSession(AuthenticationType.Windows))
{
List userList = new List();
// if machine activation is not present we can return empty list right away
if (genericClientSession.IsMachineActivated())
{
int index =0;
while(true)
{
// we get a string which can be parsed to get the ID and type
string userCertificate = genericClientSession.EnumerateLicense(EnumerateLicenseFlags.GroupIdentity, index);
if (userCertificate == null)
break;
// we need to parse the information out of the string
ContentUser user = ClientSession.ExtractUserFromCertificateChain(userCertificate);
// User specific client session to check it's status
using(ClientSession userClientSession = new ClientSession(user))
{
if (userClientSession.IsUserActivated())
{
userList.Add(user);
}
}
index ++;
}
}
return new ReadOnlyCollection(userList);
}
}
///
/// This method is responsible for tearing down secure environment that was built as a result of Init call.
///
public void Dispose()
{
SecurityHelper.DemandRightsManagementPermission();
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// Read only property which returns the User provided in the constructor.
///
public ContentUser User
{
get
{
SecurityHelper.DemandRightsManagementPermission();
CheckDisposed();
return _user;
}
}
///
/// Read only property which returns the Application Manifest provided in the constructor.
///
public string ApplicationManifest
{
get
{
SecurityHelper.DemandRightsManagementPermission();
CheckDisposed();
return _applicationManifest;
}
}
///
/// Dispose(bool)
///
///
protected virtual void Dispose(bool disposing)
{
try
{
if (disposing && (_clientSession != null))
{
_clientSession.Dispose();
}
}
finally
{
_clientSession = null;
}
}
internal ClientSession ClientSession
{
get
{
Invariant.Assert(_clientSession != null);
return _clientSession;
}
}
///
/// This static Method builds a new instance of a secure environment for a given user that is assumed to be already activated.
/// client Application can use GetActivatedUsers property to enumerate Activated users.
///
private static SecureEnvironment CriticalCreate(string applicationManifest, ContentUser user)
{
if (applicationManifest == null)
{
throw new ArgumentNullException("applicationManifest");
}
if (user == null)
{
throw new ArgumentNullException("user");
}
// we only let specifically identifyed users to be used here
if ((user.AuthenticationType != AuthenticationType.Windows) &&
(user.AuthenticationType != AuthenticationType.Passport))
{
throw new ArgumentOutOfRangeException("user");
}
if (!IsUserActivated(user))
{
throw new RightsManagementException(RightsManagementFailureCode.NeedsGroupIdentityActivation);
}
ClientSession clientSession = new ClientSession(user);
try
{
clientSession.BuildSecureEnvironment(applicationManifest);
return new SecureEnvironment(applicationManifest, user, clientSession);
}
catch
{
clientSession.Dispose();
throw;
}
}
private static SecureEnvironment CriticalCreate(
string applicationManifest,
AuthenticationType authentication,
UserActivationMode userActivationMode)
{
if (applicationManifest == null)
{
throw new ArgumentNullException("applicationManifest");
}
if ((authentication != AuthenticationType.Windows) &&
(authentication != AuthenticationType.Passport))
{
throw new ArgumentOutOfRangeException("authentication");
}
if ((userActivationMode != UserActivationMode.Permanent) &&
(userActivationMode != UserActivationMode.Temporary))
{
throw new ArgumentOutOfRangeException("userActivationMode");
}
//build user with the given authnetication type and a default name
// only authentication type is critical in this case
ContentUser user;
using (ClientSession tempClientSession =
ClientSession.DefaultUserClientSession(authentication))
{
//Activate Machine if neccessary
if (!tempClientSession.IsMachineActivated())
{
// activate Machine
tempClientSession.ActivateMachine(authentication);
}
//Activate User (we will force start activation at this point)
// at this point we should have a real user name
user = tempClientSession.ActivateUser(authentication, userActivationMode);
}
Debug.Assert(IsUserActivated(user));
ClientSession clientSession = new ClientSession(user, userActivationMode);
try
{
try
{
// make sure we have a Client Licensor Certificate
clientSession.AcquireClientLicensorCertificate();
}
catch (RightsManagementException)
{
// In case of the RightsMnaagement exception we are willing to proceed
// as ClientLicensorCertificate only required for publishing not for consumption
// and therefore it is optional to have one.
}
clientSession.BuildSecureEnvironment(applicationManifest);
return new SecureEnvironment(applicationManifest, user, clientSession);
}
catch
{
clientSession.Dispose();
throw;
}
}
///
/// Private Constructor for the SecureEnvironment.
///
private SecureEnvironment(string applicationManifest,
ContentUser user,
ClientSession clientSession)
{
Invariant.Assert(applicationManifest != null);
Invariant.Assert(user != null);
Invariant.Assert(clientSession != null);
_user = user;
_applicationManifest = applicationManifest;
_clientSession = clientSession;
}
///
/// Call this before accepting any API call
///
private void CheckDisposed()
{
if (_clientSession == null)
throw new ObjectDisposedException("SecureEnvironment");
}
private ContentUser _user;
private string _applicationManifest;
private ClientSession _clientSession; // if null we are disposed
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CreateUserErrorEventArgs.cs
- VirtualizedContainerService.cs
- UIElementIsland.cs
- LoginUtil.cs
- MimeParameter.cs
- DbRetry.cs
- IndicShape.cs
- PlatformCulture.cs
- IdentityReference.cs
- ResourceProperty.cs
- HttpRequestTraceRecord.cs
- FloaterParaClient.cs
- HttpCookie.cs
- Vector3DAnimationUsingKeyFrames.cs
- FileClassifier.cs
- GcHandle.cs
- DataBindingExpressionBuilder.cs
- MemberDomainMap.cs
- LinqDataSourceValidationException.cs
- DateTimeFormatInfo.cs
- RegionInfo.cs
- WebPartTransformerAttribute.cs
- AsymmetricSignatureFormatter.cs
- DataGridColumnHeadersPresenter.cs
- DbSetClause.cs
- DBDataPermissionAttribute.cs
- Context.cs
- DependencyPropertyConverter.cs
- ListMarkerSourceInfo.cs
- MessageDispatch.cs
- SafeMemoryMappedFileHandle.cs
- TableLayoutPanelCellPosition.cs
- PropertyChange.cs
- initElementDictionary.cs
- ReadonlyMessageFilter.cs
- HwndHostAutomationPeer.cs
- XPathAncestorQuery.cs
- RawUIStateInputReport.cs
- Vars.cs
- PassportIdentity.cs
- ValidationHelper.cs
- CapabilitiesState.cs
- DataGridViewRowCancelEventArgs.cs
- AsyncPostBackTrigger.cs
- PublisherMembershipCondition.cs
- TCPClient.cs
- DependencyPropertyKind.cs
- PasswordPropertyTextAttribute.cs
- SQLSingle.cs
- EnumerableCollectionView.cs
- SqlReferenceCollection.cs
- ToggleProviderWrapper.cs
- ColorMap.cs
- SqlMethodTransformer.cs
- WinCategoryAttribute.cs
- JsonEncodingStreamWrapper.cs
- UnsafeNativeMethods.cs
- CharKeyFrameCollection.cs
- PkcsMisc.cs
- EncodingNLS.cs
- XmlNodeChangedEventManager.cs
- SqlRecordBuffer.cs
- ConfigXmlCDataSection.cs
- BmpBitmapEncoder.cs
- SplitterCancelEvent.cs
- SecurityUtils.cs
- odbcmetadatacollectionnames.cs
- XpsS0ValidatingLoader.cs
- RegexBoyerMoore.cs
- ItemContainerGenerator.cs
- OleDbDataReader.cs
- WindowsNonControl.cs
- Menu.cs
- SqlDataSourceCache.cs
- FieldMetadata.cs
- BuildProviderCollection.cs
- LinkedList.cs
- DesignerGenericWebPart.cs
- ImageAttributes.cs
- ByteStack.cs
- SqlNodeAnnotations.cs
- WmlFormAdapter.cs
- DesignTable.cs
- PaperSize.cs
- GenericWebPart.cs
- WebPartsPersonalizationAuthorization.cs
- NotifyInputEventArgs.cs
- ComponentCollection.cs
- Rijndael.cs
- DataGridRow.cs
- ASCIIEncoding.cs
- BidOverLoads.cs
- TextSerializer.cs
- DecoderBestFitFallback.cs
- DeviceContexts.cs
- IgnoreDeviceFilterElementCollection.cs
- ClusterSafeNativeMethods.cs
- SettingsSection.cs
- ActivityInfo.cs
- SubMenuStyle.cs