Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- VersionedStreamOwner.cs
- BypassElement.cs
- RectangleF.cs
- BrushConverter.cs
- XmlNamespaceDeclarationsAttribute.cs
- ApplicationDirectory.cs
- clipboard.cs
- TypeUtils.cs
- PageThemeBuildProvider.cs
- DriveNotFoundException.cs
- ValueTable.cs
- UIInitializationException.cs
- String.cs
- Rect3D.cs
- AxisAngleRotation3D.cs
- errorpatternmatcher.cs
- _WinHttpWebProxyDataBuilder.cs
- CompressedStack.cs
- DynamicRendererThreadManager.cs
- ResourcePermissionBase.cs
- DiagnosticsConfigurationHandler.cs
- DependencyPropertyHelper.cs
- DiscoveryDocumentSerializer.cs
- safelinkcollection.cs
- DataViewManagerListItemTypeDescriptor.cs
- NullEntityWrapper.cs
- listitem.cs
- DataGridItemAutomationPeer.cs
- StrokeCollectionConverter.cs
- Rect.cs
- SchemaObjectWriter.cs
- ExceptionRoutedEventArgs.cs
- COM2PropertyPageUITypeConverter.cs
- SystemTcpStatistics.cs
- RelatedPropertyManager.cs
- SurrogateSelector.cs
- HttpStreamXmlDictionaryReader.cs
- StringAnimationBase.cs
- AppDomainAttributes.cs
- ProcessProtocolHandler.cs
- AnchorEditor.cs
- GroupItem.cs
- CompilationAssemblyInstallComponent.cs
- ErrorProvider.cs
- Drawing.cs
- SqlCachedBuffer.cs
- SizeFConverter.cs
- WebCategoryAttribute.cs
- SendingRequestEventArgs.cs
- input.cs
- NativeMethods.cs
- Input.cs
- ReadOnlyDataSource.cs
- EventSourceCreationData.cs
- WsdlWriter.cs
- ReadOnlyDataSource.cs
- ExpressionBuilder.cs
- ExecutionContext.cs
- SystemPens.cs
- CurrentChangingEventManager.cs
- ZipPackage.cs
- DoubleLinkListEnumerator.cs
- PaginationProgressEventArgs.cs
- TileBrush.cs
- FixedHyperLink.cs
- VarInfo.cs
- DesigntimeLicenseContextSerializer.cs
- DataViewSettingCollection.cs
- ProvidersHelper.cs
- _NativeSSPI.cs
- CellLabel.cs
- ObjectReaderCompiler.cs
- FileIOPermission.cs
- XPathSelectionIterator.cs
- StyleCollection.cs
- DbConnectionPoolIdentity.cs
- SingleObjectCollection.cs
- Triplet.cs
- AutomationPatternInfo.cs
- BinaryWriter.cs
- HttpContext.cs
- ColumnHeader.cs
- DocumentGridPage.cs
- AuthorizationRuleCollection.cs
- TraceFilter.cs
- ConnectivityStatus.cs
- DataColumn.cs
- GraphicsPath.cs
- WindowsTokenRoleProvider.cs
- DecoderBestFitFallback.cs
- CaseInsensitiveComparer.cs
- MemberAccessException.cs
- SmiEventSink_Default.cs
- IPHostEntry.cs
- FlowDecisionDesigner.xaml.cs
- SectionXmlInfo.cs
- ButtonFlatAdapter.cs
- XPathNodeInfoAtom.cs
- ResourceSet.cs
- SettingsBase.cs