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
- _ReceiveMessageOverlappedAsyncResult.cs
- XpsPackagingException.cs
- StrongNameUtility.cs
- DependencyObject.cs
- _NativeSSPI.cs
- Message.cs
- ImmutableDispatchRuntime.cs
- MonitorWrapper.cs
- Win32SafeHandles.cs
- SqlDependency.cs
- XsdDateTime.cs
- X509SecurityToken.cs
- ResourcePermissionBase.cs
- basecomparevalidator.cs
- BinaryObjectInfo.cs
- TextDecorations.cs
- MULTI_QI.cs
- ListView.cs
- InputReport.cs
- BlockingCollection.cs
- CaseStatementSlot.cs
- HttpModulesSection.cs
- RegistrySecurity.cs
- InvalidDataContractException.cs
- EllipseGeometry.cs
- ProcessModuleCollection.cs
- FlowDocumentPaginator.cs
- WebControl.cs
- RelatedCurrencyManager.cs
- DataServiceRequest.cs
- ConfigurationManager.cs
- GridViewColumnCollection.cs
- RijndaelManaged.cs
- Config.cs
- ListViewItem.cs
- SecurityToken.cs
- XmlSchemaAll.cs
- BufferAllocator.cs
- SqlMethods.cs
- TemplateControlParser.cs
- CompilationSection.cs
- DataSourceCacheDurationConverter.cs
- Update.cs
- ViewCellRelation.cs
- CheckBox.cs
- HyperLinkColumn.cs
- XMLSchema.cs
- baseaxisquery.cs
- Registry.cs
- DesignerActionHeaderItem.cs
- EncodingInfo.cs
- ProcessModule.cs
- ConfigurationStrings.cs
- DESCryptoServiceProvider.cs
- IPCCacheManager.cs
- OrderPreservingPipeliningSpoolingTask.cs
- CultureInfoConverter.cs
- DataServiceQueryProvider.cs
- WebSysDescriptionAttribute.cs
- TextBounds.cs
- ReferentialConstraint.cs
- FileLevelControlBuilderAttribute.cs
- RelationshipEnd.cs
- WebEvents.cs
- MissingManifestResourceException.cs
- CacheSection.cs
- CommonRemoteMemoryBlock.cs
- EmptyCollection.cs
- RuleSettingsCollection.cs
- TransactedBatchingElement.cs
- ExceptionHandler.cs
- HttpTransportSecurityElement.cs
- DoubleStorage.cs
- JpegBitmapDecoder.cs
- PerfService.cs
- DataGridViewLinkCell.cs
- GraphicsContext.cs
- Binding.cs
- TraceSource.cs
- Style.cs
- Int32Rect.cs
- JsonQueryStringConverter.cs
- SimpleExpression.cs
- RawStylusInputCustomData.cs
- TextFormattingConverter.cs
- GroupLabel.cs
- EntityDataSourceWrapper.cs
- ColorConvertedBitmapExtension.cs
- DefaultParameterValueAttribute.cs
- SecurityDescriptor.cs
- ColorDialog.cs
- MultiTrigger.cs
- InternalCache.cs
- RawStylusSystemGestureInputReport.cs
- MessageQueueTransaction.cs
- WebPartCatalogAddVerb.cs
- DataTableNewRowEvent.cs
- SettingsSavedEventArgs.cs
- SqlDataSourceEnumerator.cs
- ObjectContextServiceProvider.cs