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
- DrawingContext.cs
- DataConnectionHelper.cs
- Image.cs
- ToolStripButton.cs
- TimeSpanValidatorAttribute.cs
- ObjectHandle.cs
- ComponentResourceKeyConverter.cs
- CngKeyCreationParameters.cs
- LocalizableAttribute.cs
- BitmapFrameEncode.cs
- SettingsBase.cs
- LinkTarget.cs
- ApplicationSecurityManager.cs
- Logging.cs
- TrackingLocation.cs
- DataSourceDesigner.cs
- DesignerAdapterAttribute.cs
- TextCompositionEventArgs.cs
- ReachPrintTicketSerializer.cs
- NameNode.cs
- JpegBitmapEncoder.cs
- SerializerProvider.cs
- MemberRelationshipService.cs
- FilterableAttribute.cs
- NotificationContext.cs
- XmlSchemaAnyAttribute.cs
- UIElement.cs
- ListViewContainer.cs
- Debug.cs
- DebugView.cs
- DropShadowBitmapEffect.cs
- SmtpNetworkElement.cs
- RadioButtonPopupAdapter.cs
- Ipv6Element.cs
- NetworkInformationException.cs
- DesignerUtility.cs
- DataGridCellInfo.cs
- StrokeFIndices.cs
- GuidelineSet.cs
- EncryptedPackageFilter.cs
- FixedTextBuilder.cs
- SiteMapNodeCollection.cs
- PageAsyncTaskManager.cs
- PrintEvent.cs
- XmlIlTypeHelper.cs
- DefaultValueTypeConverter.cs
- OracleFactory.cs
- FontSourceCollection.cs
- COSERVERINFO.cs
- DelegateCompletionCallbackWrapper.cs
- DesignerActionPanel.cs
- AsyncInvokeContext.cs
- ExpressionLexer.cs
- XmlHelper.cs
- InnerItemCollectionView.cs
- ContainerAction.cs
- BamlCollectionHolder.cs
- DateTimeOffsetStorage.cs
- XmlSchemaAttribute.cs
- FontFamilyIdentifier.cs
- CompressionTransform.cs
- FontEditor.cs
- ResourceKey.cs
- ManifestSignedXml.cs
- WindowsClaimSet.cs
- EndSelectCardRequest.cs
- AmbientValueAttribute.cs
- SqlDataAdapter.cs
- SoapFormatExtensions.cs
- ImageKeyConverter.cs
- HostingEnvironmentWrapper.cs
- MarshalDirectiveException.cs
- HtmlContainerControl.cs
- StringStorage.cs
- BackgroundWorker.cs
- ResolveRequestResponseAsyncResult.cs
- Color.cs
- CategoryAttribute.cs
- validationstate.cs
- DataControlField.cs
- BindingList.cs
- UnconditionalPolicy.cs
- SymbolPair.cs
- Convert.cs
- Mapping.cs
- CodeDirectionExpression.cs
- GridItemPattern.cs
- Context.cs
- GPPOINTF.cs
- DocumentOrderQuery.cs
- SoapTypeAttribute.cs
- GroupLabel.cs
- UnsafeNetInfoNativeMethods.cs
- UserControlAutomationPeer.cs
- SizeConverter.cs
- SettingsPropertyIsReadOnlyException.cs
- PropertyItemInternal.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- dataprotectionpermissionattribute.cs
- QueryOutputWriter.cs