Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / System / Windows / Media / GlyphCache.cs / 1 / 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
- CompilationAssemblyInstallComponent.cs
- SiteMapHierarchicalDataSourceView.cs
- TextAnchor.cs
- ConfigurationCollectionAttribute.cs
- ExternalException.cs
- XmlMessageFormatter.cs
- Parser.cs
- MultipleViewPattern.cs
- SemanticResolver.cs
- RouteParameter.cs
- SRGSCompiler.cs
- CompilerGlobalScopeAttribute.cs
- ToolStripControlHost.cs
- ValueType.cs
- PartBasedPackageProperties.cs
- ObjectViewEntityCollectionData.cs
- FixUpCollection.cs
- HttpCookie.cs
- Html32TextWriter.cs
- SyndicationContent.cs
- CriticalFinalizerObject.cs
- TreeNodeClickEventArgs.cs
- StateMachineHistory.cs
- OracleDateTime.cs
- DoubleConverter.cs
- MetadataArtifactLoaderCompositeFile.cs
- DBSchemaTable.cs
- AttributeEmitter.cs
- MatrixCamera.cs
- FontFamily.cs
- ElementHost.cs
- IPCCacheManager.cs
- MultiBinding.cs
- Win32SafeHandles.cs
- AuthenticationConfig.cs
- QueryComponents.cs
- DataPagerField.cs
- _NativeSSPI.cs
- PerformanceCounterCategory.cs
- BamlResourceDeserializer.cs
- ListViewItem.cs
- XmlSchemaResource.cs
- CDSsyncETWBCLProvider.cs
- ObjectSet.cs
- TransactionContextManager.cs
- FileFormatException.cs
- ParenthesizePropertyNameAttribute.cs
- PropertyConverter.cs
- ToolStripLocationCancelEventArgs.cs
- TypeToken.cs
- HwndAppCommandInputProvider.cs
- ReadWriteSpinLock.cs
- DataMemberAttribute.cs
- CatchBlock.cs
- SBCSCodePageEncoding.cs
- DataGridViewBindingCompleteEventArgs.cs
- ReadOnlyDataSourceView.cs
- PropertyTabAttribute.cs
- CursorConverter.cs
- Assembly.cs
- OleDbParameter.cs
- IMembershipProvider.cs
- GroupLabel.cs
- Compiler.cs
- VectorCollectionConverter.cs
- XmlNodeReader.cs
- Merger.cs
- AssemblyBuilder.cs
- SRGSCompiler.cs
- Model3DGroup.cs
- SqlException.cs
- TransactedReceiveScope.cs
- TrimSurroundingWhitespaceAttribute.cs
- Int32CollectionConverter.cs
- Accessible.cs
- ColorTransformHelper.cs
- TextEmbeddedObject.cs
- OdbcConnectionFactory.cs
- XamlVector3DCollectionSerializer.cs
- ScrollBarRenderer.cs
- XmlSchemaSimpleType.cs
- WebPartZone.cs
- wgx_exports.cs
- HtmlMeta.cs
- JulianCalendar.cs
- HtmlTableRowCollection.cs
- XmlNodeReader.cs
- BaseDataListComponentEditor.cs
- Memoizer.cs
- DynamicControl.cs
- TemplateControlBuildProvider.cs
- CompilerScopeManager.cs
- ArrangedElement.cs
- UnknownBitmapDecoder.cs
- LeftCellWrapper.cs
- Rotation3DAnimationBase.cs
- DocComment.cs
- GridViewRowCollection.cs
- _SSPISessionCache.cs
- DataGridViewComboBoxEditingControl.cs