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
- MultilineStringConverter.cs
- HMACSHA512.cs
- LineSegment.cs
- AttachmentCollection.cs
- SerializationInfoEnumerator.cs
- RSAOAEPKeyExchangeDeformatter.cs
- PolicyChain.cs
- CounterSetInstanceCounterDataSet.cs
- FormsAuthenticationCredentials.cs
- HtmlInputCheckBox.cs
- VSDExceptions.cs
- ExplicitDiscriminatorMap.cs
- FigureParaClient.cs
- DesignTimeVisibleAttribute.cs
- CustomCategoryAttribute.cs
- TableItemProviderWrapper.cs
- ObjectDataSourceFilteringEventArgs.cs
- CommandID.cs
- AuthenticationSection.cs
- RemoteWebConfigurationHostStream.cs
- CodeObjectCreateExpression.cs
- AdornerPresentationContext.cs
- BrowserCapabilitiesCodeGenerator.cs
- AppDomainAttributes.cs
- X509CertificateClaimSet.cs
- DataSourceProvider.cs
- MessagingActivityHelper.cs
- PageContentAsyncResult.cs
- NetworkInformationException.cs
- ModelPerspective.cs
- DatatypeImplementation.cs
- TemplateXamlTreeBuilder.cs
- ProxyGenerator.cs
- EventSourceCreationData.cs
- EventItfInfo.cs
- ColumnResizeAdorner.cs
- Decimal.cs
- TraceXPathNavigator.cs
- CustomCredentialPolicy.cs
- TableColumn.cs
- TableLayoutCellPaintEventArgs.cs
- UrlUtility.cs
- MeasureItemEvent.cs
- ScrollChrome.cs
- UnionCqlBlock.cs
- UpdateRecord.cs
- AudioBase.cs
- TextWriterEngine.cs
- IdentityNotMappedException.cs
- safex509handles.cs
- SimpleLine.cs
- DbConnectionStringBuilder.cs
- RegexRunner.cs
- _SafeNetHandles.cs
- UnsafeNativeMethods.cs
- FlowDocument.cs
- ToolStripGripRenderEventArgs.cs
- ReflectionPermission.cs
- NameObjectCollectionBase.cs
- MethodInfo.cs
- diagnosticsswitches.cs
- IndexingContentUnit.cs
- listitem.cs
- _AutoWebProxyScriptWrapper.cs
- FontCollection.cs
- MediaScriptCommandRoutedEventArgs.cs
- PropertyConverter.cs
- WorkflowItemPresenter.cs
- NamedPipeChannelFactory.cs
- pingexception.cs
- PopOutPanel.cs
- HelpEvent.cs
- QilReplaceVisitor.cs
- DependencyPropertyKind.cs
- PriorityChain.cs
- IndependentlyAnimatedPropertyMetadata.cs
- DataGridCheckBoxColumn.cs
- ListSortDescriptionCollection.cs
- PerformanceCounterLib.cs
- TextContainer.cs
- SqlInternalConnectionSmi.cs
- WebSysDescriptionAttribute.cs
- MetadataItemCollectionFactory.cs
- TextViewBase.cs
- XmlCharCheckingWriter.cs
- ImmutableClientRuntime.cs
- FocusManager.cs
- StylusPlugin.cs
- BeginStoryboard.cs
- PersonalizationState.cs
- IApplicationTrustManager.cs
- DetailsViewInsertEventArgs.cs
- TdsParserHelperClasses.cs
- AppDomainAttributes.cs
- TextTreeUndo.cs
- TriState.cs
- WindowsRichEditRange.cs
- AppendHelper.cs
- RequestCacheManager.cs
- RepeatBehaviorConverter.cs