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
- wmiprovider.cs
- XmlSchemaAttributeGroup.cs
- DependencyPropertyHelper.cs
- HtmlProps.cs
- DescendantQuery.cs
- BoundsDrawingContextWalker.cs
- ListBindableAttribute.cs
- PersistenceContext.cs
- DataGridViewRow.cs
- NavigationProperty.cs
- UriSection.cs
- CryptoStream.cs
- PkcsMisc.cs
- RuleSetCollection.cs
- BuildTopDownAttribute.cs
- IndependentAnimationStorage.cs
- ColumnResizeUndoUnit.cs
- EncodingInfo.cs
- PeerNameRecord.cs
- DocComment.cs
- XmlNodeReader.cs
- ValidationHelper.cs
- cookiecollection.cs
- CompModSwitches.cs
- ObjectViewEntityCollectionData.cs
- ComAwareEventInfo.cs
- RectangleHotSpot.cs
- XsltFunctions.cs
- ContentElement.cs
- EntityWrapperFactory.cs
- NavigationWindowAutomationPeer.cs
- XmlWrappingWriter.cs
- XmlAttributeOverrides.cs
- ScriptRef.cs
- ResourceReader.cs
- ImageListUtils.cs
- GridViewDeleteEventArgs.cs
- Transform3D.cs
- HttpResponseInternalWrapper.cs
- DuplicateWaitObjectException.cs
- util.cs
- MethodCallConverter.cs
- StylusDevice.cs
- XmlAttributeCollection.cs
- TrustLevel.cs
- StringConcat.cs
- SafeEventHandle.cs
- DesignerCategoryAttribute.cs
- SingleSelectRootGridEntry.cs
- CounterCreationDataConverter.cs
- StylusEventArgs.cs
- Guid.cs
- UInt32Converter.cs
- AutomationFocusChangedEventArgs.cs
- XmlSchemaInclude.cs
- StatusBar.cs
- TabItemAutomationPeer.cs
- ToolStripDesignerUtils.cs
- LazyTextWriterCreator.cs
- TrackingProfileCache.cs
- LinearGradientBrush.cs
- WebSysDescriptionAttribute.cs
- ControlType.cs
- WebZone.cs
- SystemGatewayIPAddressInformation.cs
- XmlAnyElementAttribute.cs
- PhonemeConverter.cs
- EncryptedReference.cs
- ControlsConfig.cs
- Int32.cs
- QilLoop.cs
- HttpRawResponse.cs
- SqlMultiplexer.cs
- streamingZipPartStream.cs
- Vector3DAnimationBase.cs
- FixedTextPointer.cs
- ScriptServiceAttribute.cs
- mactripleDES.cs
- DesignerSerializationVisibilityAttribute.cs
- TreeViewItem.cs
- MissingManifestResourceException.cs
- ITextView.cs
- AppSecurityManager.cs
- XPathAncestorQuery.cs
- HashAlgorithm.cs
- GenericsInstances.cs
- ReferenceSchema.cs
- MissingManifestResourceException.cs
- TreeBuilderBamlTranslator.cs
- GC.cs
- DBCommand.cs
- DtrList.cs
- ColumnResult.cs
- SqlFileStream.cs
- UnhandledExceptionEventArgs.cs
- WmlTextViewAdapter.cs
- CharStorage.cs
- MessageQueueConverter.cs
- MessageVersion.cs
- MsmqReceiveParameters.cs