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
- DBSchemaRow.cs
- InvokeMethod.cs
- DefaultShape.cs
- EdmMember.cs
- DataReceivedEventArgs.cs
- DiscreteKeyFrames.cs
- DisableDpiAwarenessAttribute.cs
- DynamicPropertyReader.cs
- ItemsChangedEventArgs.cs
- SerializationObjectManager.cs
- GridItemPatternIdentifiers.cs
- EmptyEnumerable.cs
- LinkUtilities.cs
- ResourceProperty.cs
- DataGridViewTopRowAccessibleObject.cs
- Activator.cs
- DbConnectionPoolOptions.cs
- AppDomainManager.cs
- ResourceKey.cs
- XmlNullResolver.cs
- TraceContext.cs
- KnownAssemblyEntry.cs
- CompositeFontInfo.cs
- GeometryDrawing.cs
- AudioLevelUpdatedEventArgs.cs
- SizeValueSerializer.cs
- DataColumnPropertyDescriptor.cs
- SByte.cs
- ContentAlignmentEditor.cs
- safelinkcollection.cs
- SystemIPGlobalProperties.cs
- DrawingCollection.cs
- PenThread.cs
- APCustomTypeDescriptor.cs
- EnumerableWrapperWeakToStrong.cs
- EntityDataSourceChangedEventArgs.cs
- SupportsEventValidationAttribute.cs
- CallSite.cs
- SystemSounds.cs
- InvalidWMPVersionException.cs
- VariableAction.cs
- BindingMemberInfo.cs
- PartitionedDataSource.cs
- SqlUDTStorage.cs
- InputElement.cs
- LinkConverter.cs
- LinkConverter.cs
- ConfigurationSectionGroup.cs
- NestedContainer.cs
- CustomPopupPlacement.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- CodeSnippetCompileUnit.cs
- Function.cs
- VisualStyleTypesAndProperties.cs
- SignatureToken.cs
- ParserHooks.cs
- TraceProvider.cs
- TagNameToTypeMapper.cs
- Int32Rect.cs
- Native.cs
- AppDomainFactory.cs
- Int64Converter.cs
- DBSqlParserTableCollection.cs
- WebPartsPersonalizationAuthorization.cs
- ArraySubsetEnumerator.cs
- CodePrimitiveExpression.cs
- CapabilitiesState.cs
- WindowsButton.cs
- PauseStoryboard.cs
- wmiprovider.cs
- TrackingLocationCollection.cs
- PrimitiveType.cs
- EntityDataSourceColumn.cs
- Main.cs
- XmlStreamStore.cs
- JsonReaderWriterFactory.cs
- ObjectConverter.cs
- XMLSyntaxException.cs
- GridItemPattern.cs
- WSSecureConversationFeb2005.cs
- xdrvalidator.cs
- SamlAuthorityBinding.cs
- CommandDesigner.cs
- CapabilitiesState.cs
- WmlCalendarAdapter.cs
- ActiveDesignSurfaceEvent.cs
- ItemCollection.cs
- TranslateTransform3D.cs
- DataViewManager.cs
- AggregateNode.cs
- DBSchemaTable.cs
- SmtpNegotiateAuthenticationModule.cs
- ButtonStandardAdapter.cs
- CompilerWrapper.cs
- PlatformNotSupportedException.cs
- AnnotationService.cs
- UnlockCardRequest.cs
- PrintingPermission.cs
- DateTimeConstantAttribute.cs
- OdbcConnection.cs