Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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(SecurityCriticalDataForSet ploc)
{
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(SecurityCriticalDataForSet ploc)
{
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
- FixedTextView.cs
- WebPartRestoreVerb.cs
- PasswordDeriveBytes.cs
- SchemaAttDef.cs
- FastEncoder.cs
- QueryResponse.cs
- MultiSelectRootGridEntry.cs
- SchemaInfo.cs
- IsolatedStorageSecurityState.cs
- EncoderBestFitFallback.cs
- BufferedWebEventProvider.cs
- ControllableStoryboardAction.cs
- ProcessThread.cs
- TableCellCollection.cs
- XmlNamespaceDeclarationsAttribute.cs
- DateTimeOffsetConverter.cs
- ExtendedPropertyDescriptor.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- Preprocessor.cs
- FixedSOMFixedBlock.cs
- PolicyStatement.cs
- ListSourceHelper.cs
- GorillaCodec.cs
- EncoderParameter.cs
- XmlSchemaFacet.cs
- TypeToStringValueConverter.cs
- XmlStreamedByteStreamReader.cs
- WebPartDeleteVerb.cs
- WebExceptionStatus.cs
- ReflectPropertyDescriptor.cs
- XmlText.cs
- LineProperties.cs
- LifetimeServices.cs
- TextBoxAutoCompleteSourceConverter.cs
- ImagingCache.cs
- PlainXmlDeserializer.cs
- Interlocked.cs
- WebGetAttribute.cs
- DefaultBinder.cs
- CompilerInfo.cs
- Message.cs
- FlowPosition.cs
- DataGridViewTopRowAccessibleObject.cs
- EventDescriptor.cs
- listitem.cs
- GetWorkflowTree.cs
- AlignmentXValidation.cs
- _Connection.cs
- PassportPrincipal.cs
- FixedPosition.cs
- AnnotationComponentChooser.cs
- XmlSchemaComplexType.cs
- ObjectHandle.cs
- PropertyGeneratedEventArgs.cs
- FormConverter.cs
- TreeNode.cs
- SoapDocumentMethodAttribute.cs
- ExpressionBuilderCollection.cs
- Rect3DValueSerializer.cs
- RangeValuePattern.cs
- Image.cs
- ReadOnlyDictionary.cs
- ContentDesigner.cs
- Int32AnimationBase.cs
- dbdatarecord.cs
- DesignerAutoFormatStyle.cs
- _NegotiateClient.cs
- UpdatePanelTrigger.cs
- PieceNameHelper.cs
- ModelPropertyCollectionImpl.cs
- ElementNotAvailableException.cs
- Executor.cs
- AdRotatorDesigner.cs
- PackageFilter.cs
- PathSegmentCollection.cs
- ParseHttpDate.cs
- DashStyle.cs
- SiteMapNodeItem.cs
- SourceItem.cs
- MethodCallConverter.cs
- OuterGlowBitmapEffect.cs
- PkcsMisc.cs
- GeometryDrawing.cs
- UIInitializationException.cs
- Selection.cs
- CodeTypeReference.cs
- HtmlElementCollection.cs
- KernelTypeValidation.cs
- SafeFileHandle.cs
- StandardBindingOptionalReliableSessionElement.cs
- WebPartConnectionsDisconnectVerb.cs
- PropertyEmitterBase.cs
- SqlDataSourceView.cs
- SamlAuthorityBinding.cs
- CacheForPrimitiveTypes.cs
- TextEditorParagraphs.cs
- ViewCellSlot.cs
- HttpCookieCollection.cs
- XmlDomTextWriter.cs
- StaticResourceExtension.cs