Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / System / Windows / InterOp / HwndAppCommandInputProvider.cs / 1 / HwndAppCommandInputProvider.cs
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using MS.Utility;
using MS.Internal;
using MS.Win32;
namespace System.Windows.Interop
{
internal sealed class HwndAppCommandInputProvider : DispatcherObject, IInputProvider, IDisposable
{
///
/// Accesses and store critical data. This class is also critical (_site and _source)
///
[SecurityCritical]
internal HwndAppCommandInputProvider( HwndSource source )
{
(new UIPermission(PermissionState.Unrestricted)).Assert();
try
{
_site = new SecurityCriticalDataClass(InputManager.Current.RegisterInputProvider(this));
}
finally
{
UIPermission.RevertAssert();
}
_source = new SecurityCriticalDataClass(source);
}
///
/// Critical:This class accesses critical data, _site.
/// TreatAsSafe: This class does not expose the critical data
///
[SecurityCritical, SecurityTreatAsSafe]
public void Dispose( )
{
if (_site != null)
{
_site.Value.Dispose();
_site = null;
}
_source = null;
}
///
/// Critical: As this accesses critical data HwndSource
/// TreatAsSafe:Information about whether a given input provider services
/// a visual is safe to expose. This method does not expose the critical data either.
///
[SecurityCritical, SecurityTreatAsSafe]
bool IInputProvider.ProvidesInputForRootVisual( Visual v )
{
Debug.Assert(null != _source);
return _source.Value.RootVisual == v;
}
void IInputProvider.NotifyDeactivate() {}
///
/// Critical: As this accesses critical data HwndSource
///
[SecurityCritical]
internal IntPtr FilterMessage( IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled )
{
// It is possible to be re-entered during disposal. Just return.
if(null == _source || null == _source.Value)
{
return IntPtr.Zero;
}
if (msg == NativeMethods.WM_APPCOMMAND)
{
// WM_APPCOMMAND message notifies a window that the user generated an application command event,
// for example, by clicking an application command button using the mouse or typing an application command
// key on the keyboard.
RawAppCommandInputReport report = new RawAppCommandInputReport(
_source.Value,
InputMode.Foreground,
SafeNativeMethods.GetMessageTime(),
GetAppCommand(lParam),
GetDevice(lParam),
InputType.Command);
handled = _site.Value.ReportInput(report);
}
return handled ? new IntPtr(1) : IntPtr.Zero ;
}
///
/// Implementation of the GET_APPCOMMAND_LPARAM macro defined in Winuser.h
///
///
///
private static int GetAppCommand( IntPtr lParam )
{
return ((short)(NativeMethods.SignedHIWORD(NativeMethods.IntPtrToInt32(lParam)) & ~NativeMethods.FAPPCOMMAND_MASK));
}
///
/// Returns the input device that originated this app command.
/// InputType.Hid represents an unspecified device that is neither the
/// keyboard nor the mouse.
///
///
///
private static InputType GetDevice(IntPtr lParam)
{
InputType inputType = InputType.Hid;
// Implementation of the GET_DEVICE_LPARAM macro defined in Winuser.h
// Returns either FAPPCOMMAND_KEY (the user pressed a key), FAPPCOMMAND_MOUSE
// (the user clicked a mouse button) or FAPPCOMMAND_OEM (unknown device)
ushort deviceId = (ushort)(NativeMethods.SignedHIWORD(NativeMethods.IntPtrToInt32(lParam)) & NativeMethods.FAPPCOMMAND_MASK);
switch (deviceId)
{
case NativeMethods.FAPPCOMMAND_MOUSE:
inputType = InputType.Mouse;
break;
case NativeMethods.FAPPCOMMAND_KEY:
inputType = InputType.Keyboard;
break;
case NativeMethods.FAPPCOMMAND_OEM:
default:
// Unknown device id or FAPPCOMMAND_OEM.
// In either cases we set it to the generic human interface device.
inputType=InputType.Hid;
break;
}
return inputType;
}
///
/// This is got under an elevation and is hence critical. This data is not ok to expose.
///
private SecurityCriticalDataClass _source;
///
/// This is got under an elevation and is hence critical.This data is not ok to expose.
///
private SecurityCriticalDataClass _site;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using MS.Utility;
using MS.Internal;
using MS.Win32;
namespace System.Windows.Interop
{
internal sealed class HwndAppCommandInputProvider : DispatcherObject, IInputProvider, IDisposable
{
///
/// Accesses and store critical data. This class is also critical (_site and _source)
///
[SecurityCritical]
internal HwndAppCommandInputProvider( HwndSource source )
{
(new UIPermission(PermissionState.Unrestricted)).Assert();
try
{
_site = new SecurityCriticalDataClass(InputManager.Current.RegisterInputProvider(this));
}
finally
{
UIPermission.RevertAssert();
}
_source = new SecurityCriticalDataClass(source);
}
///
/// Critical:This class accesses critical data, _site.
/// TreatAsSafe: This class does not expose the critical data
///
[SecurityCritical, SecurityTreatAsSafe]
public void Dispose( )
{
if (_site != null)
{
_site.Value.Dispose();
_site = null;
}
_source = null;
}
///
/// Critical: As this accesses critical data HwndSource
/// TreatAsSafe:Information about whether a given input provider services
/// a visual is safe to expose. This method does not expose the critical data either.
///
[SecurityCritical, SecurityTreatAsSafe]
bool IInputProvider.ProvidesInputForRootVisual( Visual v )
{
Debug.Assert(null != _source);
return _source.Value.RootVisual == v;
}
void IInputProvider.NotifyDeactivate() {}
///
/// Critical: As this accesses critical data HwndSource
///
[SecurityCritical]
internal IntPtr FilterMessage( IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled )
{
// It is possible to be re-entered during disposal. Just return.
if(null == _source || null == _source.Value)
{
return IntPtr.Zero;
}
if (msg == NativeMethods.WM_APPCOMMAND)
{
// WM_APPCOMMAND message notifies a window that the user generated an application command event,
// for example, by clicking an application command button using the mouse or typing an application command
// key on the keyboard.
RawAppCommandInputReport report = new RawAppCommandInputReport(
_source.Value,
InputMode.Foreground,
SafeNativeMethods.GetMessageTime(),
GetAppCommand(lParam),
GetDevice(lParam),
InputType.Command);
handled = _site.Value.ReportInput(report);
}
return handled ? new IntPtr(1) : IntPtr.Zero ;
}
///
/// Implementation of the GET_APPCOMMAND_LPARAM macro defined in Winuser.h
///
///
///
private static int GetAppCommand( IntPtr lParam )
{
return ((short)(NativeMethods.SignedHIWORD(NativeMethods.IntPtrToInt32(lParam)) & ~NativeMethods.FAPPCOMMAND_MASK));
}
///
/// Returns the input device that originated this app command.
/// InputType.Hid represents an unspecified device that is neither the
/// keyboard nor the mouse.
///
///
///
private static InputType GetDevice(IntPtr lParam)
{
InputType inputType = InputType.Hid;
// Implementation of the GET_DEVICE_LPARAM macro defined in Winuser.h
// Returns either FAPPCOMMAND_KEY (the user pressed a key), FAPPCOMMAND_MOUSE
// (the user clicked a mouse button) or FAPPCOMMAND_OEM (unknown device)
ushort deviceId = (ushort)(NativeMethods.SignedHIWORD(NativeMethods.IntPtrToInt32(lParam)) & NativeMethods.FAPPCOMMAND_MASK);
switch (deviceId)
{
case NativeMethods.FAPPCOMMAND_MOUSE:
inputType = InputType.Mouse;
break;
case NativeMethods.FAPPCOMMAND_KEY:
inputType = InputType.Keyboard;
break;
case NativeMethods.FAPPCOMMAND_OEM:
default:
// Unknown device id or FAPPCOMMAND_OEM.
// In either cases we set it to the generic human interface device.
inputType=InputType.Hid;
break;
}
return inputType;
}
///
/// This is got under an elevation and is hence critical. This data is not ok to expose.
///
private SecurityCriticalDataClass _source;
///
/// This is got under an elevation and is hence critical.This data is not ok to expose.
///
private SecurityCriticalDataClass _site;
}
}
// 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
- XmlAttribute.cs
- ResXResourceReader.cs
- Atom10FormatterFactory.cs
- Graphics.cs
- Certificate.cs
- DispatcherObject.cs
- WebPartConnectVerb.cs
- ResourceManager.cs
- ProcessModelSection.cs
- TextEffect.cs
- XmlException.cs
- CheckBox.cs
- TitleStyle.cs
- LeaseManager.cs
- XmlSchemaValidationException.cs
- DataFieldCollectionEditor.cs
- ServiceDescription.cs
- DescriptionAttribute.cs
- SingleObjectCollection.cs
- ListControl.cs
- LogicalChannelCollection.cs
- UmAlQuraCalendar.cs
- Select.cs
- BlurBitmapEffect.cs
- DigestComparer.cs
- ConnectionPointGlyph.cs
- BuildProvider.cs
- APCustomTypeDescriptor.cs
- SqlConnectionHelper.cs
- TrustManagerMoreInformation.cs
- DockingAttribute.cs
- SecurityContextTokenCache.cs
- FacetChecker.cs
- SiteMapNodeItem.cs
- FixedTextPointer.cs
- EmptyStringExpandableObjectConverter.cs
- SystemWebSectionGroup.cs
- CompareValidator.cs
- HotCommands.cs
- Property.cs
- ZipIOExtraFieldElement.cs
- BinaryObjectInfo.cs
- ValueChangedEventManager.cs
- Predicate.cs
- AccessControlList.cs
- ReceiveMessageContent.cs
- SystemUdpStatistics.cs
- _NestedMultipleAsyncResult.cs
- FilteredAttributeCollection.cs
- XsltInput.cs
- ComponentSerializationService.cs
- AdapterSwitches.cs
- GlobalizationSection.cs
- ParseChildrenAsPropertiesAttribute.cs
- WebBrowserSiteBase.cs
- ListItemCollection.cs
- XmlReaderDelegator.cs
- GridViewDeletedEventArgs.cs
- CompositeFontParser.cs
- IPAddress.cs
- NonClientArea.cs
- StoragePropertyMapping.cs
- PageCatalogPart.cs
- XmlSerializerAssemblyAttribute.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- CompileLiteralTextParser.cs
- ReadOnlyDataSource.cs
- LinearGradientBrush.cs
- SpoolingTaskBase.cs
- BevelBitmapEffect.cs
- SimpleType.cs
- DataGridViewComboBoxCell.cs
- Clipboard.cs
- RecordsAffectedEventArgs.cs
- CallSite.cs
- DoubleCollectionConverter.cs
- WriteLineDesigner.xaml.cs
- TypeDescriptionProvider.cs
- RequiredAttributeAttribute.cs
- MetadataSet.cs
- RtType.cs
- CounterSampleCalculator.cs
- SpeechDetectedEventArgs.cs
- ConfigPathUtility.cs
- EventSchemaTraceListener.cs
- InputBindingCollection.cs
- TypefaceMap.cs
- safex509handles.cs
- ManagementOptions.cs
- PeerApplicationLaunchInfo.cs
- basevalidator.cs
- dbdatarecord.cs
- DrawingAttributes.cs
- UrlMapping.cs
- COM2EnumConverter.cs
- SqlGatherProducedAliases.cs
- HttpProxyCredentialType.cs
- FunctionNode.cs
- TypeUtils.cs
- ObjectFactoryCodeDomTreeGenerator.cs