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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ReadOnlyHierarchicalDataSource.cs
- InputBuffer.cs
- HostingEnvironmentException.cs
- ProgressBarRenderer.cs
- ResXResourceReader.cs
- XmlKeywords.cs
- ItemContainerProviderWrapper.cs
- LogExtentCollection.cs
- CatalogPartDesigner.cs
- GridViewCellAutomationPeer.cs
- DEREncoding.cs
- FlowDocumentPageViewerAutomationPeer.cs
- ObjectSecurity.cs
- WindowsListBox.cs
- TagNameToTypeMapper.cs
- DockProviderWrapper.cs
- CookieHandler.cs
- BaseDataListDesigner.cs
- MenuEventArgs.cs
- XPathNavigatorKeyComparer.cs
- StdValidatorsAndConverters.cs
- HttpCookieCollection.cs
- HtmlWindowCollection.cs
- StateWorkerRequest.cs
- TableParaClient.cs
- XmlDataProvider.cs
- HtmlEncodedRawTextWriter.cs
- PointHitTestParameters.cs
- MultiPropertyDescriptorGridEntry.cs
- DataTableCollection.cs
- DoubleLinkList.cs
- BackgroundWorker.cs
- ConfigXmlAttribute.cs
- LocatorPart.cs
- cryptoapiTransform.cs
- WindowsListViewGroup.cs
- FlowchartSizeFeature.cs
- DropDownButton.cs
- RuntimeConfigLKG.cs
- DataGridViewDesigner.cs
- ServerProtocol.cs
- LinkArea.cs
- CurrentChangingEventManager.cs
- DesignerHost.cs
- PageRequestManager.cs
- TagMapCollection.cs
- NamedPipeHostedTransportConfiguration.cs
- UiaCoreProviderApi.cs
- SafeMILHandle.cs
- ApplicationManager.cs
- FontInfo.cs
- FileEnumerator.cs
- FrameSecurityDescriptor.cs
- DesignerAutoFormatStyle.cs
- HtmlTableCellCollection.cs
- InkPresenterAutomationPeer.cs
- WebPartMinimizeVerb.cs
- URIFormatException.cs
- IDispatchConstantAttribute.cs
- QueryExpr.cs
- MergeLocalizationDirectives.cs
- HebrewNumber.cs
- DebugInfo.cs
- UriTemplateDispatchFormatter.cs
- AvTrace.cs
- ModelFunctionTypeElement.cs
- VisualStateChangedEventArgs.cs
- PeerToPeerException.cs
- FormViewModeEventArgs.cs
- dsa.cs
- SplitterEvent.cs
- RouteParameter.cs
- PlanCompilerUtil.cs
- Page.cs
- PlanCompilerUtil.cs
- CurrencyWrapper.cs
- TableColumnCollectionInternal.cs
- XmlNamespaceMapping.cs
- CodeSubDirectoriesCollection.cs
- BitmapVisualManager.cs
- GeneralTransform3DTo2D.cs
- TextRangeProviderWrapper.cs
- HttpMethodAttribute.cs
- WebControlsSection.cs
- BitmapEffectGroup.cs
- WebSysDisplayNameAttribute.cs
- ConfigurationSchemaErrors.cs
- StrongNameKeyPair.cs
- ResourceDictionary.cs
- Int16.cs
- RelationshipFixer.cs
- Page.cs
- TextParaLineResult.cs
- Simplifier.cs
- PageWrapper.cs
- ErrorRuntimeConfig.cs
- TypeLibConverter.cs
- GacUtil.cs
- PrefixQName.cs
- ResizingMessageFilter.cs