Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / TextFormatting / TextPenaltyModule.cs / 1305600 / 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: http://team/sites/Avalon/Specs/Text%20Formatting%20API.doc // // Created: 4-4-2006 Worachai Chaoweeraprasit (Wchao) // //----------------------------------------------------------------------- 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. //------------------------------------------------------------------------ // // 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: http://team/sites/Avalon/Specs/Text%20Formatting%20API.doc // // Created: 4-4-2006 Worachai Chaoweeraprasit (Wchao) // //----------------------------------------------------------------------- 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
- NetworkCredential.cs
- XsltOutput.cs
- EDesignUtil.cs
- ObjectDataSourceFilteringEventArgs.cs
- DiscreteKeyFrames.cs
- TTSEvent.cs
- WebBaseEventKeyComparer.cs
- EventLogEntryCollection.cs
- DoubleLinkList.cs
- ToolStripContainer.cs
- FixedStringLookup.cs
- MenuItemCollectionEditor.cs
- TaskHelper.cs
- AddressingProperty.cs
- BinaryFormatter.cs
- GrammarBuilderPhrase.cs
- UnsafeNativeMethods.cs
- TextSerializer.cs
- PostBackOptions.cs
- ButtonChrome.cs
- WebPartConnectionsConfigureVerb.cs
- CodeThrowExceptionStatement.cs
- BamlStream.cs
- CodeEventReferenceExpression.cs
- CodeTypeReferenceCollection.cs
- FormView.cs
- EntitySqlQueryCacheEntry.cs
- Win32PrintDialog.cs
- _CommandStream.cs
- HttpPostClientProtocol.cs
- XmlSchemaImport.cs
- TraceListeners.cs
- ShaderEffect.cs
- CancelAsyncOperationRequest.cs
- DataListItem.cs
- HierarchicalDataBoundControl.cs
- TextDecorationUnitValidation.cs
- shaperfactory.cs
- DataSourceHelper.cs
- DataGridColumnCollection.cs
- BezierSegment.cs
- BigInt.cs
- Label.cs
- _FtpControlStream.cs
- FontFamily.cs
- DrawingCollection.cs
- PrincipalPermission.cs
- ItemCollectionEditor.cs
- WmiInstallComponent.cs
- XmlObjectSerializerWriteContextComplex.cs
- EntitySqlQueryCacheKey.cs
- TableMethodGenerator.cs
- Parser.cs
- EventSourceCreationData.cs
- ToolboxBitmapAttribute.cs
- DrawListViewColumnHeaderEventArgs.cs
- CodeAttributeDeclarationCollection.cs
- WS2007FederationHttpBinding.cs
- formatter.cs
- VisualCollection.cs
- BlurEffect.cs
- SessionParameter.cs
- TimeSpanSecondsConverter.cs
- documentation.cs
- DefaultMemberAttribute.cs
- SAPICategories.cs
- XsltCompileContext.cs
- LinqDataSourceHelper.cs
- KeyNotFoundException.cs
- DataRowComparer.cs
- NonVisualControlAttribute.cs
- Membership.cs
- ThreadStateException.cs
- CustomWebEventKey.cs
- DefaultShape.cs
- VirtualDirectoryMapping.cs
- XmlCharCheckingReader.cs
- CheckoutException.cs
- SqlBuffer.cs
- DbDataSourceEnumerator.cs
- CustomExpressionEventArgs.cs
- DateTimeConverter2.cs
- HtmlHead.cs
- DbConnectionOptions.cs
- TargetParameterCountException.cs
- IndependentAnimationStorage.cs
- StyleModeStack.cs
- GridViewUpdateEventArgs.cs
- XmlArrayAttribute.cs
- HttpCapabilitiesEvaluator.cs
- DataTableTypeConverter.cs
- StrokeSerializer.cs
- DesignerAdapterAttribute.cs
- DbCommandTree.cs
- ComplexPropertyEntry.cs
- StructuredTypeEmitter.cs
- SQLDateTime.cs
- TableRowCollection.cs
- MappingItemCollection.cs
- RedirectionProxy.cs