Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / TrustUi / MS / Internal / documents / Application / CriticalFileToken.cs / 1 / CriticalFileToken.cs
//------------------------------------------------------------------------------ //// Copyright (C) Microsoft Corporation. All rights reserved. // //// The CriticalFileToken class ensures file represented is the one the // user has authorized us to manipulate. // // // History: // 08/28/2005: [....]: Initial implementation. //----------------------------------------------------------------------------- using System; using System.Security; using System.Security.Permissions; using MS.Internal.PresentationUI; namespace MS.Internal.Documents.Application { ////// The CriticalFileToken class ensures file represented is the one the /// user has authorized us to manipulate. /// ////// Responsibility: /// Allow XpsViewer to safely pass around information on which file the user /// has authorized us to manipulate on thier behalf. Ensure that the creator /// of the object has the privledge to manipulate the file represented. /// /// Design Comments: /// Many classes need to perform privledged operations files on behalf of the /// user. However only DocObjHost and FilePresentation can assert it is user /// sourced data. /// /// As such we need them to create this 'token' which will will use as the only /// source of authoritative information for which files we are manipulating. /// /// As any SecurityCritical code can create SecurityCriticalData, we add the /// demand for FileIOPermission that represents the rights that will be asserted /// for in conjuction with this data. /// [FriendAccessAllowed] internal sealed class CriticalFileToken { #region Constructors //------------------------------------------------------------------------- // Constructors //------------------------------------------------------------------------- ////// Critical: /// - as this sets the _location which is Critical. /// TreatAsSafe: /// - the caller already has the value /// - the caller must satisfy the demand which this token grants /// [SecurityCritical, SecurityTreatAsSafe] internal CriticalFileToken(Uri location) { string path = location.LocalPath; new FileIOPermission( FileIOPermissionAccess.Read | FileIOPermissionAccess.Write, path) .Demand(); _location = location; } #endregion Constructors #region Object Members //-------------------------------------------------------------------------- // Object Members //------------------------------------------------------------------------- ////// Compares the values. /// ///True if they are equal. ////// Critical: /// - accesses _location /// TreatAsSafe: /// - does not leak information, simple compares to values the caller /// already had /// [SecurityCritical, SecurityTreatAsSafe] public static bool operator ==(CriticalFileToken a, CriticalFileToken b) { bool result = false; if (((object)a) == null) { if (((object)b) == null) { result = true; } } else { if (((object)b) != null) { result = a._location.ToString().Equals( b._location.ToString(), StringComparison.OrdinalIgnoreCase); } } return result; } ////// Compares the values. /// public static bool operator !=(CriticalFileToken a, CriticalFileToken b) { return !(a==b); } ////// Compares the values. /// public override bool Equals(object obj) { return (this == (obj as CriticalFileToken)); } ////// See Object.GetHashCode(); /// public override int GetHashCode() { return base.GetHashCode(); } #endregion Object Members #region Internal Properties //-------------------------------------------------------------------------- // Internal Properties //-------------------------------------------------------------------------- ////// The location for which the creator satisfied ReadWrite access. /// ////// Critical: /// - the location is sensitive data; it could leak information /// about the system; file structure, OS and user. /// internal Uri Location { [SecurityCritical] get { return _location; } } #endregion Internal Properties #region Private Fields //------------------------------------------------------------------------- // Private Fields //-------------------------------------------------------------------------- ////// Critical - by definition as this is a wrapper for Critical data. /// [SecurityCritical] private Uri _location; #endregion Private Fields } } // 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
- Compiler.cs
- MailWriter.cs
- RegexWriter.cs
- DataGridViewCellConverter.cs
- LocationFactory.cs
- WindowsListViewSubItem.cs
- XmlName.cs
- QueryOperationResponseOfT.cs
- SchemaManager.cs
- IdentityManager.cs
- XmlDocumentFragment.cs
- HttpWriter.cs
- DataControlButton.cs
- BufferedReceiveManager.cs
- ValidateNames.cs
- SqlClientPermission.cs
- ContentDefinition.cs
- COMException.cs
- ContentFileHelper.cs
- NavigationProperty.cs
- XmlToDatasetMap.cs
- ContextMarshalException.cs
- IProvider.cs
- TdsParserStateObject.cs
- PageCodeDomTreeGenerator.cs
- TrackingMemoryStreamFactory.cs
- SelectedDatesCollection.cs
- MenuCommand.cs
- AsyncOperationManager.cs
- InternalException.cs
- RegularExpressionValidator.cs
- ResourceAssociationSet.cs
- Stroke.cs
- ValueUnavailableException.cs
- ConsumerConnectionPointCollection.cs
- WsdlInspector.cs
- GroupItem.cs
- ThreadStartException.cs
- SmiXetterAccessMap.cs
- COM2ComponentEditor.cs
- UserControl.cs
- PnrpPermission.cs
- TypographyProperties.cs
- PeerMessageDispatcher.cs
- OpCodes.cs
- StrongName.cs
- CommonGetThemePartSize.cs
- TextContainerChangedEventArgs.cs
- ContainerParagraph.cs
- TransformerConfigurationWizardBase.cs
- VideoDrawing.cs
- CommonXSendMessage.cs
- ServiceDescriptionImporter.cs
- SmiEventSink.cs
- Completion.cs
- PrivateFontCollection.cs
- HttpProfileBase.cs
- TimestampInformation.cs
- InputScopeManager.cs
- SessionStateUtil.cs
- GZipStream.cs
- XmlTextReader.cs
- SessionIDManager.cs
- HMACSHA512.cs
- DataGridViewRowPrePaintEventArgs.cs
- TypeDescriptionProvider.cs
- ChtmlTextBoxAdapter.cs
- SmtpException.cs
- TextChangedEventArgs.cs
- HelloMessageCD1.cs
- ContentElement.cs
- TextPenaltyModule.cs
- CompilerTypeWithParams.cs
- CellParaClient.cs
- InvalidDataContractException.cs
- DataDocumentXPathNavigator.cs
- Header.cs
- GrammarBuilder.cs
- PerformanceCounterTraceRecord.cs
- XmlCodeExporter.cs
- ExpressionContext.cs
- BmpBitmapEncoder.cs
- TypeToArgumentTypeConverter.cs
- HandlerWithFactory.cs
- Utils.cs
- BitmapImage.cs
- PreservationFileReader.cs
- DataGridTextBoxColumn.cs
- RowToFieldTransformer.cs
- ColumnBinding.cs
- DependencyPropertyConverter.cs
- FormViewPageEventArgs.cs
- EditableTreeList.cs
- SystemMulticastIPAddressInformation.cs
- DurableInstanceContextProvider.cs
- OutputScopeManager.cs
- WinFormsSpinner.cs
- StrongNameMembershipCondition.cs
- ProxyWebPartManagerDesigner.cs
- COAUTHIDENTITY.cs