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
- Point3D.cs
- TagMapCollection.cs
- CodeDomConfigurationHandler.cs
- DelayedRegex.cs
- SecureStringHasher.cs
- ActivityDelegate.cs
- FrameworkElementAutomationPeer.cs
- DataGridViewImageColumn.cs
- EntityParameterCollection.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- TemplateAction.cs
- GridItemPattern.cs
- FixedSOMLineRanges.cs
- DynamicValueConverter.cs
- TextEmbeddedObject.cs
- FilterQuery.cs
- TableLayoutPanelResizeGlyph.cs
- XmlStringTable.cs
- designeractionbehavior.cs
- RenamedEventArgs.cs
- VirtualPathUtility.cs
- DocumentViewerAutomationPeer.cs
- XamlValidatingReader.cs
- XmlDataSourceNodeDescriptor.cs
- ConfigXmlComment.cs
- ProfileParameter.cs
- PageRanges.cs
- HtmlTableRow.cs
- ProcessStartInfo.cs
- LinkedResourceCollection.cs
- DefaultCompensation.cs
- XmlSchemaSearchPattern.cs
- graph.cs
- Vector3DCollectionValueSerializer.cs
- AdRotator.cs
- AppSettingsExpressionBuilder.cs
- BoolExpressionVisitors.cs
- ManagementQuery.cs
- CompiledQuery.cs
- ErrorFormatterPage.cs
- FileLogRecordHeader.cs
- Wildcard.cs
- TaskbarItemInfo.cs
- WebPartExportVerb.cs
- ObjectCloneHelper.cs
- MimeFormReflector.cs
- CodeExpressionStatement.cs
- DataListCommandEventArgs.cs
- WindowsPen.cs
- CustomErrorsSectionWrapper.cs
- PerformanceCounterLib.cs
- WorkflowViewService.cs
- ChannelManagerBase.cs
- TargetInvocationException.cs
- CollectionBuilder.cs
- HorizontalAlignConverter.cs
- MimeBasePart.cs
- AuthenticationModuleElement.cs
- PassportAuthentication.cs
- DescendantBaseQuery.cs
- BitmapEffect.cs
- SchemaTableColumn.cs
- QueryOutputWriter.cs
- EndpointIdentityConverter.cs
- SelectionPattern.cs
- WebBrowserBase.cs
- AliasExpr.cs
- XmlAnyElementAttribute.cs
- AssemblyBuilder.cs
- SimpleHandlerFactory.cs
- SimpleTextLine.cs
- DesignerAdRotatorAdapter.cs
- TimeZoneNotFoundException.cs
- XpsInterleavingPolicy.cs
- DbConnectionPoolGroupProviderInfo.cs
- AsyncSerializedWorker.cs
- FastEncoder.cs
- ResourceDictionaryCollection.cs
- ScrollBarRenderer.cs
- HMACSHA1.cs
- Configuration.cs
- PersistenceContextEnlistment.cs
- ImageEditor.cs
- ToolStripPanelRenderEventArgs.cs
- PTUtility.cs
- ColorAnimationBase.cs
- HtmlLabelAdapter.cs
- GenericAuthenticationEventArgs.cs
- HtmlGenericControl.cs
- TitleStyle.cs
- AnimationStorage.cs
- XpsFilter.cs
- SqlConnectionFactory.cs
- InkPresenterAutomationPeer.cs
- updatecommandorderer.cs
- TextSegment.cs
- HttpCapabilitiesBase.cs
- AuthenticationConfig.cs
- WinEventWrap.cs
- Rect3DValueSerializer.cs