Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / 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: 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
- AutomationElement.cs
- SoapSchemaExporter.cs
- ModifierKeysValueSerializer.cs
- EventListenerClientSide.cs
- PropertyGridView.cs
- DocobjHost.cs
- StandardBindingImporter.cs
- DataControlFieldCollection.cs
- UrlMapping.cs
- NetStream.cs
- ToolStripItemEventArgs.cs
- ButtonFieldBase.cs
- UserUseLicenseDictionaryLoader.cs
- ActiveXHelper.cs
- Pts.cs
- ConfigXmlText.cs
- RectangleConverter.cs
- httpapplicationstate.cs
- ArgumentValidation.cs
- CreatingCookieEventArgs.cs
- DisplayInformation.cs
- InputBinder.cs
- MenuItemAutomationPeer.cs
- DiffuseMaterial.cs
- RowUpdatedEventArgs.cs
- XamlSerializerUtil.cs
- Ref.cs
- ButtonField.cs
- ShaperBuffers.cs
- RootBuilder.cs
- KernelTypeValidation.cs
- FormViewAutoFormat.cs
- PublisherMembershipCondition.cs
- Condition.cs
- FileNotFoundException.cs
- SqlSupersetValidator.cs
- XpsPartBase.cs
- PointIndependentAnimationStorage.cs
- BaseTemplateCodeDomTreeGenerator.cs
- HealthMonitoringSectionHelper.cs
- Timeline.cs
- FileNotFoundException.cs
- DriveInfo.cs
- BindingMAnagerBase.cs
- DataColumnPropertyDescriptor.cs
- ContainerUIElement3D.cs
- SecurityCriticalDataForSet.cs
- DbSourceParameterCollection.cs
- MetadataHelper.cs
- GridViewColumn.cs
- SHA256Managed.cs
- IconHelper.cs
- XmlNamespaceManager.cs
- ParameterElement.cs
- XmlUrlResolver.cs
- PrimitiveType.cs
- DivideByZeroException.cs
- ExpressionBuilderContext.cs
- WinCategoryAttribute.cs
- ObjectDataSourceMethodEventArgs.cs
- WizardStepBase.cs
- Pointer.cs
- ImageButton.cs
- XmlObjectSerializer.cs
- IntPtr.cs
- ToolTipService.cs
- Int32RectValueSerializer.cs
- SupportingTokenDuplexChannel.cs
- TypeSystemProvider.cs
- TextEmbeddedObject.cs
- PersonalizationState.cs
- BitmapEffectGroup.cs
- Span.cs
- XslCompiledTransform.cs
- PrimarySelectionGlyph.cs
- ListItemConverter.cs
- KnownTypeDataContractResolver.cs
- SingleObjectCollection.cs
- login.cs
- HostedAspNetEnvironment.cs
- BoolExpr.cs
- FileSecurity.cs
- GridViewUpdateEventArgs.cs
- HTTPRemotingHandler.cs
- PrintEvent.cs
- ListBoxChrome.cs
- FontStretch.cs
- ArithmeticException.cs
- EventSetter.cs
- SqlMethodTransformer.cs
- SqlRecordBuffer.cs
- FixUp.cs
- PagedDataSource.cs
- DocComment.cs
- OdbcReferenceCollection.cs
- FunctionImportMapping.cs
- NativeCppClassAttribute.cs
- TextSelectionHighlightLayer.cs
- FactoryId.cs
- SortDescriptionCollection.cs