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
- CollectionChangedEventManager.cs
- InvalidPrinterException.cs
- SqlDelegatedTransaction.cs
- NegotiateStream.cs
- DescendantOverDescendantQuery.cs
- WindowsAuthenticationModule.cs
- StringComparer.cs
- ColorConverter.cs
- SafeArrayTypeMismatchException.cs
- DirectoryObjectSecurity.cs
- Win32MouseDevice.cs
- DetailsViewModeEventArgs.cs
- cryptoapiTransform.cs
- FontDialog.cs
- MulticastDelegate.cs
- ChildrenQuery.cs
- WebRequest.cs
- KnownTypeAttribute.cs
- Geometry.cs
- RepeaterItemEventArgs.cs
- EntityModelSchemaGenerator.cs
- AuthorizationRule.cs
- MsmqReceiveHelper.cs
- WebPartZoneBase.cs
- Hyperlink.cs
- FormViewPagerRow.cs
- OdbcUtils.cs
- SimpleTableProvider.cs
- KeyConverter.cs
- basenumberconverter.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- HashStream.cs
- RecordBuilder.cs
- DataControlFieldCell.cs
- SendMessageContent.cs
- AvTraceDetails.cs
- DefaultObjectMappingItemCollection.cs
- XmlMapping.cs
- MimeTypePropertyAttribute.cs
- X509Extension.cs
- x509utils.cs
- TypeFieldSchema.cs
- ConfigurationManagerInternal.cs
- XmlSchemas.cs
- TaiwanLunisolarCalendar.cs
- Activator.cs
- HtmlSelectionListAdapter.cs
- LineUtil.cs
- FormViewInsertEventArgs.cs
- SafeNativeMethods.cs
- DoubleLinkListEnumerator.cs
- LocalBuilder.cs
- DataGridViewColumnCollectionDialog.cs
- CoreSwitches.cs
- IDReferencePropertyAttribute.cs
- ChangePasswordDesigner.cs
- HijriCalendar.cs
- MenuItemCollectionEditor.cs
- HtmlMeta.cs
- ClientRoleProvider.cs
- ToolZone.cs
- SplitContainer.cs
- StringHandle.cs
- RemoteWebConfigurationHostStream.cs
- OptimalBreakSession.cs
- PriorityQueue.cs
- JavaScriptSerializer.cs
- TrustManagerMoreInformation.cs
- EnumerableRowCollection.cs
- SetMemberBinder.cs
- DefinitionUpdate.cs
- SessionStateSection.cs
- IItemContainerGenerator.cs
- SecurityRuntime.cs
- formatter.cs
- AsymmetricCryptoHandle.cs
- Rotation3D.cs
- DataServiceQuery.cs
- CmsUtils.cs
- Membership.cs
- DBCommand.cs
- ToolStripArrowRenderEventArgs.cs
- TableLayoutPanelCellPosition.cs
- ListControlConvertEventArgs.cs
- WaitHandle.cs
- HttpProfileBase.cs
- MdiWindowListItemConverter.cs
- CustomCredentialPolicy.cs
- PageAdapter.cs
- SettingsContext.cs
- SqlResolver.cs
- FixedSOMContainer.cs
- KeyedCollection.cs
- XPathException.cs
- KeysConverter.cs
- ConditionChanges.cs
- SmiContext.cs
- ExpressionBindings.cs
- DataGridTextColumn.cs
- DBCommandBuilder.cs