Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / InfoCardService.cs / 1 / InfoCardService.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- // // Presharp uses the c# pragma mechanism to supress its warnings. // These are not recognised by the base compiler so we need to explictly // disable the following warnings. See http://winweb/cse/Tools/PREsharp/userguide/default.asp // for details. // #pragma warning disable 1634, 1691 // unknown message, unknown pragma namespace Microsoft.InfoCards { using System; using System.Text; using System.IO; using System.Collections; using System.ComponentModel; using System.Diagnostics; using System.Runtime.InteropServices; using System.Security.AccessControl; using System.Security.Principal; using System.ServiceProcess; using System.Threading; using System.Reflection; using Microsoft.InfoCards.Diagnostics; using System.Net; using System.Net.Security; using IDT = Microsoft.InfoCards.Diagnostics.InfoCardTrace; // // Summary: // This is the class that receives service control manager messages and acts accordingly, such as // starting or stopping the service. // internal class InfoCardService : ServiceBase { public const int WindowsVistaMajorVersion = 6; public const string FullServiceName = "idsvc"; // // Declare service stopping delegate. // static public event EventHandler Stopping; // // An instance of a delegate passed out to native code. It's // held here so that the garbage collector doesn't get rid of it // while native code is still using it. // RpcCallbacks m_rpcCallbacks; static public LifeTimeMonitor LifeTimeMonitor = null; public InfoCardService() { // // Set privileges on our exe // // For downlevel: This is being called by managed code so that it can be overridden // by the service update // // For XP Tablet PC, we need debug privileges in order to locate the instance of tcserver // that is associated with our desktop. // // For LH+ the code to strip privileges exists in S.SM.Install.dll. // So we'd also need to change registry setting with update. // bool isTabletPC = (0 != NativeMethods.GetSystemMetrics( NativeMethods.SM_TABLETPC )); bool isDownlevel = (Environment.OSVersion.Version.Major < WindowsVistaMajorVersion); bool isXPTabletPC = isTabletPC && isDownlevel; if( 0 != NativeMcppMethods.AdjustPrivilegesWrapper( isXPTabletPC ) ) { // // Not an expected condition, should crash the service. // Crash( new Win32Exception() ); } try { NativeMcppMethods.AdjustServiceProcessSecurity(); } catch( Win32Exception e ) { Crash( e ); } ServiceName = InfoCardService.FullServiceName; CanStop = true; CanShutdown = true; CanPauseAndContinue = false; CanHandleSessionChangeEvent = true; CanHandlePowerEvent = false; AutoLog = true; m_rpcCallbacks.uiAgentRequestAuthorize = new RpcAuthorizeCallback( UIAgentRequest.Authorize ); m_rpcCallbacks.uiAgentRequestBindToService = new RpcUIAgentBindToServiceCallback( UIAgentRequest.BindToService ); m_rpcCallbacks.clientRequestAuthorize = new RpcAuthorizeCallback( ClientRequest.Authorize ); m_rpcCallbacks.clientRequestBindToService = new RpcClientBindToServiceCallback( ClientUIRequest.BindToService ); m_rpcCallbacks.requestFactoryProcessNewRequest = new RpcProcessNewRequestCallback( RequestFactory.ProcessNewRequest ); m_rpcCallbacks.allocMem = new RpcAllocMemCallback( Marshal.AllocHGlobal ); m_rpcCallbacks.freeMem = new RpcFreeMemCallback( Marshal.FreeHGlobal ); m_rpcCallbacks.rundownClientContext = new RpcRundownClientContextHandle( ClientUIRequest.RemoveAndDisposeContextMapping ); // // Create the service lifetime monitor. // InfoCardService.LifeTimeMonitor = new LifeTimeMonitor(); // // The .NET validator does NO CRL check by default. Also it does not check for peer trust. // This will get invoked for all https interactions from managed code. // To remove the inconsistency between this and the CardSpace validator, implement the callback in the .NET validator. // The callback we implement will check for CRL offline and/or peer trust. // ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback( InfoCardX509Validator.ValidateChainOrPeerCallback ); } protected override void Dispose( bool disposing ) { base.Dispose( disposing ); } // // Summary: // Starts the service. // // Remarks: // Starts the native RPC layer and passes out the static delegates that that layer needs to call // back in to managed code when an RPC request is received. // protected override void OnStart( string[] args ) { base.OnStart( args ); AppDomain dom = AppDomain.CurrentDomain; dom.SetPrincipalPolicy( PrincipalPolicy.WindowsPrincipal ); using( HGlobalSafeHandle callbacks = HGlobalSafeHandle.Construct( Marshal.SizeOf( m_rpcCallbacks ) ) ) { Marshal.StructureToPtr( m_rpcCallbacks, callbacks.DangerousGetHandle(), false ); uint status = NativeMcppMethods.InfoCardStartRpcServerWrapper( InfoCardUIAgent.UiAgentFullPath, callbacks.DangerousGetHandle() ); if( 0 != status ) { throw IDT.ThrowHelperError( new Win32Exception( (int)status ) ); } } } // // Summary: // Called when the SCM wants the service stop. When called the native RPC layer is stopped. protected override void OnStop() { try { InfoCardUIAgent.DoShutdown(); NativeMcppMethods.InfoCardStopRpcServerWrapper(); // // Raise service stopping event. // OnStopping(); } #pragma warning suppress 56500 // do not catch all exceptions. catch( Exception e ) { IDT.TraceAndLogException( e ); // // We need to catch the exception becuase we are shutting down // if it throws, it will leave the SCM in and invalid state. // } finally { base.OnStop( ); } } // // Summary: // Raises service stopping event to registered handlers. // protected virtual void OnStopping() { if( null != Stopping ) { Stopping( this, new EventArgs() ); } } // // Summary: // Called whenever something changes about the TS Sessions on the machine. // protected override void OnSessionChange( SessionChangeDescription changeDescription ) { // // If this is a SessionLogOff then we want to make sure that we shut down any UIAgents in that session. // This prevents any following users from logging in and seeing the ui from the previous user of that // session. // if( System.ServiceProcess.SessionChangeReason.SessionLogoff == changeDescription.Reason ) { InfoCardUIAgent.OnLogout( (uint)changeDescription.SessionId ); } } // // Summary: // Called when an unrecoverable error has occurred. // static public void Crash() { InfoCardService.Crash( null ); } // // Summary: // Called when an unrecoverable error has occurred. // Log that something awful happened, and failfast the process. // // Parameters: // e - The exception that is at the root of the unrecoverable error. This is logged to the // debug output stream. // static public void Crash( Exception e ) { #if DEBUG Debugger.Log( 0, "", SR.GetString( SR.ServiceEncounteredFatalError ) ); string failFastMessage; if ( null != e ) { Debugger.Log( 0, "", e.ToString() ); IDT.TraceDebug( "Fatal exception - terminating service {0} ({1})\n{2}", e.Message, e.Source, e.StackTrace ); failFastMessage = e.Message; } else { failFastMessage = SR.GetString( SR.ServiceCrashedWithoutException ); } if( Debugger.IsAttached ) { Debugger.Launch(); Debugger.Break(); } Microsoft.InfoCards.Diagnostics.InfoCardTrace.FailFast( failFastMessage ); Environment.Exit( 1 ); #else IDT.FailFast( e.Message ); #endif } } } // 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
- PageCatalogPart.cs
- StylusEventArgs.cs
- OutputCacheProfile.cs
- HtmlListAdapter.cs
- ComplusEndpointConfigContainer.cs
- GraphicsPath.cs
- XamlUtilities.cs
- DataContractJsonSerializerOperationFormatter.cs
- ApplicationFileCodeDomTreeGenerator.cs
- SoapMessage.cs
- Int32Collection.cs
- XamlSerializationHelper.cs
- MemoryRecordBuffer.cs
- FtpRequestCacheValidator.cs
- HybridDictionary.cs
- Base64Decoder.cs
- RtfControlWordInfo.cs
- Translator.cs
- AnimationException.cs
- Encoder.cs
- BindingValueChangedEventArgs.cs
- VirtualizingPanel.cs
- DbProviderServices.cs
- FormsAuthenticationConfiguration.cs
- assemblycache.cs
- JournalEntryListConverter.cs
- RotateTransform.cs
- FileDetails.cs
- ChannelCacheDefaults.cs
- Base64WriteStateInfo.cs
- PrinterResolution.cs
- RowParagraph.cs
- ProxyWebPartManagerDesigner.cs
- WindowsAuthenticationEventArgs.cs
- SafeArrayTypeMismatchException.cs
- XpsFilter.cs
- InstancePersistenceContext.cs
- DataSourceBooleanViewSchemaConverter.cs
- ChangeNode.cs
- FacetValues.cs
- DataBoundControl.cs
- Expander.cs
- WebConvert.cs
- RegexInterpreter.cs
- Cell.cs
- StyleHelper.cs
- SafeNativeMethods.cs
- TemplateComponentConnector.cs
- ImageMapEventArgs.cs
- XsdDataContractExporter.cs
- TextEditorTyping.cs
- OutputCacheSection.cs
- SchemaNames.cs
- ColorTranslator.cs
- PersonalizationStateInfoCollection.cs
- UserControlAutomationPeer.cs
- ColorConvertedBitmap.cs
- SectionInformation.cs
- ObjectQuery_EntitySqlExtensions.cs
- FontStretchConverter.cs
- ReflectionUtil.cs
- SafeArchiveContext.cs
- HttpRequestCacheValidator.cs
- DodSequenceMerge.cs
- PageDeviceFont.cs
- WindowsComboBox.cs
- SqlTrackingService.cs
- TypeEnumerableViewSchema.cs
- GenericIdentity.cs
- TargetParameterCountException.cs
- StructuredType.cs
- InlinedAggregationOperatorEnumerator.cs
- IOThreadScheduler.cs
- X509Extension.cs
- DataGridViewLinkCell.cs
- FlowDocumentPageViewerAutomationPeer.cs
- ExpressionParser.cs
- ConfigXmlElement.cs
- ClientTargetSection.cs
- SHA512.cs
- AutomationTextAttribute.cs
- FixedSOMPageElement.cs
- PriorityBindingExpression.cs
- LexicalChunk.cs
- MetadataItemCollectionFactory.cs
- RegistrationServices.cs
- XmlDomTextWriter.cs
- SerialStream.cs
- PartialCachingAttribute.cs
- DrawingBrush.cs
- Int32Storage.cs
- ControlBuilderAttribute.cs
- Timeline.cs
- XmlSchemaAny.cs
- TextModifierScope.cs
- SmtpFailedRecipientException.cs
- CmsUtils.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- DatagridviewDisplayedBandsData.cs
- Stylesheet.cs