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
- RelatedView.cs
- InvokeProviderWrapper.cs
- TaskHelper.cs
- storepermissionattribute.cs
- Attribute.cs
- BitVector32.cs
- IdnElement.cs
- CodeGeneratorOptions.cs
- DesignerVerbCollection.cs
- CompositeDispatchFormatter.cs
- GraphicsContext.cs
- ComponentEvent.cs
- DateTimeFormatInfo.cs
- PathGeometry.cs
- BitmapEffectInput.cs
- JulianCalendar.cs
- shaper.cs
- FamilyCollection.cs
- ToolStripSplitButton.cs
- PropertySourceInfo.cs
- Mapping.cs
- GeneralTransformGroup.cs
- ExpressionBinding.cs
- DBCommandBuilder.cs
- WebRequestModulesSection.cs
- DbgUtil.cs
- BatchParser.cs
- FloatMinMaxAggregationOperator.cs
- CodeAssignStatement.cs
- FacetDescriptionElement.cs
- GenericXmlSecurityToken.cs
- SimpleFieldTemplateFactory.cs
- SafeFileMappingHandle.cs
- SendKeys.cs
- WsatServiceAddress.cs
- DetailsViewPageEventArgs.cs
- ListBoxItem.cs
- CultureInfoConverter.cs
- DuplicateWaitObjectException.cs
- prefixendpointaddressmessagefilter.cs
- ObjectHandle.cs
- _DisconnectOverlappedAsyncResult.cs
- MessageHeaderDescription.cs
- CommandDevice.cs
- FtpWebResponse.cs
- XmlTypeMapping.cs
- SmtpSection.cs
- ThicknessConverter.cs
- RuleSettings.cs
- HtmlWindowCollection.cs
- X509Extension.cs
- Configuration.cs
- MessageDispatch.cs
- AttachedPropertyBrowsableAttribute.cs
- DES.cs
- TextBox.cs
- ObfuscationAttribute.cs
- DecimalConstantAttribute.cs
- QilValidationVisitor.cs
- Color.cs
- SecurityState.cs
- DetailsViewModeEventArgs.cs
- RadioButtonPopupAdapter.cs
- COM2IPerPropertyBrowsingHandler.cs
- messageonlyhwndwrapper.cs
- FtpWebRequest.cs
- SafeCryptHandles.cs
- ADConnectionHelper.cs
- PropertyTab.cs
- MatrixCamera.cs
- ConnectivityStatus.cs
- WebServiceTypeData.cs
- VectorKeyFrameCollection.cs
- ToolboxItemFilterAttribute.cs
- MarkupCompilePass1.cs
- ISFClipboardData.cs
- EntityTypeEmitter.cs
- OutputScopeManager.cs
- CellParaClient.cs
- UpdateRecord.cs
- PathData.cs
- Label.cs
- LinkConverter.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- PropertyNames.cs
- MulticastOption.cs
- MobileTextWriter.cs
- CompModHelpers.cs
- GlobalAclOperationRequirement.cs
- Cursor.cs
- DataGridViewCell.cs
- ResourceSetExpression.cs
- Debug.cs
- _IPv4Address.cs
- SiteMapPath.cs
- ToolStripCodeDomSerializer.cs
- GlyphRunDrawing.cs
- _ProxyChain.cs
- GenericAuthenticationEventArgs.cs
- TextEmbeddedObject.cs