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
- LightweightEntityWrapper.cs
- QueryReaderSettings.cs
- ValidationErrorCollection.cs
- BitmapEffectOutputConnector.cs
- HwndMouseInputProvider.cs
- DockAndAnchorLayout.cs
- HtmlElement.cs
- MetadataCache.cs
- ColorMap.cs
- XmlSchemaInclude.cs
- ProcessThreadDesigner.cs
- WeakKeyDictionary.cs
- TriggerCollection.cs
- RuleAction.cs
- Transform.cs
- PropertyChangeTracker.cs
- SqlClientPermission.cs
- Profiler.cs
- ResourceKey.cs
- AesManaged.cs
- EventProviderTraceListener.cs
- FieldToken.cs
- _AcceptOverlappedAsyncResult.cs
- DictionaryChange.cs
- X509AsymmetricSecurityKey.cs
- _ScatterGatherBuffers.cs
- Transform.cs
- Configuration.cs
- XmlBindingWorker.cs
- FloaterBaseParagraph.cs
- EventLogTraceListener.cs
- TextReader.cs
- ColorMap.cs
- SecureStringHasher.cs
- Metafile.cs
- VariableQuery.cs
- metadatamappinghashervisitor.cs
- FlowDocumentReader.cs
- Material.cs
- PermissionSetTriple.cs
- DynamicVirtualDiscoSearcher.cs
- RegexBoyerMoore.cs
- WSSecurityPolicy.cs
- EnterpriseServicesHelper.cs
- ListViewItemMouseHoverEvent.cs
- _IPv6Address.cs
- __Error.cs
- TextAutomationPeer.cs
- XmlSchemaProviderAttribute.cs
- PipelineDeploymentState.cs
- EventTrigger.cs
- Interfaces.cs
- List.cs
- RootContext.cs
- ApplicationDirectory.cs
- ClaimComparer.cs
- IndexerNameAttribute.cs
- HttpAsyncResult.cs
- PageAdapter.cs
- GenericUI.cs
- SBCSCodePageEncoding.cs
- IdentifierCreationService.cs
- DataControlButton.cs
- HtmlTableRow.cs
- ScriptResourceAttribute.cs
- RenderTargetBitmap.cs
- UriWriter.cs
- securitycriticaldataClass.cs
- SoapTypeAttribute.cs
- DesignerAttribute.cs
- HttpResponseMessageProperty.cs
- MenuCommands.cs
- ToolbarAUtomationPeer.cs
- ProjectionAnalyzer.cs
- _ListenerAsyncResult.cs
- URIFormatException.cs
- DerivedKeySecurityTokenStub.cs
- MessageSecurityOverMsmq.cs
- VScrollBar.cs
- DesignTimeTemplateParser.cs
- PrimarySelectionGlyph.cs
- SystemSounds.cs
- PriorityChain.cs
- SymDocumentType.cs
- OutOfMemoryException.cs
- HMACMD5.cs
- ConnectionStringsExpressionBuilder.cs
- OrderedDictionaryStateHelper.cs
- UIElement3D.cs
- X509CertificateRecipientServiceCredential.cs
- BamlMapTable.cs
- GridSplitterAutomationPeer.cs
- TextDecorationUnitValidation.cs
- TabControlEvent.cs
- ProfileModule.cs
- ContractHandle.cs
- StreamGeometryContext.cs
- ThreadAttributes.cs
- InboundActivityHelper.cs
- EnvelopedPkcs7.cs