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
- TemplateBaseAction.cs
- GroupItemAutomationPeer.cs
- OdbcCommandBuilder.cs
- ServiceAuthorizationBehavior.cs
- GeneralTransform.cs
- ChangeDirector.cs
- EventArgs.cs
- CodeGotoStatement.cs
- httpserverutility.cs
- EventMappingSettingsCollection.cs
- Panel.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- CngKeyCreationParameters.cs
- Floater.cs
- LicenseException.cs
- TextDecorations.cs
- PropertyHelper.cs
- EdmItemCollection.cs
- ParamArrayAttribute.cs
- CategoryEditor.cs
- SmtpReplyReaderFactory.cs
- TreeViewBindingsEditor.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- XmlElement.cs
- TableRowCollection.cs
- CodeThrowExceptionStatement.cs
- MetadataSet.cs
- TypeSystem.cs
- IndexedString.cs
- DesignerVerbCollection.cs
- Matrix.cs
- DataGridViewCheckBoxCell.cs
- NativeObjectSecurity.cs
- ParameterToken.cs
- TextEndOfSegment.cs
- DataGridPageChangedEventArgs.cs
- RootProjectionNode.cs
- PropertyGrid.cs
- TextParagraphView.cs
- DbConnectionPoolGroupProviderInfo.cs
- EventRouteFactory.cs
- DSACryptoServiceProvider.cs
- Int16Converter.cs
- SmiEventStream.cs
- DataGridViewCellCollection.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- Figure.cs
- DataObjectAttribute.cs
- EmbeddedMailObject.cs
- ProviderConnectionPointCollection.cs
- TableRow.cs
- Subtree.cs
- SynchronizationLockException.cs
- shaperfactory.cs
- AffineTransform3D.cs
- Animatable.cs
- DataGridViewSelectedRowCollection.cs
- ProviderCommandInfoUtils.cs
- ContentElementCollection.cs
- GenericRootAutomationPeer.cs
- ECDsa.cs
- UInt64Converter.cs
- HierarchicalDataBoundControl.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- BrowserInteropHelper.cs
- StateWorkerRequest.cs
- TiffBitmapDecoder.cs
- CustomError.cs
- IDReferencePropertyAttribute.cs
- NativeWrapper.cs
- XmlWriter.cs
- SupportsEventValidationAttribute.cs
- ConfigurationException.cs
- XmlSchemaSimpleTypeRestriction.cs
- SerTrace.cs
- FormParameter.cs
- PropertyKey.cs
- ImageSource.cs
- GridViewCancelEditEventArgs.cs
- OLEDB_Enum.cs
- OperationContext.cs
- PrinterUnitConvert.cs
- ElementProxy.cs
- versioninfo.cs
- CodeThrowExceptionStatement.cs
- _AutoWebProxyScriptWrapper.cs
- CategoryNameCollection.cs
- AutomationElementCollection.cs
- StreamReader.cs
- EdmFunction.cs
- StringReader.cs
- ValidatedControlConverter.cs
- Rectangle.cs
- Decimal.cs
- FilePresentation.cs
- WsdlInspector.cs
- ReadOnlyDataSource.cs
- XmlMemberMapping.cs
- ToolStripDropDownClosedEventArgs.cs
- XslNumber.cs