Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / SystemIdentity.cs / 1 / SystemIdentity.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace Microsoft.InfoCards
{
using System;
using System.ComponentModel;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Security.Principal;
using IDT = Microsoft.InfoCards.Diagnostics.InfoCardTrace;
internal sealed class SystemIdentity : IDisposable
{
bool m_isDisposed;
WindowsIdentity m_identity;
object m_sync;
public static readonly IdentityReference LsaIdentityReference = new SecurityIdentifier( "SY" );
public SystemIdentity( bool throwIfAlreadySystem )
{
m_sync = new object();
WindowsIdentity identity = WindowsIdentity.GetCurrent();
if( identity.IsSystem && throwIfAlreadySystem )
{
//
// This is an internal fatal error.
//
throw IDT.ThrowHelperError(
new InvalidOperationException(
SR.GetString( SR.UserIdentityEqualSystemNotSupported ) ) );
}
else if( !identity.IsSystem )
{
m_identity = identity;
#pragma warning suppress 56523
if( !NativeMethods.RevertToSelf() )
{
IDT.Assert( false, "Identity management failure" );
}
}
else
{
//
// Do nothing. we are LSA already and throwIfAlreadySystem == false
//
IDT.Assert( null == m_identity, "m_identity should be null when we are system and throwIfAlreadySystem == false" );
}
}
void IDisposable.Dispose()
{
if ( m_isDisposed )
{
return;
}
lock( m_sync )
{
if( m_isDisposed )
{
return;
}
m_isDisposed = true;
if( null != m_identity )
{
//
// Impersonate the user
//
if( !NativeMethods.ImpersonateLoggedOnUser( m_identity.Token ) )
{
int hr = Marshal.GetHRForLastWin32Error();
//
// This exception is fatal to our service.
// it could corrupt the flow of identity that the service expects.
// Failfast here.
//
Diagnostics.InfoCardTrace.FailFast( String.Format( CultureInfo.InvariantCulture,
SR.GetString( SR.StoreImpersonateLoggedOnUserFailed ),
hr ) );
}
m_identity.Dispose();
}
}
}
}
}
// 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
- RedirectionProxy.cs
- X509ChainPolicy.cs
- XmlReflectionMember.cs
- KnownIds.cs
- Predicate.cs
- PEFileEvidenceFactory.cs
- OdbcErrorCollection.cs
- AttachmentService.cs
- TransformCollection.cs
- ResourceDisplayNameAttribute.cs
- assemblycache.cs
- Pen.cs
- CommonObjectSecurity.cs
- MemberAccessException.cs
- FixedHyperLink.cs
- ValueProviderWrapper.cs
- EmptyStringExpandableObjectConverter.cs
- TextParagraphCache.cs
- RuntimeArgumentHandle.cs
- DocumentViewer.cs
- DataObject.cs
- HttpListenerException.cs
- Message.cs
- ISCIIEncoding.cs
- FilterEventArgs.cs
- QueryPageSettingsEventArgs.cs
- AssemblySettingAttributes.cs
- CodeDelegateInvokeExpression.cs
- ParserHooks.cs
- XmlDataSourceNodeDescriptor.cs
- OracleNumber.cs
- PointAnimationClockResource.cs
- DataSourceSerializationException.cs
- Interfaces.cs
- ClusterRegistryConfigurationProvider.cs
- ToolStripPanelRow.cs
- BamlMapTable.cs
- DurationConverter.cs
- Timeline.cs
- streamingZipPartStream.cs
- LinqDataSourceHelper.cs
- ConditionBrowserDialog.cs
- _HeaderInfo.cs
- SqlDataRecord.cs
- LightweightCodeGenerator.cs
- ReachUIElementCollectionSerializer.cs
- ButtonStandardAdapter.cs
- CompilerParameters.cs
- _ConnectStream.cs
- AsymmetricKeyExchangeDeformatter.cs
- IPipelineRuntime.cs
- RelationshipConverter.cs
- NetNamedPipeBindingElement.cs
- HttpModuleCollection.cs
- DataControlButton.cs
- DataGridViewElement.cs
- SessionStateModule.cs
- Region.cs
- BuilderPropertyEntry.cs
- DotAtomReader.cs
- TextParaClient.cs
- HostUtils.cs
- DataTableCollection.cs
- RoutedEventConverter.cs
- ColorContext.cs
- XmlSchemaException.cs
- GroupBoxAutomationPeer.cs
- TreeNode.cs
- ChannelFactoryRefCache.cs
- MaterialGroup.cs
- XmlDataLoader.cs
- DataBindingExpressionBuilder.cs
- FormViewDeleteEventArgs.cs
- dataobject.cs
- OleDbError.cs
- LocalizationParserHooks.cs
- DragCompletedEventArgs.cs
- SafeHandles.cs
- ProfileBuildProvider.cs
- SequenceDesigner.cs
- DataGridViewToolTip.cs
- HasCopySemanticsAttribute.cs
- ConfigurationSectionHelper.cs
- ProtectedConfiguration.cs
- CompiledQuery.cs
- ObjectToken.cs
- XmlUtil.cs
- FrameworkContentElementAutomationPeer.cs
- UniqueEventHelper.cs
- ConfigXmlSignificantWhitespace.cs
- DefaultPropertiesToSend.cs
- LayoutEvent.cs
- DataBoundControlHelper.cs
- Canvas.cs
- TextContainerChangedEventArgs.cs
- ResourcePool.cs
- DesignUtil.cs
- InstanceLockQueryResult.cs
- MergeFailedEvent.cs
- CompilerError.cs