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
- DataBindingExpressionBuilder.cs
- StateWorkerRequest.cs
- Converter.cs
- SubMenuStyle.cs
- BulletedList.cs
- PropertyConverter.cs
- RowSpanVector.cs
- PageBuildProvider.cs
- TypeBrowser.xaml.cs
- SequentialOutput.cs
- FragmentNavigationEventArgs.cs
- Timer.cs
- X500Name.cs
- StyleCollectionEditor.cs
- CircleHotSpot.cs
- ReferentialConstraint.cs
- WindowInteropHelper.cs
- QilInvoke.cs
- WebResponse.cs
- ImageInfo.cs
- Span.cs
- DBConcurrencyException.cs
- Transform.cs
- PnrpPeerResolverElement.cs
- ElapsedEventArgs.cs
- SourceFilter.cs
- UIElement3D.cs
- MethodBuilderInstantiation.cs
- InvalidDataContractException.cs
- SetterBaseCollection.cs
- Selection.cs
- ITextView.cs
- ListViewDeleteEventArgs.cs
- HttpCookiesSection.cs
- ProfileProvider.cs
- PackWebRequest.cs
- Adorner.cs
- ObsoleteAttribute.cs
- RayHitTestParameters.cs
- DispatchChannelSink.cs
- CompositeDuplexElement.cs
- ToolStripSeparator.cs
- ToolStripDropDownMenu.cs
- DnsPermission.cs
- CollectionChangeEventArgs.cs
- CheckBoxList.cs
- FatalException.cs
- WebService.cs
- DataGridViewRowPostPaintEventArgs.cs
- ToolboxItemFilterAttribute.cs
- XsdBuildProvider.cs
- ConsoleKeyInfo.cs
- DllNotFoundException.cs
- MethodRental.cs
- BrowserCapabilitiesFactory.cs
- RelatedPropertyManager.cs
- RuntimeVariableList.cs
- BindingManagerDataErrorEventArgs.cs
- WsatTransactionFormatter.cs
- CustomAttributeBuilder.cs
- Pens.cs
- CodeNamespace.cs
- AppDomain.cs
- GenericUriParser.cs
- UncommonField.cs
- HebrewNumber.cs
- ConditionValidator.cs
- ChannelSinkStacks.cs
- NameTable.cs
- GridLength.cs
- CounterSample.cs
- EventOpcode.cs
- CollectionView.cs
- NetNamedPipeSecurity.cs
- xml.cs
- ServiceManager.cs
- SocketElement.cs
- DataListCommandEventArgs.cs
- AuthorizationRule.cs
- DrawingAttributeSerializer.cs
- ToolboxItemWrapper.cs
- ValidationErrorCollection.cs
- Encoder.cs
- DataKeyArray.cs
- AddInServer.cs
- MsiStyleLogWriter.cs
- GeneralTransform2DTo3DTo2D.cs
- TTSEngineProxy.cs
- SupportingTokenSecurityTokenResolver.cs
- CqlErrorHelper.cs
- DetailsViewUpdatedEventArgs.cs
- Model3DGroup.cs
- IntSecurity.cs
- DataGridTextBoxColumn.cs
- AccessedThroughPropertyAttribute.cs
- CodeCastExpression.cs
- TransactionContextValidator.cs
- ControlType.cs
- PageWrapper.cs
- TemplateBuilder.cs