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
- GridViewRow.cs
- SharedPerformanceCounter.cs
- SecUtil.cs
- TrackingServices.cs
- EDesignUtil.cs
- BamlResourceDeserializer.cs
- PeerCollaborationPermission.cs
- TransformedBitmap.cs
- HttpContext.cs
- ViewBase.cs
- WindowPatternIdentifiers.cs
- RichTextBox.cs
- MessageQueueCriteria.cs
- KeyPressEvent.cs
- SqlSelectStatement.cs
- AssemblyAssociatedContentFileAttribute.cs
- SubMenuStyleCollection.cs
- HtmlShim.cs
- RolePrincipal.cs
- XmlStreamedByteStreamReader.cs
- MouseButton.cs
- FileDialogCustomPlaces.cs
- DocumentSchemaValidator.cs
- IUnknownConstantAttribute.cs
- UrlPropertyAttribute.cs
- TextParaClient.cs
- HttpModuleCollection.cs
- RadioButton.cs
- Duration.cs
- GPRECTF.cs
- RepeatButtonAutomationPeer.cs
- TextSelectionProcessor.cs
- WsdlInspector.cs
- EventMappingSettings.cs
- Variant.cs
- GridErrorDlg.cs
- ExpressionNode.cs
- ListItemsPage.cs
- validationstate.cs
- EncryptedReference.cs
- Italic.cs
- ListViewSortEventArgs.cs
- MultipartContentParser.cs
- SimpleNameService.cs
- WebPartManagerInternals.cs
- ReadOnlyAttribute.cs
- ActivityValidator.cs
- BufferedStream.cs
- UnsupportedPolicyOptionsException.cs
- DBParameter.cs
- WindowsClaimSet.cs
- ImageMapEventArgs.cs
- Pens.cs
- InvalidateEvent.cs
- PropertySourceInfo.cs
- ProjectedSlot.cs
- SecurityState.cs
- InputScopeConverter.cs
- StatusBar.cs
- BindToObject.cs
- LinqDataSourceValidationException.cs
- ButtonChrome.cs
- DispatcherTimer.cs
- CardSpacePolicyElement.cs
- UserNameSecurityToken.cs
- RMEnrollmentPage2.cs
- SqlDependencyUtils.cs
- VScrollBar.cs
- XmlSchemaRedefine.cs
- QuaternionValueSerializer.cs
- Point3DAnimation.cs
- EventInfo.cs
- AccessDataSourceView.cs
- HttpsHostedTransportConfiguration.cs
- OleStrCAMarshaler.cs
- BufferedWebEventProvider.cs
- DiscoveryMessageSequenceGenerator.cs
- HierarchicalDataBoundControl.cs
- RemotingException.cs
- CfgSemanticTag.cs
- XmlSchemaSimpleTypeUnion.cs
- BooleanProjectedSlot.cs
- JournalEntryStack.cs
- StringComparer.cs
- ComponentResourceKeyConverter.cs
- KeyGesture.cs
- KeyedCollection.cs
- LOSFormatter.cs
- TransactionManager.cs
- QilFunction.cs
- PocoEntityKeyStrategy.cs
- MemberInfoSerializationHolder.cs
- DataControlButton.cs
- SettingsBindableAttribute.cs
- DefaultWorkflowLoaderService.cs
- ValidationSummary.cs
- HtmlElementErrorEventArgs.cs
- ResourceReferenceExpressionConverter.cs
- SqlClientWrapperSmiStream.cs
- WindowsFormsHostPropertyMap.cs