InputProviderSite.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / InputProviderSite.cs / 1305600 / InputProviderSite.cs

                            using System; 
using System.Security;
using System.Security.Permissions;
using MS.Internal;
using MS.Internal.PresentationCore;                        // SecurityHelper 
using MS.Win32;
using System.Windows.Threading; 
 
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID; 

namespace System.Windows.Input
{
    ///  
    ///     The object which input providers use to report input to the input
    ///     manager. 
    ///  
    internal class InputProviderSite : IDisposable
    { 
        /// 
        ///     Critical: This code creates critical data in the form of InputManager and InputProvider
        /// 
        [SecurityCritical] 
        internal InputProviderSite(InputManager inputManager, IInputProvider inputProvider)
        { 
            _inputManager = new SecurityCriticalDataClass(inputManager); 
            _inputProvider = new SecurityCriticalDataClass(inputProvider);
        } 

        /// 
        ///     Returns the input manager that this site is attached to.
        ///  
        /// 
        ///     Critical: We do not want to expose the Input manager in the SEE 
        ///     TreatAsSafe: This code has a demand in it 
        /// 
        public InputManager InputManager 
        {
            [SecurityCritical,SecurityTreatAsSafe]
            get
            { 
                SecurityHelper.DemandUnrestrictedUIPermission();
                return CriticalInputManager; 
            } 
        }
 
        /// 
        ///     Returns the input manager that this site is attached to.
        /// 
        ///  
        ///     Critical: We do not want to expose the Input manager in the SEE
        ///  
        internal InputManager CriticalInputManager 
        {
            [SecurityCritical] 
            get
            {
                return _inputManager.Value;
            } 
        }
 
        ///  
        ///     Unregisters this input provider.
        ///  
        /// 
        ///     Critical: This code accesses critical data (InputManager and InputProvider).
        ///     TreatAsSafe: The critical data is not exposed outside this call
        ///  
        [SecurityCritical,SecurityTreatAsSafe]
        public void Dispose() 
        { 
            GC.SuppressFinalize(this);
            if (!_isDisposed) 
            {
                _isDisposed = true;

                if (_inputManager != null && _inputProvider != null) 
                {
                    _inputManager.Value.UnregisterInputProvider(_inputProvider.Value); 
                } 
                _inputManager = null;
                _inputProvider = null; 
            }
        }

        ///  
        /// Returns true if the CompositionTarget is disposed.
        ///  
        public bool IsDisposed 
        {
            get 
            {
                return _isDisposed;
            }
        } 

        ///  
        ///     Reports input to the input manager. 
        /// 
        ///  
        ///     Whether or not any event generated as a consequence of this
        ///     event was handled.
        /// 
        ///  
        ///     Critical:This code is critical and can be used in event spoofing. It also accesses
        ///     InputManager and calls into ProcessInput which is critical. 
         ///  
        //
 
        [SecurityCritical ]
        [UIPermissionAttribute(SecurityAction.LinkDemand,Unrestricted = true)]
        public bool ReportInput(InputReport inputReport)
        { 
            if(IsDisposed)
            { 
                throw new ObjectDisposedException(SR.Get(SRID.InputProviderSiteDisposed)); 
            }
 
            bool handled = false;

            InputReportEventArgs input = new InputReportEventArgs(null, inputReport);
            input.RoutedEvent=InputManager.PreviewInputReportEvent; 

            if(_inputManager != null) 
            { 
                handled = _inputManager.Value.ProcessInput(input);
            } 

            return handled;
        }
 
        private bool _isDisposed;
        ///  
        ///     Critical: This object should not be exposed in the SEE as it can be 
        ///     used for input spoofing
        ///  
        private SecurityCriticalDataClass _inputManager;
        /// 
        ///     Critical: This object should not be exposed in the SEE as it can be
        ///     used for input spoofing 
        /// 
        private SecurityCriticalDataClass _inputProvider; 
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK