Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Media / GlyphCache.cs / 2 / GlyphCache.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Security; using System.Text; using System.Windows; using System.Windows.Media; using System.Windows.Media.Composition; using System.Runtime.InteropServices; using MS.Internal; using MS.Internal.FontCache; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; using UnsafeNativeMethods = MS.Win32.PresentationCore.UnsafeNativeMethods; namespace System.Windows.Media { ////// Master Glyph Cache class /// internal class GlyphCache { ////// Callback delegate. /// public delegate int CreateGlyphsCallbackDelegate( IntPtr /*CMilSlaveGlyphCache | CMilSlaveGlyphRun* */ nativeObject, IntPtr /*GLYPH_BITMAP_CREATE_REQUEST | GLYPH_GEOMETRY_CREATE_REQUEST* */ request, ushort isGeometryRequest); private DUCE.Resource _duceResource = new DUCE.Resource(); private SafeReversePInvokeWrapper _reversePInvokeWrapper; internal DUCE.ResourceHandle Handle { get { return _duceResource.Handle; } } // Service channel that serves for both // pre-commit and post-commit actions internal DUCE.Channel _channel; internal void RemoveFromChannel() { if (_channel != null) { _duceResource.ReleaseOnChannel(_channel); } } ////// /// /// ////// Critical - calls critical code /// [SecurityCritical] internal GlyphCache(DUCE.Channel channel) { _channel = channel; Debug.Assert(_channel != null); _duceResource.CreateOrAddRefOnChannel(_channel, DUCE.ResourceType.TYPE_GLYPHCACHE); SendCallbackEntryPoint(); } ////// Sends a callback pointer to this glyphcache for glyph generation requests. /// ////// Critical - This code sends a pointer to unmanaged code /// [SecurityCritical] private unsafe void SendCallbackEntryPoint() { _createGlyphBitmapsCallbackDelegate = new CreateGlyphsCallbackDelegate(FontCacheAccessor.CreateGlyphsCallback); IntPtr fcn = Marshal.GetFunctionPointerForDelegate(_createGlyphBitmapsCallbackDelegate); _reversePInvokeWrapper = new SafeReversePInvokeWrapper(fcn); DUCE.MILCMD_GLYPHCACHE_SETCALLBACK cmd; cmd.Type = MILCMD.MilCmdGlyphCacheSetCallback; cmd.Handle = Handle; // AddRef the reverse p-invoke wrapper while it is being transferred across the channel. There is a // small chance we would leak the wrapper. More specifically, if the app domain is shut down before // the wrapper is picked up by the composition engine. UnsafeNativeMethods.MILUnknown.AddRef(_reversePInvokeWrapper); cmd.CallbackPointer = (UInt64)_reversePInvokeWrapper.DangerousGetHandle(); _channel.SendSecurityCriticalCommand((byte*)&cmd, sizeof(DUCE.MILCMD_GLYPHCACHE_SETCALLBACK)); } private CreateGlyphsCallbackDelegate _createGlyphBitmapsCallbackDelegate; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Security; using System.Text; using System.Windows; using System.Windows.Media; using System.Windows.Media.Composition; using System.Runtime.InteropServices; using MS.Internal; using MS.Internal.FontCache; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; using UnsafeNativeMethods = MS.Win32.PresentationCore.UnsafeNativeMethods; namespace System.Windows.Media { ////// Master Glyph Cache class /// internal class GlyphCache { ////// Callback delegate. /// public delegate int CreateGlyphsCallbackDelegate( IntPtr /*CMilSlaveGlyphCache | CMilSlaveGlyphRun* */ nativeObject, IntPtr /*GLYPH_BITMAP_CREATE_REQUEST | GLYPH_GEOMETRY_CREATE_REQUEST* */ request, ushort isGeometryRequest); private DUCE.Resource _duceResource = new DUCE.Resource(); private SafeReversePInvokeWrapper _reversePInvokeWrapper; internal DUCE.ResourceHandle Handle { get { return _duceResource.Handle; } } // Service channel that serves for both // pre-commit and post-commit actions internal DUCE.Channel _channel; internal void RemoveFromChannel() { if (_channel != null) { _duceResource.ReleaseOnChannel(_channel); } } ////// /// /// ////// Critical - calls critical code /// [SecurityCritical] internal GlyphCache(DUCE.Channel channel) { _channel = channel; Debug.Assert(_channel != null); _duceResource.CreateOrAddRefOnChannel(_channel, DUCE.ResourceType.TYPE_GLYPHCACHE); SendCallbackEntryPoint(); } ////// Sends a callback pointer to this glyphcache for glyph generation requests. /// ////// Critical - This code sends a pointer to unmanaged code /// [SecurityCritical] private unsafe void SendCallbackEntryPoint() { _createGlyphBitmapsCallbackDelegate = new CreateGlyphsCallbackDelegate(FontCacheAccessor.CreateGlyphsCallback); IntPtr fcn = Marshal.GetFunctionPointerForDelegate(_createGlyphBitmapsCallbackDelegate); _reversePInvokeWrapper = new SafeReversePInvokeWrapper(fcn); DUCE.MILCMD_GLYPHCACHE_SETCALLBACK cmd; cmd.Type = MILCMD.MilCmdGlyphCacheSetCallback; cmd.Handle = Handle; // AddRef the reverse p-invoke wrapper while it is being transferred across the channel. There is a // small chance we would leak the wrapper. More specifically, if the app domain is shut down before // the wrapper is picked up by the composition engine. UnsafeNativeMethods.MILUnknown.AddRef(_reversePInvokeWrapper); cmd.CallbackPointer = (UInt64)_reversePInvokeWrapper.DangerousGetHandle(); _channel.SendSecurityCriticalCommand((byte*)&cmd, sizeof(DUCE.MILCMD_GLYPHCACHE_SETCALLBACK)); } private CreateGlyphsCallbackDelegate _createGlyphBitmapsCallbackDelegate; } } // 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
- DocumentViewerBase.cs
- SessionStateItemCollection.cs
- XmlSchemaElement.cs
- HttpModuleActionCollection.cs
- SystemIcons.cs
- Latin1Encoding.cs
- DataSpaceManager.cs
- TraceHandlerErrorFormatter.cs
- StringAnimationBase.cs
- SignerInfo.cs
- GeneralTransform3DCollection.cs
- NonBatchDirectoryCompiler.cs
- ScriptingProfileServiceSection.cs
- DisplayInformation.cs
- RectangleF.cs
- ObjectDataSourceDisposingEventArgs.cs
- KeyedPriorityQueue.cs
- AssemblyUtil.cs
- XmlIncludeAttribute.cs
- ScrollData.cs
- _NestedSingleAsyncResult.cs
- HttpCachePolicy.cs
- CustomError.cs
- Span.cs
- XPathNodeHelper.cs
- DefaultPrintController.cs
- IsolatedStorageException.cs
- Vector3D.cs
- InternalPermissions.cs
- LiteralText.cs
- BitmapMetadata.cs
- PixelShader.cs
- PathFigure.cs
- CustomErrorsSection.cs
- _UriSyntax.cs
- Roles.cs
- PointLightBase.cs
- HttpWebRequestElement.cs
- LinkedList.cs
- Attributes.cs
- ObjectSecurity.cs
- GridViewRowEventArgs.cs
- Missing.cs
- BamlRecordHelper.cs
- DbProviderFactory.cs
- HttpUnhandledOperationInvoker.cs
- PrtCap_Public_Simple.cs
- SuppressIldasmAttribute.cs
- EventMappingSettingsCollection.cs
- XpsException.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- QueryStringParameter.cs
- BitmapDecoder.cs
- OleDbEnumerator.cs
- ListParaClient.cs
- PersonalizationProviderHelper.cs
- ReturnType.cs
- TypedTableBaseExtensions.cs
- BaseAsyncResult.cs
- Visitor.cs
- ConfigXmlWhitespace.cs
- SqlReorderer.cs
- ListSourceHelper.cs
- Vars.cs
- IndentTextWriter.cs
- CellLabel.cs
- UserControl.cs
- WebConfigurationManager.cs
- DataColumnPropertyDescriptor.cs
- TargetControlTypeAttribute.cs
- DoubleLinkList.cs
- MetadataHelper.cs
- SystemEvents.cs
- UserNameSecurityToken.cs
- XmlValidatingReader.cs
- SequentialOutput.cs
- UIntPtr.cs
- XmlDocumentFragment.cs
- ExpressionDumper.cs
- StrokeNodeOperations2.cs
- SystemColorTracker.cs
- GridViewRowPresenterBase.cs
- MorphHelpers.cs
- SortExpressionBuilder.cs
- TreeViewHitTestInfo.cs
- Wizard.cs
- BindingBase.cs
- PasswordPropertyTextAttribute.cs
- StrokeCollectionConverter.cs
- AppDomain.cs
- SafeMILHandleMemoryPressure.cs
- DeadCharTextComposition.cs
- ProcessHostServerConfig.cs
- VariableQuery.cs
- ThemeDirectoryCompiler.cs
- GradientBrush.cs
- X509CertificateValidator.cs
- PriorityQueue.cs
- DataGridViewRow.cs
- DataRecordInternal.cs