Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / TextServicesCompartment.cs / 1305600 / TextServicesCompartment.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Manages Text Services Compartment. // // History: // 07/30/2003 : yutakas - 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
- TerminatorSinks.cs
- DateRangeEvent.cs
- SqlGatherConsumedAliases.cs
- ListViewItemMouseHoverEvent.cs
- AnnotationResourceCollection.cs
- datacache.cs
- SafeHGlobalHandleCritical.cs
- FixedFindEngine.cs
- ChildChangedEventArgs.cs
- VectorValueSerializer.cs
- GroupBoxRenderer.cs
- QilList.cs
- EventRecordWrittenEventArgs.cs
- SHA512Managed.cs
- WindowsScrollBarBits.cs
- Claim.cs
- NativeCompoundFileAPIs.cs
- SystemIcmpV6Statistics.cs
- DataGridViewIntLinkedList.cs
- RequestQueue.cs
- TextContainerChangedEventArgs.cs
- AppDomainUnloadedException.cs
- WebEventCodes.cs
- GuidTagList.cs
- AdjustableArrowCap.cs
- CacheDict.cs
- PeerValidationBehavior.cs
- ButtonChrome.cs
- ListViewPagedDataSource.cs
- ImageBrush.cs
- ProjectionPruner.cs
- HttpHandlersSection.cs
- ServiceObjectContainer.cs
- MailFileEditor.cs
- XmlNamespaceManager.cs
- TableHeaderCell.cs
- EpmAttributeNameBuilder.cs
- RelationshipManager.cs
- VScrollProperties.cs
- UIntPtr.cs
- StreamGeometryContext.cs
- QueryExpr.cs
- PortCache.cs
- WebPartVerbsEventArgs.cs
- ZipIOBlockManager.cs
- ThicknessAnimationBase.cs
- SchemaInfo.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- RemoteWebConfigurationHostStream.cs
- DbXmlEnabledProviderManifest.cs
- VisualSerializer.cs
- CFStream.cs
- Guid.cs
- WebPartHeaderCloseVerb.cs
- TagPrefixInfo.cs
- VirtualDirectoryMapping.cs
- XsltSettings.cs
- HttpRequestCacheValidator.cs
- HideDisabledControlAdapter.cs
- DbProviderFactoriesConfigurationHandler.cs
- UnsafeNativeMethods.cs
- StatusBar.cs
- SQLDoubleStorage.cs
- cookieexception.cs
- PenCursorManager.cs
- XPathSelectionIterator.cs
- PreProcessor.cs
- Transform3D.cs
- PrivilegedConfigurationManager.cs
- InputScope.cs
- ConditionalAttribute.cs
- Deflater.cs
- JoinSymbol.cs
- HtmlTableRow.cs
- UnmanagedMarshal.cs
- RTLAwareMessageBox.cs
- StylusTip.cs
- ColorTransform.cs
- DataGridViewBindingCompleteEventArgs.cs
- HeaderUtility.cs
- HwndTarget.cs
- ExportOptions.cs
- ControlCachePolicy.cs
- Buffer.cs
- TypeNameConverter.cs
- ArgumentException.cs
- JpegBitmapDecoder.cs
- updatecommandorderer.cs
- RelativeSource.cs
- RowVisual.cs
- ItemMap.cs
- HttpConfigurationContext.cs
- MLangCodePageEncoding.cs
- SecurityRequiresReviewAttribute.cs
- GridViewColumnCollectionChangedEventArgs.cs
- MdImport.cs
- SessionIDManager.cs
- SqlBinder.cs
- ReturnValue.cs
- RadioButtonStandardAdapter.cs