Code:
/ 4.0 / 4.0 / 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.
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
- LicenseContext.cs
- _Connection.cs
- GroupBoxRenderer.cs
- AnimationTimeline.cs
- SchemaImporterExtension.cs
- CollectionContainer.cs
- FunctionParameter.cs
- ItemContainerProviderWrapper.cs
- XmlHierarchicalDataSourceView.cs
- OracleSqlParser.cs
- DLinqAssociationProvider.cs
- ScriptBehaviorDescriptor.cs
- ProcessHostMapPath.cs
- LogicalTreeHelper.cs
- QuadraticBezierSegment.cs
- RelatedImageListAttribute.cs
- TextServicesHost.cs
- InternalException.cs
- FtpRequestCacheValidator.cs
- SecurityIdentifierConverter.cs
- WebBrowser.cs
- Logging.cs
- URLString.cs
- ProjectionCamera.cs
- XmlSerializationGeneratedCode.cs
- _CommandStream.cs
- XomlCompilerParameters.cs
- ScalarConstant.cs
- EllipseGeometry.cs
- SplitContainer.cs
- EditorAttribute.cs
- hwndwrapper.cs
- IpcPort.cs
- HierarchicalDataBoundControlAdapter.cs
- MergeFailedEvent.cs
- filewebresponse.cs
- HelpKeywordAttribute.cs
- AppDomainGrammarProxy.cs
- KnownBoxes.cs
- LoadedOrUnloadedOperation.cs
- XPathScanner.cs
- HttpVersion.cs
- DescendantQuery.cs
- Schema.cs
- TextSpan.cs
- PreProcessor.cs
- StyleCollection.cs
- DSASignatureFormatter.cs
- Internal.cs
- DBConnectionString.cs
- CodeDomExtensionMethods.cs
- ApplicationServicesHostFactory.cs
- SystemInformation.cs
- PackWebResponse.cs
- OdbcTransaction.cs
- Point4D.cs
- DataBinder.cs
- CodeSnippetExpression.cs
- Run.cs
- SiteIdentityPermission.cs
- RegisteredExpandoAttribute.cs
- CodeSnippetExpression.cs
- StringUtil.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- ADMembershipProvider.cs
- ExtendLockAsyncResult.cs
- ApplyImportsAction.cs
- AdRotator.cs
- OdbcPermission.cs
- Privilege.cs
- ConsoleKeyInfo.cs
- PropVariant.cs
- SchemaObjectWriter.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ExpressionReplacer.cs
- MemoryMappedFile.cs
- URL.cs
- ByteRangeDownloader.cs
- UnsafeMethods.cs
- CodeSnippetStatement.cs
- CatalogPartChrome.cs
- StylusPlugin.cs
- SQLDateTime.cs
- RecognizerInfo.cs
- NotImplementedException.cs
- ViewLoader.cs
- NameValuePair.cs
- URI.cs
- TableMethodGenerator.cs
- FreezableOperations.cs
- AsyncStreamReader.cs
- DropDownList.cs
- PersonalizableAttribute.cs
- PropertyChangingEventArgs.cs
- SchemaMerger.cs
- TableParagraph.cs
- Overlapped.cs
- PackUriHelper.cs
- RestHandlerFactory.cs
- FileDetails.cs