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
- DeviceContext.cs
- StandardToolWindows.cs
- TextEditorLists.cs
- assertwrapper.cs
- ConsoleKeyInfo.cs
- ParameterCollectionEditorForm.cs
- XmlSchemaInferenceException.cs
- CompilationLock.cs
- Journal.cs
- XamlSerializerUtil.cs
- ImageListStreamer.cs
- ResourcesGenerator.cs
- StylusOverProperty.cs
- MouseOverProperty.cs
- SequentialActivityDesigner.cs
- XhtmlStyleClass.cs
- DrawingImage.cs
- ControlBuilderAttribute.cs
- QueryRewriter.cs
- ClientSettingsSection.cs
- OpCodes.cs
- InheritablePropertyChangeInfo.cs
- SizeAnimationBase.cs
- WebBrowserHelper.cs
- DbBuffer.cs
- UnknownBitmapDecoder.cs
- BindingNavigatorDesigner.cs
- TargetControlTypeAttribute.cs
- BaseParagraph.cs
- Classification.cs
- UpWmlMobileTextWriter.cs
- ConfigurationCollectionAttribute.cs
- EditorPartCollection.cs
- ChameleonKey.cs
- FileSystemInfo.cs
- FormsAuthenticationEventArgs.cs
- DbDataAdapter.cs
- CodeObjectCreateExpression.cs
- WorkItem.cs
- PropertyFilter.cs
- AxWrapperGen.cs
- HashCryptoHandle.cs
- RegexStringValidatorAttribute.cs
- StringValidator.cs
- UInt16.cs
- RepeaterItem.cs
- WebRequestModulesSection.cs
- StringCollectionMarkupSerializer.cs
- AuthenticationModulesSection.cs
- MemoryMappedViewAccessor.cs
- CorrelationResolver.cs
- LocatorManager.cs
- StreamUpgradeBindingElement.cs
- XmlImplementation.cs
- DataBoundControlAdapter.cs
- InitializeCorrelation.cs
- DataBindingValueUIHandler.cs
- StructuredTypeInfo.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- ParameterToken.cs
- shaperfactoryquerycacheentry.cs
- XmlStringTable.cs
- GroupBoxRenderer.cs
- SoapServerMessage.cs
- SettingsProperty.cs
- LineServicesRun.cs
- DataGridViewCheckBoxColumn.cs
- EndOfStreamException.cs
- XmlWhitespace.cs
- DataControlFieldsEditor.cs
- ServiceOperationUIEditor.cs
- DrawingCollection.cs
- ConfigurationSectionCollection.cs
- UnmanagedBitmapWrapper.cs
- PeerInvitationResponse.cs
- ValueSerializerAttribute.cs
- CallId.cs
- URLIdentityPermission.cs
- Tokenizer.cs
- MatrixTransform.cs
- Attributes.cs
- CompiledAction.cs
- ConfigurationHandlersInstallComponent.cs
- RtfToXamlReader.cs
- xmlfixedPageInfo.cs
- TextContainerChangeEventArgs.cs
- DynamicPropertyHolder.cs
- X509CertificateTrustedIssuerElementCollection.cs
- MatrixStack.cs
- StagingAreaInputItem.cs
- AssemblyAssociatedContentFileAttribute.cs
- ScrollItemPattern.cs
- MatrixKeyFrameCollection.cs
- CompilerError.cs
- DBSqlParser.cs
- OdbcFactory.cs
- HandleRef.cs
- SqlBulkCopyColumnMapping.cs
- ExpressionWriter.cs
- InheritedPropertyDescriptor.cs