Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- WebPartAddingEventArgs.cs
- RegistryPermission.cs
- Axis.cs
- MDIWindowDialog.cs
- XPathScanner.cs
- Point3DCollection.cs
- StylusEditingBehavior.cs
- Geometry3D.cs
- HttpWebRequest.cs
- DocumentPageView.cs
- XPathChildIterator.cs
- PackagePartCollection.cs
- TableItemPatternIdentifiers.cs
- WeakHashtable.cs
- TextSelectionHighlightLayer.cs
- ToolStripMenuItem.cs
- PeerContact.cs
- CodeDirectionExpression.cs
- ParseChildrenAsPropertiesAttribute.cs
- DocumentViewerBase.cs
- Win32.cs
- TextParaLineResult.cs
- CompModSwitches.cs
- RequestResizeEvent.cs
- Avt.cs
- ConfigXmlAttribute.cs
- MarshalByValueComponent.cs
- Column.cs
- Console.cs
- OleDbConnectionFactory.cs
- Socket.cs
- ToolStripControlHost.cs
- ProtocolsConfigurationHandler.cs
- TextEditor.cs
- PassportAuthentication.cs
- Connector.cs
- PointCollectionConverter.cs
- Memoizer.cs
- MappingItemCollection.cs
- HighContrastHelper.cs
- Closure.cs
- SQLBinaryStorage.cs
- SamlSecurityToken.cs
- InternalsVisibleToAttribute.cs
- InstalledFontCollection.cs
- DependencyObjectProvider.cs
- CodeExpressionStatement.cs
- WebDisplayNameAttribute.cs
- FormsAuthenticationUser.cs
- WindowsSlider.cs
- WebPartConnectionsCancelVerb.cs
- GlobalizationAssembly.cs
- NameValueFileSectionHandler.cs
- FileDialogCustomPlace.cs
- unsafeIndexingFilterStream.cs
- XmlSchemaAttributeGroupRef.cs
- DoubleAnimationUsingKeyFrames.cs
- MetadataCollection.cs
- DmlSqlGenerator.cs
- BulletChrome.cs
- InternalCompensate.cs
- EntryIndex.cs
- MenuItem.cs
- OracleTimeSpan.cs
- WeakRefEnumerator.cs
- ThreadAbortException.cs
- WebEncodingValidatorAttribute.cs
- SelfIssuedAuthProofToken.cs
- KeyGestureValueSerializer.cs
- BuildProvidersCompiler.cs
- AnimatedTypeHelpers.cs
- WorkflowIdleElement.cs
- Mappings.cs
- ListViewDataItem.cs
- NameService.cs
- SchemaNotation.cs
- ProtocolViolationException.cs
- DefaultAssemblyResolver.cs
- SspiNegotiationTokenAuthenticator.cs
- TransformerConfigurationWizardBase.cs
- ViewCellSlot.cs
- HttpException.cs
- ILGenerator.cs
- PersonalizationProviderHelper.cs
- PropertyGeneratedEventArgs.cs
- WindowsClientCredential.cs
- CompilationSection.cs
- Cursors.cs
- RowSpanVector.cs
- RtfControlWordInfo.cs
- ExtentCqlBlock.cs
- FontNameEditor.cs
- PageCodeDomTreeGenerator.cs
- SingleConverter.cs
- ParsedAttributeCollection.cs
- BuildProvider.cs
- PageAsyncTaskManager.cs
- safelink.cs
- OnOperation.cs
- NotSupportedException.cs