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
- ScalarOps.cs
- UserControl.cs
- RoutedCommand.cs
- XmlSchemaException.cs
- XmlSchemaSimpleTypeList.cs
- ConfigXmlWhitespace.cs
- WorkflowQueueInfo.cs
- ImageField.cs
- Font.cs
- ToggleButton.cs
- TransportReplyChannelAcceptor.cs
- Registry.cs
- XmlTypeMapping.cs
- Pair.cs
- DefaultClaimSet.cs
- DecodeHelper.cs
- UseAttributeSetsAction.cs
- HtmlMeta.cs
- ClientViaElement.cs
- SafeThreadHandle.cs
- RubberbandSelector.cs
- wgx_sdk_version.cs
- ImageFormatConverter.cs
- CriticalFinalizerObject.cs
- SqlConnectionHelper.cs
- X509Chain.cs
- FrameworkContentElementAutomationPeer.cs
- ActivitySurrogateSelector.cs
- RotationValidation.cs
- SupportingTokenDuplexChannel.cs
- WindowsAuthenticationEventArgs.cs
- BitVector32.cs
- MailDefinition.cs
- CalculatedColumn.cs
- ReferencedType.cs
- Control.cs
- DbMetaDataFactory.cs
- SiteIdentityPermission.cs
- ValueExpressions.cs
- DefaultExpression.cs
- MessageBox.cs
- RemotingConfigParser.cs
- DataObjectCopyingEventArgs.cs
- AsyncResult.cs
- EventLogEntryCollection.cs
- PageAdapter.cs
- DesignerCapabilities.cs
- SetStoryboardSpeedRatio.cs
- SqlUtils.cs
- HopperCache.cs
- HtmlDocument.cs
- ThousandthOfEmRealPoints.cs
- InputScope.cs
- RemoteWebConfigurationHost.cs
- HttpCapabilitiesSectionHandler.cs
- DBCommand.cs
- RtfFormatStack.cs
- XpsViewerException.cs
- Fonts.cs
- SpecialNameAttribute.cs
- ExternalFile.cs
- UriTemplateTableMatchCandidate.cs
- ClientData.cs
- PropertyFilter.cs
- RequestQueue.cs
- ProcessProtocolHandler.cs
- WebPartDisplayModeCollection.cs
- DataRowCollection.cs
- HttpModuleAction.cs
- DataServiceExpressionVisitor.cs
- Globals.cs
- XmlSiteMapProvider.cs
- ToolBarPanel.cs
- ObjectSecurity.cs
- ApplicationSecurityManager.cs
- TTSEvent.cs
- WindowsListViewGroupSubsetLink.cs
- ManagementOptions.cs
- SoapSchemaExporter.cs
- Metafile.cs
- Pts.cs
- CompilerScope.Storage.cs
- MembershipSection.cs
- NativeRightsManagementAPIsStructures.cs
- ToolStripDropDownButton.cs
- ViewCellRelation.cs
- SerializableTypeCodeDomSerializer.cs
- CultureInfo.cs
- WebColorConverter.cs
- InvalidOperationException.cs
- EasingQuaternionKeyFrame.cs
- BCryptNative.cs
- ServiceManager.cs
- BooleanKeyFrameCollection.cs
- DataGridSortingEventArgs.cs
- FrameworkReadOnlyPropertyMetadata.cs
- _TLSstream.cs
- MenuItem.cs
- Italic.cs
- SAPIEngineTypes.cs