Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / Stylus / RawStylusInputReport.cs / 1305600 / RawStylusInputReport.cs
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Threading;
using System.Windows.Media;
using System.Windows.Input.StylusPlugIns;
using System.Security;
using System.Security.Permissions;
using MS.Internal.PresentationCore; // SecurityHelper
using MS.Internal;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Input
{
/////////////////////////////////////////////////////////////////////////
///
/// The RawStylusInputReport class encapsulates the raw input provided
/// from a stylus.
///
///
/// It is important to note that the InputReport class only contains
/// blittable types. This is required so that the report can be
/// marshalled across application domains.
///
internal class RawStylusInputReport : InputReport
{
/////////////////////////////////////////////////////////////////////
///
/// Constructs an instance of the RawStylusInputReport class.
///
///
/// The mode in which the input is being provided.
///
///
/// The time when the input occured.
///
///
/// The PresentationSource over which the stylus moved.
///
///
/// The PenContext.
///
///
/// The set of actions being reported.
///
///
/// Tablet device id.
///
///
/// Stylus device id.
///
///
/// Raw stylus data.
///
///
/// Critical: This handles critical data in the form of PresentationSource.
/// TreatAsSafe:There are demands on the critical data(PresentationSource)
///
[SecurityCritical,SecurityTreatAsSafe]
internal RawStylusInputReport(
InputMode mode,
int timestamp,
PresentationSource inputSource,
PenContext penContext,
RawStylusActions actions,
int tabletDeviceId,
int stylusDeviceId,
int[] data)
: base(inputSource, InputType.Stylus, mode, timestamp)
{
// Validate parameters
if (!RawStylusActionsHelper.IsValid(actions))
{
throw new InvalidEnumArgumentException(SR.Get(SRID.Enum_Invalid, "actions"));
}
if (data == null && actions != RawStylusActions.InRange)
{
throw new ArgumentNullException("data");
}
_penContext = new SecurityCriticalDataClass(penContext);
_actions = actions;
_tabletDeviceId = tabletDeviceId;
_stylusDeviceId = stylusDeviceId;
_data = data;
_isSynchronize = false;
}
/////////////////////////////////////////////////////////////////////
///
/// Constructs an instance of the RawStylusInputReport class.
///
///
/// The mode in which the input is being provided.
///
///
/// The time when the input occured.
///
///
/// The PresentationSource over which the stylus moved.
///
///
/// The set of actions being reported.
///
///
/// Raw stylus data StylusPointDescription.
///
///
/// Raw stylus data.
///
///
/// Critical: This handles critical data in the form of PresentationSource.
/// TreatAsSafe:There are demands on the critical data(PresentationSource)
///
[SecurityCritical,SecurityTreatAsSafe]
internal RawStylusInputReport(
InputMode mode,
int timestamp,
PresentationSource inputSource,
RawStylusActions actions,
StylusPointDescription mousePointDescription,
int[] mouseData)
: base(inputSource, InputType.Stylus, mode, timestamp)
{
// Validate parameters
if (!RawStylusActionsHelper.IsValid(actions))
{
throw new InvalidEnumArgumentException(SR.Get(SRID.Enum_Invalid, "actions"));
}
if (mouseData == null)
{
throw new ArgumentNullException("mouseData");
}
_penContext = new SecurityCriticalDataClass(null);
_actions = actions;
_tabletDeviceId = 0;
_stylusDeviceId = 0;
_data = mouseData;
_isSynchronize = false;
_mousePointDescription = mousePointDescription;
_isMouseInput = true;
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to the set of actions that were reported.
///
internal RawStylusActions Actions { get { return _actions; } }
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus context id that reported the data.
///
internal int TabletDeviceId { get { return _tabletDeviceId; } }
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus context id that reported the data.
///
///
/// Critical: provides access to critical member _penContext
///
internal PenContext PenContext
{
[SecurityCritical]
get { return _penContext.Value; }
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus context id that reported the data.
///
///
/// Critical: This handles critical data _penContext
/// TreatAsSafe: We're returning safe data
///
internal StylusPointDescription StylusPointDescription
{
[SecurityCritical, SecurityTreatAsSafe]
get { return _isMouseInput ? _mousePointDescription : _penContext.Value.StylusPointDescription; }
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus device id that reported the data.
///
internal int StylusDeviceId { get { return _stylusDeviceId; } }
/////////////////////////////////////////////////////////////////////
internal StylusDevice StylusDevice
{
get { return _stylusDevice; }
set { _stylusDevice = value; }
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to the raw data that was reported.
///
///
/// Critical: Access the critical field - _data
/// TreatAsSafe: No input is taken. It's safe to a clone.
///
[SecurityCritical, SecurityTreatAsSafe]
internal int[] GetRawPacketData()
{
if (_data == null)
return null;
return (int[])_data.Clone();
}
/////////////////////////////////////////////////////////////////////
///
/// Critical: Access the critical field - _data
/// TreatAsSafe: No input is taken. It's safe to return the last tablet point.
///
[SecurityCritical, SecurityTreatAsSafe]
internal Point GetLastTabletPoint()
{
int packetLength = StylusPointDescription.GetInputArrayLengthPerPoint();
int lastXIndex = _data.Length - packetLength;
return new Point(_data[lastXIndex], _data[lastXIndex + 1]);
}
/////////////////////////////////////////////////////////////////////
///
/// Critical - Hands out ref to internal data that can be used to spoof input.
///
internal int[] Data
{
[SecurityCritical]
get { return _data; }
}
/////////////////////////////////////////////////////////////////////
///
/// Critical - Setting property can be used to spoof input.
///
internal RawStylusInput RawStylusInput
{
get { return _rawStylusInput.Value; }
[SecurityCritical]
set { _rawStylusInput.Value = value; }
}
/////////////////////////////////////////////////////////////////////
internal bool Synchronized
{
get { return _isSynchronize; }
set { _isSynchronize = value; }
}
/////////////////////////////////////////////////////////////////////
RawStylusActions _actions;
int _tabletDeviceId;
///
/// Critical: Marked critical to prevent inadvertant spread to transparent code
///
private SecurityCriticalDataClass _penContext;
int _stylusDeviceId;
///
/// Critical to prevent accidental spread to transparent code
///
[SecurityCritical]
int[] _data;
StylusDevice _stylusDevice; // cached value looked up from _stylusDeviceId
SecurityCriticalDataForSet _rawStylusInput;
bool _isSynchronize; // Set from StylusDevice.Synchronize.
bool _isMouseInput; // Special case of mouse input being sent to plugins
StylusPointDescription _mousePointDescription; // layout for mouse points
}
}
// 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
- DbExpressionVisitor.cs
- WebPartDescription.cs
- TextEndOfSegment.cs
- NumberFormatInfo.cs
- AddressAlreadyInUseException.cs
- ExecutionEngineException.cs
- TypeUtil.cs
- DesignerDataSourceView.cs
- DSASignatureFormatter.cs
- ListViewItemMouseHoverEvent.cs
- AutoResizedEvent.cs
- ContentValidator.cs
- PolicyValidationException.cs
- Pair.cs
- HealthMonitoringSectionHelper.cs
- UInt64Converter.cs
- CharEntityEncoderFallback.cs
- SafePEFileHandle.cs
- HostingEnvironmentSection.cs
- ZipIOModeEnforcingStream.cs
- ExpanderAutomationPeer.cs
- XmlAnyElementAttribute.cs
- TextSpan.cs
- DuplicateWaitObjectException.cs
- BaseComponentEditor.cs
- Dynamic.cs
- DesignerSerializerAttribute.cs
- SHA384Managed.cs
- EntityDataSourceConfigureObjectContext.cs
- BuildDependencySet.cs
- SingleAnimationUsingKeyFrames.cs
- AudioDeviceOut.cs
- MetadataItemSerializer.cs
- AttachedPropertyBrowsableAttribute.cs
- DataGridViewCellLinkedList.cs
- SqlConnectionHelper.cs
- ResolvedKeyFrameEntry.cs
- ColumnHeaderCollectionEditor.cs
- CodeSubDirectoriesCollection.cs
- ProxyWebPartManagerDesigner.cs
- MenuItem.cs
- WindowInteropHelper.cs
- HeaderPanel.cs
- DbConnectionPoolCounters.cs
- XPathScanner.cs
- XNodeValidator.cs
- SqlDataSourceSelectingEventArgs.cs
- SHA256.cs
- CustomAttributeFormatException.cs
- PageSetupDialog.cs
- securitymgrsite.cs
- FastPropertyAccessor.cs
- LinkedResource.cs
- Span.cs
- SizeConverter.cs
- SafeNativeMethods.cs
- Button.cs
- CombinedTcpChannel.cs
- OutputCacheSettingsSection.cs
- FactoryGenerator.cs
- DeviceFilterDictionary.cs
- XmlSchemaAnnotation.cs
- VisualStyleTypesAndProperties.cs
- AppSettingsSection.cs
- FormsAuthenticationEventArgs.cs
- EncryptedKeyHashIdentifierClause.cs
- CodeValidator.cs
- TraceSwitch.cs
- SpoolingTask.cs
- WebPartCatalogAddVerb.cs
- MouseDevice.cs
- OAVariantLib.cs
- dataprotectionpermissionattribute.cs
- InternalConfigEventArgs.cs
- ByteStack.cs
- SortedList.cs
- GregorianCalendar.cs
- NameValueConfigurationCollection.cs
- PageCodeDomTreeGenerator.cs
- TypeGeneratedEventArgs.cs
- IsolatedStorageFilePermission.cs
- AutomationElement.cs
- _SslState.cs
- EventLogPermissionEntry.cs
- WebPartsPersonalization.cs
- InputGestureCollection.cs
- SqlDataSourceQueryEditorForm.cs
- ResourceDescriptionAttribute.cs
- SoapMessage.cs
- StrokeCollection2.cs
- __ConsoleStream.cs
- XhtmlBasicLinkAdapter.cs
- FileDialog_Vista_Interop.cs
- Material.cs
- StartUpEventArgs.cs
- InvalidAsynchronousStateException.cs
- RedirectionProxy.cs
- SubMenuStyle.cs
- SiblingIterators.cs
- PassportAuthenticationEventArgs.cs