Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Input / TextServicesCompartment.cs / 1 / 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. //---------------------------------------------------------------------------- // // // 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
- RawStylusSystemGestureInputReport.cs
- CollectionChangedEventManager.cs
- DBSchemaTable.cs
- ObjectSpanRewriter.cs
- TemplateControlCodeDomTreeGenerator.cs
- ReadOnlyPropertyMetadata.cs
- MarkerProperties.cs
- SQLBytesStorage.cs
- ReflectionTypeLoadException.cs
- FrameworkContextData.cs
- DataServiceClientException.cs
- NetworkAddressChange.cs
- Int32Storage.cs
- QueryExecutionOption.cs
- InitializerFacet.cs
- ValidatingPropertiesEventArgs.cs
- ProtocolsConfigurationHandler.cs
- ServiceHttpHandlerFactory.cs
- Run.cs
- SafeEventLogWriteHandle.cs
- TextDecorationUnitValidation.cs
- HashMembershipCondition.cs
- CommandSet.cs
- complextypematerializer.cs
- ComponentChangingEvent.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- TaskFormBase.cs
- TheQuery.cs
- RegisteredHiddenField.cs
- PowerModeChangedEventArgs.cs
- ValueSerializerAttribute.cs
- SingleKeyFrameCollection.cs
- BufferModesCollection.cs
- SecureStringHasher.cs
- CodeStatement.cs
- DeclarativeCatalogPart.cs
- URLAttribute.cs
- MenuAutomationPeer.cs
- ListViewGroupItemCollection.cs
- MetadataArtifactLoaderComposite.cs
- RenderOptions.cs
- SQLConvert.cs
- DataGridView.cs
- NavigationProperty.cs
- Int32AnimationUsingKeyFrames.cs
- MobileCapabilities.cs
- ManipulationDelta.cs
- HtmlContainerControl.cs
- LayoutEditorPart.cs
- MsmqBindingBase.cs
- ExtentKey.cs
- OleDbRowUpdatedEvent.cs
- FontInfo.cs
- RequestCachePolicy.cs
- JavaScriptSerializer.cs
- SolidColorBrush.cs
- LingerOption.cs
- MarkupCompilePass1.cs
- OAVariantLib.cs
- XmlDomTextWriter.cs
- StringResourceManager.cs
- KeyValuePairs.cs
- CodeAccessPermission.cs
- BoundConstants.cs
- PointLightBase.cs
- XmlSecureResolver.cs
- BitSet.cs
- TextChangedEventArgs.cs
- UmAlQuraCalendar.cs
- FunctionDetailsReader.cs
- HtmlHead.cs
- OptimizedTemplateContent.cs
- PromptEventArgs.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- ParamArrayAttribute.cs
- RegexInterpreter.cs
- OwnerDrawPropertyBag.cs
- MetaTable.cs
- SelectedDatesCollection.cs
- PathSegment.cs
- XmlBoundElement.cs
- XmlLangPropertyAttribute.cs
- UrlAuthorizationModule.cs
- AutoGeneratedFieldProperties.cs
- ValidatingPropertiesEventArgs.cs
- JulianCalendar.cs
- PrintPreviewControl.cs
- AliasGenerator.cs
- System.Data.OracleClient_BID.cs
- XmlSerializableWriter.cs
- LinkDescriptor.cs
- UnmanagedHandle.cs
- ToolStripItemTextRenderEventArgs.cs
- ListItemCollection.cs
- LinkUtilities.cs
- AstTree.cs
- AstNode.cs
- RegisteredExpandoAttribute.cs
- Model3DGroup.cs
- LocatorManager.cs