Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / System / Windows / Input / TextServicesCompartment.cs / 1 / TextServicesCompartment.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Manages Text Services Compartment. // // History: // 07/30/2003 : [....] - Ported from .net tree. // //--------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.Windows.Threading; using System.Security; using System.Security.Permissions; using System.Diagnostics; using System.Collections; using MS.Utility; using MS.Win32; using MS.Internal; namespace System.Windows.Input { //----------------------------------------------------- // // TextServicesCompartment class // //----------------------------------------------------- internal class TextServicesCompartment { //------------------------------------------------------ // // Constructors // //----------------------------------------------------- ////// Critical - directly calls unmanaged code based on guid /// [SecurityCritical] internal TextServicesCompartment(Guid guid, UnsafeNativeMethods.ITfCompartmentMgr compartmentmgr) { _guid = guid; _compartmentmgr = new SecurityCriticalData(compartmentmgr); _cookie = UnsafeNativeMethods.TF_INVALID_COOKIE; } //------------------------------------------------------ // // Public Methods // //------------------------------------------------------ #region Public Methods #endregion Public Methods //----------------------------------------------------- // // Public Operators // //------------------------------------------------------ //----------------------------------------------------- // // Public Properties // //----------------------------------------------------- //----------------------------------------------------- // // Public Events // //------------------------------------------------------ //----------------------------------------------------- // // Protected Methods // //------------------------------------------------------ //------------------------------------------------------ // // Internal Methods // //----------------------------------------------------- #region Internal Methods /// /// Advise the notify sink of the compartment update. /// ////// Critical - wires up multiple unmanaged objects together /// [SecurityCritical] internal void AdviseNotifySink(UnsafeNativeMethods.ITfCompartmentEventSink sink) { Debug.Assert(_cookie == UnsafeNativeMethods.TF_INVALID_COOKIE, "cookie is already set."); UnsafeNativeMethods.ITfCompartment compartment = GetITfCompartment(); if (compartment == null) return; UnsafeNativeMethods.ITfSource source = compartment as UnsafeNativeMethods.ITfSource; // workaround because I can't pass a ref to a readonly constant Guid guid = UnsafeNativeMethods.IID_ITfCompartmentEventSink; source.AdviseSink(ref guid, sink, out _cookie); Marshal.ReleaseComObject(compartment); Marshal.ReleaseComObject(source); } ////// Unadvise the notify sink of the compartment update. /// ////// Critical - wires up multiple unmanaged objects together /// [SecurityCritical] internal void UnadviseNotifySink() { Debug.Assert(_cookie != UnsafeNativeMethods.TF_INVALID_COOKIE, "cookie is not set."); UnsafeNativeMethods.ITfCompartment compartment = GetITfCompartment(); if (compartment == null) return; UnsafeNativeMethods.ITfSource source = compartment as UnsafeNativeMethods.ITfSource; source.UnadviseSink(_cookie); _cookie = UnsafeNativeMethods.TF_INVALID_COOKIE; Marshal.ReleaseComObject(compartment); Marshal.ReleaseComObject(source); } ////// Retrieve ITfCompartment /// ////// Critical - returns critical resource /// [SecurityCritical] internal UnsafeNativeMethods.ITfCompartment GetITfCompartment() { UnsafeNativeMethods.ITfCompartment itfcompartment; _compartmentmgr.Value.GetCompartment(ref _guid, out itfcompartment); return itfcompartment; } #endregion Internal methods //------------------------------------------------------ // // Internal Properties // //----------------------------------------------------- #region Internal Properties ////// Cast the compartment variant to bool. /// internal bool BooleanValue { get { object obj = Value; if (obj == null) return false; if ((int)obj != 0) return true; return false; } set { Value = value ? 1 : 0; } } ////// Cast the compartment variant to int. /// internal int IntValue { get { object obj = Value; if (obj == null) return 0; return (int)obj; } set { Value = value; } } ////// Get the compartment variant. /// ////// Critical - access unmanaged code /// TreatAsSafe - returns "safe" variant based value from the store /// internal object Value { [SecurityCritical, SecurityTreatAsSafe] get { UnsafeNativeMethods.ITfCompartment compartment = GetITfCompartment(); if (compartment == null) return null; object obj; compartment.GetValue(out obj); Marshal.ReleaseComObject(compartment); return obj; } [SecurityCritical, SecurityTreatAsSafe] set { UnsafeNativeMethods.ITfCompartment compartment = GetITfCompartment(); if (compartment == null) return; compartment.SetValue(0 /* clientid */, ref value); Marshal.ReleaseComObject(compartment); } } #endregion Internal Properties //----------------------------------------------------- // // Private Methods // //----------------------------------------------------- //------------------------------------------------------ // // Private Fields // //----------------------------------------------------- #region Private Fields ////// Critical: UnsafeNativeMethods.ITfCompartmentMgr has methods with SuppressUnmanagedCodeSecurity. /// private readonly SecurityCriticalData_compartmentmgr; private Guid _guid; private int _cookie; #endregion Private Fields } } // 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
- Table.cs
- SystemIPGlobalStatistics.cs
- HtmlElementCollection.cs
- ListViewDeletedEventArgs.cs
- EpmSyndicationContentDeSerializer.cs
- DrawTreeNodeEventArgs.cs
- RSAPKCS1KeyExchangeFormatter.cs
- TimeZone.cs
- GlobalizationSection.cs
- FlowStep.cs
- SecurityException.cs
- QueryAccessibilityHelpEvent.cs
- StrokeNodeData.cs
- OutputCacheEntry.cs
- PresentationTraceSources.cs
- ServiceElement.cs
- ButtonPopupAdapter.cs
- WebPartDisplayModeCancelEventArgs.cs
- EventItfInfo.cs
- ISO2022Encoding.cs
- PeerEndPoint.cs
- SmtpMail.cs
- InheritanceContextChangedEventManager.cs
- ErrorFormatterPage.cs
- MultipleViewPattern.cs
- TypeToken.cs
- TraceInternal.cs
- CalendarDataBindingHandler.cs
- PreProcessor.cs
- TranslateTransform3D.cs
- ProtectedConfiguration.cs
- DataControlFieldCell.cs
- ConfigurationSectionGroup.cs
- PackagePartCollection.cs
- ParsedRoute.cs
- XmlTypeAttribute.cs
- TextDecorationCollection.cs
- Calendar.cs
- Vector3DAnimation.cs
- References.cs
- Classification.cs
- HandlerBase.cs
- TimeSpan.cs
- DiscoveryEndpointElement.cs
- CrossSiteScriptingValidation.cs
- ModelVisual3D.cs
- MenuItemBinding.cs
- OrderedParallelQuery.cs
- ObjectItemNoOpAssemblyLoader.cs
- _ListenerResponseStream.cs
- UnicastIPAddressInformationCollection.cs
- GridEntry.cs
- UnsafeNativeMethodsTablet.cs
- FragmentNavigationEventArgs.cs
- PackageRelationship.cs
- SourceItem.cs
- TemplateControlBuildProvider.cs
- GeneralTransformCollection.cs
- UnaryQueryOperator.cs
- DependencyObjectProvider.cs
- BitmapCache.cs
- TraceUtils.cs
- AlphaSortedEnumConverter.cs
- TemplateParser.cs
- SignatureSummaryDialog.cs
- SerializationAttributes.cs
- TailPinnedEventArgs.cs
- PrintDialog.cs
- LowerCaseStringConverter.cs
- BrowserTree.cs
- IgnoreSectionHandler.cs
- DesignSurfaceServiceContainer.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- HttpApplication.cs
- DataFormat.cs
- NotImplementedException.cs
- Vars.cs
- ListViewGroup.cs
- serverconfig.cs
- StylusDownEventArgs.cs
- CodeTypeParameterCollection.cs
- TemplatedWizardStep.cs
- BufferedOutputAsyncStream.cs
- ListBox.cs
- ColorPalette.cs
- DescendantBaseQuery.cs
- ExpandableObjectConverter.cs
- TextShapeableCharacters.cs
- CodeEntryPointMethod.cs
- Visual3DCollection.cs
- ItemCollectionEditor.cs
- CompareValidator.cs
- figurelengthconverter.cs
- SubclassTypeValidator.cs
- DbDeleteCommandTree.cs
- TextTreeExtractElementUndoUnit.cs
- RootDesignerSerializerAttribute.cs
- GridLengthConverter.cs
- OleDbPropertySetGuid.cs
- FtpRequestCacheValidator.cs