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
- Currency.cs
- CodeAccessPermission.cs
- User.cs
- InputLanguageCollection.cs
- ColumnMapCopier.cs
- FreezableCollection.cs
- InheritanceContextChangedEventManager.cs
- InputScopeConverter.cs
- WebRequestModuleElementCollection.cs
- OrthographicCamera.cs
- ChangeNode.cs
- Error.cs
- XmlArrayItemAttributes.cs
- OperationAbortedException.cs
- ContainerControl.cs
- Scripts.cs
- GlobalEventManager.cs
- COM2ExtendedBrowsingHandler.cs
- CachedRequestParams.cs
- ComponentResourceKeyConverter.cs
- DrawingState.cs
- QueryConverter.cs
- Enum.cs
- PropertyRef.cs
- DataObject.cs
- NavigationService.cs
- MasterPage.cs
- DecryptRequest.cs
- TableLayoutStyleCollection.cs
- LayoutSettings.cs
- RegexWriter.cs
- CachingHintValidation.cs
- BulletDecorator.cs
- CustomErrorsSection.cs
- GridViewCellAutomationPeer.cs
- TextRenderingModeValidation.cs
- RadioButton.cs
- ColorContextHelper.cs
- ListBindingHelper.cs
- DocumentViewerConstants.cs
- RangeBase.cs
- ThreadStateException.cs
- SendContent.cs
- SystemResourceHost.cs
- XamlDesignerSerializationManager.cs
- GenericUriParser.cs
- BuildManager.cs
- ActivationArguments.cs
- UpdateCompiler.cs
- PenThreadPool.cs
- DeploymentSection.cs
- ContextMenu.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- Rectangle.cs
- _SafeNetHandles.cs
- SQLStringStorage.cs
- QueryAsyncResult.cs
- SynchronizationLockException.cs
- SecureUICommand.cs
- TouchEventArgs.cs
- ColorConvertedBitmap.cs
- PersonalizationStateInfo.cs
- GenericPrincipal.cs
- MessagePropertyFilter.cs
- ChangeConflicts.cs
- TemplateBamlRecordReader.cs
- StructuralObject.cs
- SQLDateTime.cs
- CachedTypeface.cs
- FlowchartDesigner.xaml.cs
- SqlExpander.cs
- DiagnosticsConfigurationHandler.cs
- AlternationConverter.cs
- HttpValueCollection.cs
- SystemPens.cs
- CodeVariableReferenceExpression.cs
- RtfControlWordInfo.cs
- TableRow.cs
- Point3DAnimation.cs
- ObjectListCommandCollection.cs
- ScrollEventArgs.cs
- XPathMessageFilter.cs
- OpenFileDialog.cs
- CodeRegionDirective.cs
- XmlComplianceUtil.cs
- SortDescriptionCollection.cs
- StringKeyFrameCollection.cs
- ClientSponsor.cs
- Win32MouseDevice.cs
- SmtpFailedRecipientsException.cs
- StartUpEventArgs.cs
- input.cs
- PropertyValueUIItem.cs
- DBSchemaRow.cs
- IntSecurity.cs
- MsiStyleLogWriter.cs
- ThicknessKeyFrameCollection.cs
- MultiPageTextView.cs
- _ConnectStream.cs
- _LocalDataStore.cs