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
- Solver.cs
- MethodRental.cs
- ValueTypeFieldReference.cs
- TypeCodeDomSerializer.cs
- UnmanagedMemoryStreamWrapper.cs
- TemplateAction.cs
- DataGridTextBoxColumn.cs
- Configuration.cs
- DocumentViewerConstants.cs
- DataGridViewBand.cs
- WindowsTitleBar.cs
- ReferentialConstraintRoleElement.cs
- BrushMappingModeValidation.cs
- OpenTypeCommon.cs
- InputReport.cs
- PiiTraceSource.cs
- AssemblyEvidenceFactory.cs
- LassoSelectionBehavior.cs
- ExtensionDataReader.cs
- Activator.cs
- MDIClient.cs
- Drawing.cs
- ClientRuntimeConfig.cs
- Point3DAnimationBase.cs
- HandlerFactoryWrapper.cs
- DebugInfoGenerator.cs
- SchemaImporterExtensionsSection.cs
- FixedPage.cs
- nulltextnavigator.cs
- WebBaseEventKeyComparer.cs
- AdRotator.cs
- WhereQueryOperator.cs
- AlignmentXValidation.cs
- recordstatefactory.cs
- BulletedList.cs
- DeviceSpecificChoiceCollection.cs
- Utils.cs
- WebPartEditorApplyVerb.cs
- EnumerableRowCollection.cs
- FileSystemWatcher.cs
- XmlWrappingReader.cs
- SelectedGridItemChangedEvent.cs
- SqlMethodCallConverter.cs
- BlurBitmapEffect.cs
- HtmlPhoneCallAdapter.cs
- CodeExporter.cs
- HtmlTernaryTree.cs
- ComNativeDescriptor.cs
- OleDbDataAdapter.cs
- FilterFactory.cs
- CallbackHandler.cs
- CfgParser.cs
- WebUtil.cs
- QueryParameter.cs
- MethodBuilder.cs
- RightNameExpirationInfoPair.cs
- ConfigurationErrorsException.cs
- XPathCompileException.cs
- _LazyAsyncResult.cs
- Inline.cs
- DataRowIndexBuffer.cs
- PhysicalAddress.cs
- ResolveResponse.cs
- MessageDecoder.cs
- XmlTextReaderImpl.cs
- ellipse.cs
- ParserStack.cs
- MultipleViewProviderWrapper.cs
- TransactionBridgeSection.cs
- IFlowDocumentViewer.cs
- PersonalizationEntry.cs
- MissingMemberException.cs
- StringStorage.cs
- TimeSpanMinutesConverter.cs
- IpcChannel.cs
- WebPartEventArgs.cs
- Timer.cs
- SwitchElementsCollection.cs
- CellParagraph.cs
- QueueProcessor.cs
- ResourceAssociationSetEnd.cs
- Utility.cs
- DefaultAsyncDataDispatcher.cs
- TouchFrameEventArgs.cs
- WrappingXamlSchemaContext.cs
- CodeGen.cs
- KeyedHashAlgorithm.cs
- _NtlmClient.cs
- FullTextBreakpoint.cs
- documentation.cs
- StyleCollection.cs
- DataBindingHandlerAttribute.cs
- TriState.cs
- smtpconnection.cs
- CompatibleIComparer.cs
- RSAPKCS1SignatureDeformatter.cs
- EntityDescriptor.cs
- ProviderConnectionPointCollection.cs
- SystemThemeKey.cs
- ToolStripSplitStackLayout.cs