Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / ListCardsInFileRequest.cs / 1 / ListCardsInFileRequest.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace Microsoft.InfoCards { using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Security.Cryptography; using System.Xml.Schema; using IDT = Microsoft.InfoCards.Diagnostics.InfoCardTrace; // // Open the file using the password and retrieves all the cards // in an import file. // class ListCardsInFileRequest :UIAgentRequest { InfoCardPolicy m_policy; RoamingStoreFile m_roamingFile; string m_filename; string m_passphrase; public ListCardsInFileRequest( IntPtr rpcHandle, Stream inArgs, Stream outArgs, ClientUIRequest parent ) : base( rpcHandle, inArgs, outArgs, parent ) { m_roamingFile = new RoamingStoreFile(); } protected override void OnInitializeAsSystem() { base.OnInitializeAsSystem(); m_policy = GetPolicy(); } // // Summary // Read the marshalled arguments // protected override void OnMarshalInArgs() { BinaryReader reader = new InfoCardBinaryReader( InArgs, System.Text.Encoding.Unicode ); m_filename = Utility.DeserializeString( reader ); m_passphrase = Utility.DeserializeString( reader ); } // // Summary // Read the list of cards from the store // protected override void OnProcess() { // // clean up any existing card data. // Cleanup(false,true); try { try { try { using ( FileStream fileStream = new FileStream( m_filename, FileMode.Open, FileAccess.Read, FileShare.Read ) ) { // // Use a stream that validates the xml against internally stored schemas. // XmlReaderSettings settings = InfoCardSchemas.CreateDefaultReaderSettings(); settings.IgnoreWhitespace = false; using ( XmlReader reader = InfoCardSchemas.CreateReader( fileStream, settings ) ) { IDT.TraceDebug( " Roaming: Decrypting the roaming store" ); m_roamingFile.ReadFrom( m_passphrase, reader ); // // Store a pointer to the original content from the file. // this is the content that contains the private key info // for each infocard. This is required as persist time. // ParentRequest.SetContext( m_roamingFile ); } } } catch( ImportException ) { throw; } catch ( CryptographicException e ) { throw IDT.ThrowHelperError( new PasswordValidationException( SR.GetString( SR.InvalidImportFile ), e ) ); } catch ( XmlSchemaValidationException e ) { throw IDT.ThrowHelperError( new ImportException( SR.GetString( SR.SchemaValidationFailed ), e ) ); } catch ( UnauthorizedAccessException e ) { throw IDT.ThrowHelperError( new ImportException( SR.GetString( SR.ImportInaccesibleFile ), e ) ); } catch ( IOException e ) { throw IDT.ThrowHelperError( new ImportException( SR.GetString( SR.InvalidImportFile ), e ) ); } catch ( XmlException e ) { throw IDT.ThrowHelperError( new ImportException( SR.GetString( SR.InvalidImportFile ), e ) ); } } catch ( ImportException ie ) { // // clear the cards, pwd will be cleared below. // Cleanup(false, true); // // Translate ImportException to ImportStoreException since this is a .crds file // // // Using ie.Message as opposed to SR.GetString( SR.InvalidStoreImportFile ) // for more accurate error information. // throw IDT.ThrowHelperError( new ImportStoreException( ie.Message ) ); } } finally { // // clear the pwd not the cards // Cleanup(true, false); } } // // Summary // Write the cards to the stream to be returned // protected override void OnMarshalOutArgs() { Stream stream = OutArgs; BinaryWriter writer = new BinaryWriter( stream ); StoreConnection connection = StoreConnection.GetConnection(); try { if( null != m_roamingFile && 0 != m_roamingFile.Cards.Count ) { IDT.TraceDebug( " Roaming: Returning {0} cards to the UI", m_roamingFile.Cards.Count ); // // write the count of the array. // try { writer.Write( m_roamingFile.Cards.Count ); for( int i = 0; i < m_roamingFile.Cards.Count; i++ ) { // // Flush the writer to ensure that all data // is committed to the base stream before // we pass the base stream into the card. // writer.Flush(); m_roamingFile.Cards[ i ].AgentSerialize( stream, ( ParentRequest is GetTokenRequest ), m_policy, connection, new System.Globalization.CultureInfo( ParentRequest.UserLanguage ) ); } } catch( Exception e ) { Cleanup( true, true ); if( IDT.IsFatal( e ) ) { throw; } throw IDT.ThrowHelperError( new ImportStoreException( SR.GetString( SR.InvalidImportFile ), e ) ); } } else { // // write the count of the array as 0. // writer.Write( 0 ); } } finally { connection.Close(); } } // // Summary: Clear out sensitive data present in an infocard // private void Cleanup( bool clearPwd, bool clearRoamingFile ) { if( clearRoamingFile ) { if( null != m_roamingFile ) { m_roamingFile.Clear(); } if( null != ParentRequest ) { ParentRequest.ClearContext (); } } if( clearPwd ) { m_passphrase = null; } } } } // 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
- ToolboxItem.cs
- Point3DCollection.cs
- ListChangedEventArgs.cs
- ViewPort3D.cs
- EventLogQuery.cs
- TextBoxRenderer.cs
- Model3DGroup.cs
- RealizationDrawingContextWalker.cs
- InputScopeConverter.cs
- CommonRemoteMemoryBlock.cs
- WebPartConnectionCollection.cs
- SrgsElement.cs
- SafeLibraryHandle.cs
- BufferedGraphicsManager.cs
- DocumentSchemaValidator.cs
- AutomationInteropProvider.cs
- ObjectItemConventionAssemblyLoader.cs
- TemplateBindingExpressionConverter.cs
- XPathNodeHelper.cs
- RegionIterator.cs
- RegexFCD.cs
- ProfileModule.cs
- TypographyProperties.cs
- IISUnsafeMethods.cs
- DataRelation.cs
- EntityDataSourceContextCreatingEventArgs.cs
- DataServiceConfiguration.cs
- ITreeGenerator.cs
- LeaseManager.cs
- RoleGroup.cs
- PartialCachingAttribute.cs
- HtmlEmptyTagControlBuilder.cs
- HttpRequest.cs
- DbMetaDataColumnNames.cs
- CngUIPolicy.cs
- ResourceManagerWrapper.cs
- WpfSharedXamlSchemaContext.cs
- IteratorDescriptor.cs
- GridViewCancelEditEventArgs.cs
- DynamicValidator.cs
- BitmapPalette.cs
- ProxyElement.cs
- EntityContainerEmitter.cs
- TextParaClient.cs
- EnumerableCollectionView.cs
- AdapterUtil.cs
- WindowsProgressbar.cs
- Int32RectConverter.cs
- DataGridCell.cs
- TypeNameConverter.cs
- ScrollViewerAutomationPeer.cs
- AttachInfo.cs
- SqlSelectClauseBuilder.cs
- RepeaterItemCollection.cs
- HopperCache.cs
- RandomNumberGenerator.cs
- CallContext.cs
- SqlNode.cs
- DesignTimeSiteMapProvider.cs
- XmlReaderSettings.cs
- MarkupCompilePass1.cs
- CngProperty.cs
- TCPListener.cs
- COMException.cs
- VerificationAttribute.cs
- Vector3DAnimationUsingKeyFrames.cs
- NativeCppClassAttribute.cs
- SafeReversePInvokeHandle.cs
- ForwardPositionQuery.cs
- RefExpr.cs
- SkipStoryboardToFill.cs
- ContainerParaClient.cs
- UInt16Converter.cs
- SharedUtils.cs
- processwaithandle.cs
- WinFormsSecurity.cs
- XsltFunctions.cs
- JsonUriDataContract.cs
- DragEvent.cs
- FormViewCommandEventArgs.cs
- WebPartActionVerb.cs
- HtmlTableCell.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- ListViewItemMouseHoverEvent.cs
- TextServicesCompartmentEventSink.cs
- Root.cs
- ApplicationException.cs
- ConfigXmlElement.cs
- DataGridRowsPresenter.cs
- Accessors.cs
- XhtmlBasicImageAdapter.cs
- ContainerAction.cs
- RtfNavigator.cs
- TextTrailingWordEllipsis.cs
- ToolStripGripRenderEventArgs.cs
- TypeLoadException.cs
- ConnectionConsumerAttribute.cs
- RectangleHotSpot.cs
- PropertyGridView.cs
- OleDbReferenceCollection.cs