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
- DeflateEmulationStream.cs
- AutoSizeToolBoxItem.cs
- TextBoxAutoCompleteSourceConverter.cs
- Rotation3D.cs
- DataObjectEventArgs.cs
- XmlQualifiedNameTest.cs
- WebPartManagerDesigner.cs
- VersionedStream.cs
- SortedDictionary.cs
- MiniConstructorInfo.cs
- DllNotFoundException.cs
- UIElementParagraph.cs
- MessageBuffer.cs
- RowUpdatedEventArgs.cs
- ResourcesGenerator.cs
- XmlDomTextWriter.cs
- PeerCollaborationPermission.cs
- ToolBarOverflowPanel.cs
- ImageInfo.cs
- SelectionRangeConverter.cs
- FrameworkContentElement.cs
- _LocalDataStore.cs
- QilXmlWriter.cs
- CaseStatement.cs
- ProjectionCamera.cs
- BrushConverter.cs
- adornercollection.cs
- querybuilder.cs
- oledbmetadatacolumnnames.cs
- TreeViewItem.cs
- WebServiceParameterData.cs
- WMIGenerator.cs
- ToolStripOverflowButton.cs
- ClientSideProviderDescription.cs
- Renderer.cs
- CustomErrorsSection.cs
- SeekStoryboard.cs
- MultipleViewProviderWrapper.cs
- SessionStateModule.cs
- VariableDesigner.xaml.cs
- IntegrationExceptionEventArgs.cs
- DeferredReference.cs
- SQLInt32.cs
- WebPartDeleteVerb.cs
- Debugger.cs
- BinaryMethodMessage.cs
- COSERVERINFO.cs
- IssuedTokenParametersEndpointAddressElement.cs
- HyperLinkColumn.cs
- XPathBuilder.cs
- GroupBoxAutomationPeer.cs
- nulltextcontainer.cs
- FormParameter.cs
- EndpointDesigner.cs
- RoleManagerEventArgs.cs
- GenericWebPart.cs
- IncrementalCompileAnalyzer.cs
- TextTreeTextNode.cs
- PointHitTestResult.cs
- DrawingGroup.cs
- XamlReader.cs
- SchemaTypeEmitter.cs
- ServerIdentity.cs
- CodeCastExpression.cs
- XmlAttributeOverrides.cs
- TableHeaderCell.cs
- precedingquery.cs
- HttpFileCollection.cs
- ValidationRuleCollection.cs
- GenerateTemporaryAssemblyTask.cs
- JapaneseCalendar.cs
- RegexCompilationInfo.cs
- WinEventQueueItem.cs
- XmlSchemaAny.cs
- RepeaterCommandEventArgs.cs
- FileSystemInfo.cs
- ConnectionPoolManager.cs
- SchemaCollectionCompiler.cs
- URLIdentityPermission.cs
- SerialPinChanges.cs
- XmlSchemaValidationException.cs
- SessionEndingEventArgs.cs
- XmlTextAttribute.cs
- _NegotiateClient.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- SQLGuid.cs
- MediaTimeline.cs
- StorageTypeMapping.cs
- SHA384.cs
- ComponentConverter.cs
- AttachmentCollection.cs
- ListViewDeleteEventArgs.cs
- RemoteWebConfigurationHostServer.cs
- SiteMapProvider.cs
- WebPartHelpVerb.cs
- wmiprovider.cs
- TypeHelper.cs
- XmlStreamStore.cs
- XamlWriter.cs
- LockCookie.cs