Win32KeyboardDevice.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 / Win32KeyboardDevice.cs / 1305600 / Win32KeyboardDevice.cs

                            using System.Collections; 
using System.Windows;
using System.Security;
using System.Security.Permissions;
using MS.Internal; 
using MS.Internal.PresentationCore;                        // SecurityHelper
using System.Windows.Media; 
using MS.Win32; // VK translation. 

using System; 

using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
 
namespace System.Windows.Input
{ 
    ///  
    ///     The Win32KeyboardDevice class implements the platform specific
    ///     KeyboardDevice features for the Win32 platform 
    /// 
    internal sealed class Win32KeyboardDevice : KeyboardDevice
    {
        ///  
        ///
        ///  
        ///  
        /// 
        ///  
        ///     Critical: This code creates critical data(_tsfManager,_textcompositionManager) and stores critical data (inputManager)
        ///     TreatAsSafe: Although it creates critical data there are demand on the critical data and the constructor is safe
        /// 
        [SecurityCritical,SecurityTreatAsSafe] 
        internal Win32KeyboardDevice(InputManager inputManager)
            : base(inputManager) 
        { 
        }
 
        /// 
        ///     Gets the current state of the specified key from the device from the underlying system
        /// 
        ///  
        ///     Key to get the state of
        ///  
        ///  
        ///     The state of the specified key
        ///  
        /// 
        ///     Critical: Makes calls to UnsafeNativeMethods (GetKeyState)
        ///     TreatAsSafe: We will not expose the state of keys in
        ///                  partially trusted AppDomains unless a WPF 
        ///                  window in this AppDomain has focus.  An
        ///                  exception is made for modifier keys. 
        ///  
        [SecurityCritical, SecurityTreatAsSafe]
        protected override KeyStates GetKeyStatesFromSystem(Key key) 
        {
            KeyStates keyStates = KeyStates.None;

            bool getKeyStatesFromSystem = false; 
            if(IsActive)
            { 
                // Our keyboard device is only active if some WPF window in 
                // this AppDomain has focus.  It is always safe to return
                // the state of keys. 
                getKeyStatesFromSystem = true;
            }
            else if (SecurityHelper.AppDomainGrantedUnrestrictedUIPermission)
            { 
                // This is a trusted AppDomain, so we are willing to expose
                // the state of keys regardless of whether or not a WPF 
                // window has focus.  This is important for child HWND 
                // hosting scenarios.
                getKeyStatesFromSystem = true; 
            }
            else
            {
                // Security Mitigation: 
                // No WPF window has focus in this AppDomain, and this is a
                // partially-trusted AppDomain, so we do not generally want 
                // to expose the state of keys.  However, we make an exception 
                // for modifier keys, as they are considered safe.
                switch (key) 
                {
                    case Key.LeftAlt:
                    case Key.RightAlt:
                    case Key.LeftCtrl: 
                    case Key.RightCtrl:
                    case Key.LeftShift: 
                    case Key.RightShift: 
                        getKeyStatesFromSystem = true;
                        break; 
                }
            }

            if (getKeyStatesFromSystem) 
            {
                int virtualKeyCode = KeyInterop.VirtualKeyFromKey(key); 
                int nativeKeyState; 

                nativeKeyState = UnsafeNativeMethods.GetKeyState(virtualKeyCode); 

                if( (nativeKeyState & 0x00008000) == 0x00008000 )
                    keyStates |= KeyStates.Down;
 
                if( (nativeKeyState & 0x00000001) == 0x00000001 )
                    keyStates |= KeyStates.Toggled; 
            } 

            return keyStates; 
        }
    }
}
 

// 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