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
- LicFileLicenseProvider.cs
- RemotingAttributes.cs
- WebPartVerbsEventArgs.cs
- ThemeDirectoryCompiler.cs
- ImageFormat.cs
- WindowsListViewItem.cs
- DataContractSerializer.cs
- NetPeerTcpBindingCollectionElement.cs
- isolationinterop.cs
- Renderer.cs
- GridEntryCollection.cs
- DataGridViewTopLeftHeaderCell.cs
- DefaultExpression.cs
- SelectionEditor.cs
- NameObjectCollectionBase.cs
- LookupNode.cs
- SqlDependency.cs
- ResizeGrip.cs
- PerformanceCounterManager.cs
- ProxyHwnd.cs
- ConditionalAttribute.cs
- Base64Stream.cs
- HtmlInputPassword.cs
- WebBrowserNavigatingEventHandler.cs
- VirtualizedItemPattern.cs
- listitem.cs
- SymbolType.cs
- IssuedTokenClientElement.cs
- Decimal.cs
- CompModSwitches.cs
- PagePropertiesChangingEventArgs.cs
- PersonalizationAdministration.cs
- StickyNoteAnnotations.cs
- ToolStripStatusLabel.cs
- Environment.cs
- WebPartConnection.cs
- Decimal.cs
- QueryableDataSourceHelper.cs
- NamespaceQuery.cs
- Annotation.cs
- MarkupCompilePass1.cs
- Token.cs
- LoopExpression.cs
- OpCellTreeNode.cs
- ClientBuildManager.cs
- XamlDesignerSerializationManager.cs
- SortDescriptionCollection.cs
- AmbiguousMatchException.cs
- MetadataCacheItem.cs
- mediaclock.cs
- EntityClassGenerator.cs
- TdsEnums.cs
- DataGridViewRowsRemovedEventArgs.cs
- CacheEntry.cs
- ClientSettingsProvider.cs
- XmlHierarchicalDataSourceView.cs
- FilterEventArgs.cs
- IsolatedStorage.cs
- EnvelopedPkcs7.cs
- BrowserTree.cs
- ResourceAttributes.cs
- BookmarkOptionsHelper.cs
- RenderData.cs
- Focus.cs
- CodeTypeMemberCollection.cs
- DesignBindingPicker.cs
- Hex.cs
- CultureInfoConverter.cs
- XPathSelectionIterator.cs
- InstanceCreationEditor.cs
- CompilerState.cs
- CompiledQuery.cs
- SessionState.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- mediaclock.cs
- LinkAreaEditor.cs
- TransactionManagerProxy.cs
- BitmapCache.cs
- Internal.cs
- RoleManagerSection.cs
- entityreference_tresulttype.cs
- FileSecurity.cs
- DynamicPropertyReader.cs
- PageBreakRecord.cs
- EmptyStringExpandableObjectConverter.cs
- ReadOnlyCollectionBase.cs
- FlowchartStart.xaml.cs
- WebPartMenu.cs
- StylusPoint.cs
- SimpleType.cs
- ObjectItemCollection.cs
- DataGridViewSortCompareEventArgs.cs
- bindurihelper.cs
- Oci.cs
- BamlRecordReader.cs
- ClientTargetCollection.cs
- StorageConditionPropertyMapping.cs
- DefaultTextStore.cs
- HttpListenerRequestTraceRecord.cs
- Size3DValueSerializer.cs