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
- ConfigurationStrings.cs
- ColumnResult.cs
- ReflectionPermission.cs
- Utils.cs
- DataGridDesigner.cs
- DefaultAssemblyResolver.cs
- ExpanderAutomationPeer.cs
- TextProperties.cs
- LockedActivityGlyph.cs
- EventTrigger.cs
- ButtonFlatAdapter.cs
- PointF.cs
- WindowsAuthenticationEventArgs.cs
- XmlLangPropertyAttribute.cs
- FormViewInsertEventArgs.cs
- FileSecurity.cs
- TabRenderer.cs
- TableParaClient.cs
- TranslateTransform3D.cs
- RowToFieldTransformer.cs
- FindCriteria11.cs
- LineGeometry.cs
- RegistrationServices.cs
- BrowserDefinitionCollection.cs
- ConnectionPointCookie.cs
- HostingPreferredMapPath.cs
- SqlRewriteScalarSubqueries.cs
- GacUtil.cs
- PrinterUnitConvert.cs
- BitmapSource.cs
- BasicViewGenerator.cs
- NetSectionGroup.cs
- SafeArrayRankMismatchException.cs
- AspNetSynchronizationContext.cs
- TextRenderingModeValidation.cs
- PageRouteHandler.cs
- ComponentDispatcher.cs
- DataGridCommandEventArgs.cs
- InfoCardHelper.cs
- DbConnectionOptions.cs
- TextDecorationCollectionConverter.cs
- FontClient.cs
- HttpRawResponse.cs
- MatrixAnimationUsingKeyFrames.cs
- CookieParameter.cs
- UntypedNullExpression.cs
- RegularExpressionValidator.cs
- DependencyProperty.cs
- Rect3DValueSerializer.cs
- SafeCertificateStore.cs
- BrushConverter.cs
- Utils.cs
- NetSectionGroup.cs
- AutoSizeComboBox.cs
- ObjectView.cs
- DataTemplateKey.cs
- DataGridViewCheckBoxCell.cs
- Pair.cs
- HttpInputStream.cs
- XmlLoader.cs
- SQLStringStorage.cs
- _FixedSizeReader.cs
- ImportedNamespaceContextItem.cs
- TrackingServices.cs
- XPathEmptyIterator.cs
- XPathConvert.cs
- HtmlInputFile.cs
- XmlDeclaration.cs
- PartialCachingControl.cs
- GroupBoxAutomationPeer.cs
- Keyboard.cs
- MissingManifestResourceException.cs
- IHttpResponseInternal.cs
- RegisteredHiddenField.cs
- ZoomPercentageConverter.cs
- TextElementEnumerator.cs
- SessionPageStateSection.cs
- SectionUpdates.cs
- VariableQuery.cs
- DeclarativeCatalogPart.cs
- ToolStripGrip.cs
- DataRelationCollection.cs
- ToolStripInSituService.cs
- FontStyleConverter.cs
- SharedPersonalizationStateInfo.cs
- SecurityHeaderTokenResolver.cs
- FormViewModeEventArgs.cs
- ConnectionStringEditor.cs
- ObjectIDGenerator.cs
- IsolationInterop.cs
- StreamWriter.cs
- TabControlAutomationPeer.cs
- FileAccessException.cs
- SmtpException.cs
- UnsafeNativeMethods.cs
- ClientUrlResolverWrapper.cs
- PowerStatus.cs
- ControlFilterExpression.cs
- BreadCrumbTextConverter.cs
- TemplateBindingExtensionConverter.cs