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
- EdgeProfileValidation.cs
- ActivityExecutor.cs
- EventDriven.cs
- GregorianCalendar.cs
- StandardOleMarshalObject.cs
- DocumentOrderQuery.cs
- ToolboxItemCollection.cs
- SystemThemeKey.cs
- DrawingContextDrawingContextWalker.cs
- DbDeleteCommandTree.cs
- DiscoveryClientRequestChannel.cs
- DataAdapter.cs
- FileVersion.cs
- UInt64Converter.cs
- XmlStreamedByteStreamReader.cs
- BlobPersonalizationState.cs
- Storyboard.cs
- MdImport.cs
- EntityModelBuildProvider.cs
- BrowserTree.cs
- CompilationUnit.cs
- VisualBasicImportReference.cs
- TypeRefElement.cs
- TerminatorSinks.cs
- SourceItem.cs
- SiteIdentityPermission.cs
- ControlTemplate.cs
- NestedContainer.cs
- EventRoute.cs
- WrappedReader.cs
- DesignTimeVisibleAttribute.cs
- ListBoxItem.cs
- MsmqIntegrationElement.cs
- XslTransform.cs
- DataListItem.cs
- ReadOnlyObservableCollection.cs
- XsdBuilder.cs
- LoadedOrUnloadedOperation.cs
- FrameworkContentElement.cs
- BeginSelectCardRequest.cs
- NativeCompoundFileAPIs.cs
- OleDbEnumerator.cs
- SystemInformation.cs
- CharacterHit.cs
- InheritablePropertyChangeInfo.cs
- InputEventArgs.cs
- AuthorizationRule.cs
- Control.cs
- SplashScreen.cs
- UpnEndpointIdentityExtension.cs
- CompilationPass2TaskInternal.cs
- Matrix3DConverter.cs
- MergeLocalizationDirectives.cs
- QilReplaceVisitor.cs
- WorkflowDefinitionDispenser.cs
- DataGridViewRowsAddedEventArgs.cs
- DateTimeFormatInfo.cs
- PaginationProgressEventArgs.cs
- TimeSpanFormat.cs
- safex509handles.cs
- WindowsFormsHostPropertyMap.cs
- ImageButton.cs
- SecurityManager.cs
- RawStylusInputCustomDataList.cs
- formatter.cs
- ObservableDictionary.cs
- ApplicationActivator.cs
- ModuleConfigurationInfo.cs
- ToolStripItemClickedEventArgs.cs
- CurrencyWrapper.cs
- Semaphore.cs
- InvalidOleVariantTypeException.cs
- DistinctQueryOperator.cs
- SchemaContext.cs
- SubpageParagraph.cs
- Trustee.cs
- AutoScrollExpandMessageFilter.cs
- TemplatedAdorner.cs
- ProxyHwnd.cs
- LineServicesRun.cs
- RankException.cs
- DataGridViewAutoSizeModeEventArgs.cs
- OrthographicCamera.cs
- XmlNamespaceDeclarationsAttribute.cs
- Timer.cs
- FatalException.cs
- FaultCallbackWrapper.cs
- CompilerResults.cs
- IsolatedStorage.cs
- XmlAttribute.cs
- OracleException.cs
- IsolatedStorageFile.cs
- UriSection.cs
- BrowserCapabilitiesCompiler.cs
- newinstructionaction.cs
- ExtendedPropertyCollection.cs
- BulletChrome.cs
- ToolStripRenderEventArgs.cs
- PersistNameAttribute.cs
- DataControlFieldCell.cs