Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / MS / Internal / TextFormatting / TextPenaltyModule.cs / 1 / TextPenaltyModule.cs
//------------------------------------------------------------------------ // // Microsoft Windows Client Platform // Copyright (C) Microsoft Corporation // // File: TextPenaltyModule.cs // // Contents: Critical handle wrapping unmanaged text penalty module for // penalty calculation of optimal paragraph vis PTS direct access. // // Spec: [....]/sites/Avalon/Specs/Text%20Formatting%20API.doc // // Created: 4-4-2006 [....] ([....]) // //----------------------------------------------------------------------- using System; using System.Security; using System.Windows.Media; using System.Windows.Media.TextFormatting; using System.Runtime.InteropServices; using MS.Internal.PresentationCore; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; namespace MS.Internal.TextFormatting { ////// Critical handle wrapper of unmanaged text penalty module. This class /// is used exclusively by Framework thru friend-access. It provides direct /// access to the underlying dangerous handle to the unmanaged resource whose /// lifetime is bound to the the underlying LS context. /// [FriendAccessAllowed] // used by Framework internal sealed class TextPenaltyModule : IDisposable { private SecurityCriticalDataForSet_ploPenaltyModule; // Pointer to LS penalty module private bool _isDisposed; /// /// This constructor is called by PInvoke when returning the critical handle /// ////// Critical - as this calls the setter of _ploPenaltyModule. /// Safe - as it does not set the value arbitrarily from the value it receives from caller. /// [SecurityCritical, SecurityTreatAsSafe] internal TextPenaltyModule(SecurityCriticalDataForSetploc) { IntPtr ploPenaltyModule; LsErr lserr = UnsafeNativeMethods.LoAcquirePenaltyModule(ploc.Value, out ploPenaltyModule); if (lserr != LsErr.None) { TextFormatterContext.ThrowExceptionFromLsError(SR.Get(SRID.AcquirePenaltyModuleFailure, lserr), lserr); } _ploPenaltyModule.Value = ploPenaltyModule; } /// /// Finalize penalty module /// ~TextPenaltyModule() { Dispose(false); } ////// Explicitly clean up penalty module /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ////// Critical - as this calls method to dispose unmanaged penalty module. /// Safe - as it does not arbitrarily set critical data. /// [SecurityCritical, SecurityTreatAsSafe] private void Dispose(bool disposing) { if (_ploPenaltyModule.Value != IntPtr.Zero) { UnsafeNativeMethods.LoDisposePenaltyModule(_ploPenaltyModule.Value); _ploPenaltyModule.Value = IntPtr.Zero; _isDisposed = true; GC.KeepAlive(this); } } ////// This method should only be called by Framework to authorize direct access to /// unsafe LS penalty module for exclusive use of PTS during optimal paragraph /// penalty calculation. /// ////// Critical - as this returns pointer to unmanaged memory owned by LS. /// [SecurityCritical] internal IntPtr DangerousGetHandle() { if (_isDisposed) { throw new ObjectDisposedException(SR.Get(SRID.TextPenaltyModuleHasBeenDisposed)); } IntPtr penaltyModuleInternalHandle; LsErr lserr = UnsafeNativeMethods.LoGetPenaltyModuleInternalHandle(_ploPenaltyModule.Value, out penaltyModuleInternalHandle); if (lserr != LsErr.None) TextFormatterContext.ThrowExceptionFromLsError(SR.Get(SRID.GetPenaltyModuleHandleFailure, lserr), lserr); GC.KeepAlive(this); return penaltyModuleInternalHandle; } } } // 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
- WebRequestModulesSection.cs
- StatusBarItem.cs
- SqlStatistics.cs
- AlternateViewCollection.cs
- PageAdapter.cs
- HTMLTagNameToTypeMapper.cs
- followingsibling.cs
- PanningMessageFilter.cs
- CreateUserErrorEventArgs.cs
- TimeSpan.cs
- TextTreePropertyUndoUnit.cs
- BamlMapTable.cs
- ConnectionStringsExpressionBuilder.cs
- DataGridTableCollection.cs
- SqlTypeSystemProvider.cs
- GradientStop.cs
- SimpleWebHandlerParser.cs
- CodeRemoveEventStatement.cs
- XmlAttributeHolder.cs
- LocalizableResourceBuilder.cs
- BindingList.cs
- PriorityItem.cs
- ComponentChangingEvent.cs
- GridViewRowPresenter.cs
- ProfilePropertyMetadata.cs
- ModuleConfigurationInfo.cs
- fixedPageContentExtractor.cs
- AutomationTextAttribute.cs
- UIntPtr.cs
- WindowsFormsHostPropertyMap.cs
- UTF32Encoding.cs
- ColorTransform.cs
- LabelLiteral.cs
- BamlLocalizationDictionary.cs
- PseudoWebRequest.cs
- ParagraphVisual.cs
- ComponentEvent.cs
- StreamWithDictionary.cs
- WebPartsSection.cs
- BitmapEffectDrawing.cs
- LinqDataSource.cs
- Exceptions.cs
- InputProcessorProfilesLoader.cs
- HMACSHA512.cs
- GeneratedView.cs
- InstanceDescriptor.cs
- BeginStoryboard.cs
- CacheDependency.cs
- AuthenticationSection.cs
- ObjectManager.cs
- ZipPackage.cs
- CodeDomConfigurationHandler.cs
- MD5.cs
- PaintEvent.cs
- ImageList.cs
- GPPOINT.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- ToggleProviderWrapper.cs
- HwndSource.cs
- Listbox.cs
- DesignColumnCollection.cs
- LookupBindingPropertiesAttribute.cs
- TextPenaltyModule.cs
- MembershipAdapter.cs
- APCustomTypeDescriptor.cs
- DataSysAttribute.cs
- XslTransform.cs
- XamlBuildTaskServices.cs
- Form.cs
- UseLicense.cs
- DisplayNameAttribute.cs
- OleDbCommandBuilder.cs
- FlowNode.cs
- MappingException.cs
- PenThreadPool.cs
- GeometryHitTestParameters.cs
- PostBackOptions.cs
- TableLayoutPanel.cs
- PageCache.cs
- HyperlinkAutomationPeer.cs
- RouteParametersHelper.cs
- FontFaceLayoutInfo.cs
- XmlSchemaAttribute.cs
- PartitionResolver.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- BmpBitmapDecoder.cs
- ECDiffieHellmanCngPublicKey.cs
- AuthorizationRule.cs
- EditingMode.cs
- SecUtil.cs
- SqlRowUpdatedEvent.cs
- Int32.cs
- BindingRestrictions.cs
- StrokeIntersection.cs
- UrlPath.cs
- XmlCountingReader.cs
- remotingproxy.cs
- WebPartDisplayModeCollection.cs
- httpapplicationstate.cs
- BaseParaClient.cs