Code:
/ 4.0 / 4.0 / 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. 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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CriticalFinalizerObject.cs
- Condition.cs
- SymbolType.cs
- IsolatedStorageFile.cs
- ContentHostHelper.cs
- PbrsForward.cs
- PageAsyncTask.cs
- SystemIPGlobalStatistics.cs
- ResXDataNode.cs
- NativeObjectSecurity.cs
- DataServiceCollectionOfT.cs
- WebPartUserCapability.cs
- PrivilegedConfigurationManager.cs
- XmlParserContext.cs
- SHA1.cs
- BamlTreeUpdater.cs
- SqlOuterApplyReducer.cs
- TextContainerHelper.cs
- QilGenerator.cs
- AuthorizationSection.cs
- ConnectionModeReader.cs
- MonthCalendar.cs
- DataContractSet.cs
- LicenseContext.cs
- DataGridViewColumnConverter.cs
- PrintControllerWithStatusDialog.cs
- HwndHost.cs
- ItemChangedEventArgs.cs
- TransformCollection.cs
- ErrorInfoXmlDocument.cs
- TemplateNameScope.cs
- ResXDataNode.cs
- DataGridViewUtilities.cs
- XhtmlBasicCommandAdapter.cs
- TransformValueSerializer.cs
- CommandEventArgs.cs
- ConstructorBuilder.cs
- QueryModel.cs
- DynamicQueryableWrapper.cs
- ToolStripProgressBar.cs
- XhtmlMobileTextWriter.cs
- ExtensibleSyndicationObject.cs
- TrackBar.cs
- ControlBuilderAttribute.cs
- CanExecuteRoutedEventArgs.cs
- StylusPointPropertyUnit.cs
- AspNetRouteServiceHttpHandler.cs
- MsmqTransportBindingElement.cs
- CallSite.cs
- Path.cs
- DeferredElementTreeState.cs
- AttachInfo.cs
- DataSourceConverter.cs
- ConfigXmlElement.cs
- RecognitionResult.cs
- BasePropertyDescriptor.cs
- TextHidden.cs
- XmlSerializerFactory.cs
- ProcessThread.cs
- PermissionRequestEvidence.cs
- DataBoundControl.cs
- StorageMappingFragment.cs
- DesignerDataSourceView.cs
- JavaScriptSerializer.cs
- RawMouseInputReport.cs
- Calendar.cs
- UnsafeNativeMethods.cs
- HtmlInputControl.cs
- OleDbException.cs
- MenuItemStyleCollection.cs
- ConfigurationStrings.cs
- QueryExecutionOption.cs
- XmlAttributeHolder.cs
- xmlNames.cs
- HtmlForm.cs
- TcpDuplicateContext.cs
- ConnectionPoint.cs
- DataColumnChangeEvent.cs
- UpdateCommandGenerator.cs
- PolicyLevel.cs
- FormViewPageEventArgs.cs
- Point3DCollectionConverter.cs
- CanonicalFontFamilyReference.cs
- adornercollection.cs
- CompModHelpers.cs
- ContentControl.cs
- BitSet.cs
- MatrixCamera.cs
- FontEmbeddingManager.cs
- StatusBarDrawItemEvent.cs
- SqlCrossApplyToCrossJoin.cs
- AddInControllerImpl.cs
- AssemblyNameProxy.cs
- PassportAuthenticationEventArgs.cs
- ConnectionStringsExpressionBuilder.cs
- TextTreeExtractElementUndoUnit.cs
- OraclePermission.cs
- TranslateTransform.cs
- StructuredType.cs
- TreeNodeSelectionProcessor.cs