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
- WeakHashtable.cs
- TaiwanLunisolarCalendar.cs
- WindowsRichEdit.cs
- BamlRecordHelper.cs
- GridViewEditEventArgs.cs
- ShapingEngine.cs
- DesignerDataConnection.cs
- FixedLineResult.cs
- HtmlContainerControl.cs
- PermissionAttributes.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- StylusPointCollection.cs
- SourceFilter.cs
- ToRequest.cs
- XmlSerializerAssemblyAttribute.cs
- PositiveTimeSpanValidatorAttribute.cs
- ClientSponsor.cs
- GeometryConverter.cs
- FtpCachePolicyElement.cs
- SocketStream.cs
- CalendarAutoFormatDialog.cs
- Expression.cs
- PageWrapper.cs
- BinaryConverter.cs
- Clause.cs
- OracleSqlParser.cs
- Debug.cs
- BmpBitmapEncoder.cs
- RuleSetDialog.Designer.cs
- InsufficientMemoryException.cs
- StringComparer.cs
- XmlSerializationWriter.cs
- ClipboardProcessor.cs
- OdbcStatementHandle.cs
- SqlClientFactory.cs
- RecognizedAudio.cs
- FileFormatException.cs
- DataSourceNameHandler.cs
- DataPagerFieldCollection.cs
- Script.cs
- ApplicationActivator.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- FileDetails.cs
- XmlSerializerSection.cs
- SafeFileHandle.cs
- AtomMaterializer.cs
- StackOverflowException.cs
- Win32Native.cs
- OutputCacheSection.cs
- BitArray.cs
- ZipIOCentralDirectoryBlock.cs
- LineBreak.cs
- CatalogPartChrome.cs
- MemoryRecordBuffer.cs
- ParseChildrenAsPropertiesAttribute.cs
- Crypto.cs
- SqlProfileProvider.cs
- TargetInvocationException.cs
- SqlConnectionManager.cs
- TableLayoutPanelResizeGlyph.cs
- OperationExecutionFault.cs
- SHA512.cs
- CompilationUtil.cs
- GatewayDefinition.cs
- BehaviorDragDropEventArgs.cs
- connectionpool.cs
- XmlTypeMapping.cs
- RemotingSurrogateSelector.cs
- DataGridViewTopRowAccessibleObject.cs
- RuleValidation.cs
- ColumnWidthChangedEvent.cs
- LoginStatusDesigner.cs
- ClientCultureInfo.cs
- ModuleConfigurationInfo.cs
- TypeElementCollection.cs
- RefreshPropertiesAttribute.cs
- SHA256Managed.cs
- PageBuildProvider.cs
- XmlSchema.cs
- BaseParser.cs
- Module.cs
- WaitHandle.cs
- Set.cs
- Model3DGroup.cs
- ConstrainedGroup.cs
- DuplicateWaitObjectException.cs
- AdapterDictionary.cs
- QueueProcessor.cs
- KeyProperty.cs
- RC2CryptoServiceProvider.cs
- DelegatingStream.cs
- PropertyIDSet.cs
- InlineCollection.cs
- XmlSerializationReader.cs
- GlobalizationAssembly.cs
- MDIControlStrip.cs
- DataObjectPastingEventArgs.cs
- SqlSelectStatement.cs
- KeyGesture.cs
- Control.cs