Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / MS / Win32 / UnsafeNativeMethodsTablet.cs / 1 / UnsafeNativeMethodsTablet.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
using System;
using System.Text;
using System.Security;
using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Runtime.ConstrainedExecution;
using System.Windows.Ink;
using System.Diagnostics;
using MS.Win32;
namespace MS.Win32.Recognizer
{
//
// Tablet unsafe native methods structs and pinvokes used by PresentationCore
//
internal static class UnsafeNativeMethods
{
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int CreateRecognizer([In] ref Guid clsid, [Out] out RecognizerSafeHandle hRec);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int DestroyRecognizer([In] IntPtr hRec);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int CreateContext([In] RecognizerSafeHandle hRec, [Out] out ContextSafeHandle hRecContext);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int DestroyContext([In] IntPtr hRecContext);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int AddStroke([In] ContextSafeHandle hRecContext, [In] ref PACKET_DESCRIPTION packetDesc, [In] uint cbPackets, [In] IntPtr pByte, [In, MarshalAs(UnmanagedType.LPStruct)] NativeMethods.XFORM xForm);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int SetEnabledUnicodeRanges([In] ContextSafeHandle hRecContext, [In] uint cRangs, [In] CHARACTER_RANGE[] charRanges);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int EndInkInput([In] ContextSafeHandle hRecContext);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int Process([In] ContextSafeHandle hRecContext, [Out] out bool partialProcessing);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int GetAlternateList([In] ContextSafeHandle hRecContext, [In, Out] ref RECO_RANGE recoRange, [In, Out] ref uint cAlts, [In, Out] IntPtr[] recAtls, [In] ALT_BREAKS breaks);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int DestroyAlternate([In] IntPtr hRecAtls);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)]
internal static extern int GetString([In] IntPtr hRecAtls, [Out] out RECO_RANGE recoRange, [In, Out]ref uint size, [In, Out] StringBuilder recoString);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int GetConfidenceLevel([In] IntPtr hRecAtls, [Out] out RECO_RANGE recoRange, [Out] out RecognitionConfidence confidenceLevel);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int ResetContext([In] ContextSafeHandle hRecContext);
///
/// Critical: as suppressing UnmanagedCodeSecurity
///
[SecurityCritical, SuppressUnmanagedCodeSecurity]
[DllImport(ExternDll.Mshwgst, CallingConvention = CallingConvention.Winapi)]
internal static extern int GetLatticePtr([In] ContextSafeHandle hRecContext, [In] ref IntPtr pRecoLattice);
}
///
/// RecognizerSafeHandle
///
///
/// Critical: Marked critical to prevent inadvertant spread to transparent code.
///
[SecurityCritical]
internal class RecognizerSafeHandle : SafeHandle
{
// Called by P/Invoke when returning SafeHandles
///
/// Critical: This code calls into a base class which is protected by link demand and by inheritance demand
///
[SecurityCritical]
private RecognizerSafeHandle()
: this(true)
{
}
///
/// Critical: This code calls into a base class which is protected by link demand and by inheritance demand
///
[SecurityCritical]
private RecognizerSafeHandle(bool ownHandle)
: base(IntPtr.Zero, ownHandle)
{
}
// Do not provide a finalizer - SafeHandle's critical finalizer will
// call ReleaseHandle for you.
///
/// Critical: This code calls into a base class which is protected by link demand an by inheritance demand.
/// Also the code accessed the SecurityCritical member - handle.
///
public override bool IsInvalid
{
[SecurityCritical]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get
{
return IsClosed || handle == IntPtr.Zero;
}
}
///
/// Critical: Calls a SecurityCritical method
/// NativeRecognizer.UnsafeNativeMethods.DestroyRecognizer
///
[SecurityCritical]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
override protected bool ReleaseHandle()
{
Debug.Assert(handle != IntPtr.Zero);
return (MS.Internal.HRESULT.Succeeded(MS.Win32.Recognizer.UnsafeNativeMethods.DestroyRecognizer(handle)));
}
}
///
/// ContextSafeHandle
///
///
/// Critical: Marked critical to prevent inadvertant spread to transparent code.
///
[SecurityCritical]
internal class ContextSafeHandle : SafeHandle
{
// Called by P/Invoke when returning SafeHandles
///
/// Critical:This code calls into a base class which is protected by link demand an by inheritance demand
///
[SecurityCritical]
private ContextSafeHandle()
: this(true)
{
}
///
/// Critical:This code calls into a base class which is protected by link demand an by inheritance demand
///
[SecurityCritical]
private ContextSafeHandle(bool ownHandle)
: base(IntPtr.Zero, ownHandle)
{
}
// Do not provide a finalizer - SafeHandle's critical finalizer will
// call ReleaseHandle for you.
///
/// Critical: This code calls into a base class which is protected by link demand an by inheritance demand.
/// Also the code accessed the SecurityCritical member - handle.
///
public override bool IsInvalid
{
[SecurityCritical]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
get
{
return IsClosed || handle == IntPtr.Zero;
}
}
///
/// Critical: Calls a SecurityCritical method
/// NativeRecognizer.UnsafeNativeMethods.DestroyContext
///
[SecurityCritical]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
override protected bool ReleaseHandle()
{
//Note: It is not an error to have already called DestroyRecognizer
//which makes _recognizerHandle.IsInvalid == true before calling
//DestroyContext. I have removed this assert, but left it commented for
//context.
//Debug.Assert(_recognizerHandle != null && !_recognizerHandle.IsInvalid);
Debug.Assert(handle != IntPtr.Zero);
int hr = MS.Win32.Recognizer.UnsafeNativeMethods.DestroyContext(handle);
// Now, dereference the attached recognizer.
_recognizerHandle = null;
return MS.Internal.HRESULT.Succeeded(hr);
}
///
/// Critical: Accesses the SecurityCritical member _recognizerHandle
///
[SecurityCritical]
internal void AddReferenceOnRecognizer(RecognizerSafeHandle handle)
{
System.Diagnostics.Debug.Assert(_recognizerHandle == null);
_recognizerHandle = handle;
}
///
/// Critical: This is a handle to our recognizer, we consider it plutonium
///
[SecurityCritical]
private RecognizerSafeHandle _recognizerHandle;
}
// The structure has been copied from public\internal\drivers\inc\tpcshrd.h
//typedef struct _PROPERTY_METRICS
// {
// LONG nLogicalMin;
// LONG nLogicalMax;
// PROPERTY_UNITS Units;
// FLOAT fResolution;
// } PROPERTY_METRICS;
[StructLayout(LayoutKind.Sequential)]
internal struct PROPERTY_METRICS
{
public int nLogicalMin;
public int nLogicalMax;
public int Units;
public float fResolution;
}
// The structure has been copied from public\internal\drivers\inc\tpcshrd.h
//typedef struct _PACKET_PROPERTY
// {
// GUID guid;
// PROPERTY_METRICS PropertyMetrics;
// } PACKET_PROPERTY;
[StructLayout(LayoutKind.Sequential)]
internal struct PACKET_PROPERTY
{
public Guid guid;
public PROPERTY_METRICS PropertyMetrics;
}
// The structure has been copied from public\internal\drivers\inc\tpcshrd.h
//typedef struct _PACKET_DESCRIPTION
// {
// ULONG cbPacketSize;
// ULONG cPacketProperties;
// PACKET_PROPERTY *pPacketProperties;
// ULONG cButtons;
// GUID *pguidButtons;
// } PACKET_DESCRIPTION;
[StructLayout(LayoutKind.Sequential)]
internal struct PACKET_DESCRIPTION
{
public uint cbPacketSize;
public uint cPacketProperties;
public IntPtr pPacketProperties;
public uint cButtons;
public IntPtr pguidButtons;
};
// The structure has been copied from public\internal\drivers\inc\rectypes.h
//typedef struct tagCHARACTER_RANGE
// {
// WCHAR wcLow;
// USHORT cChars;
// } CHARACTER_RANGE
[StructLayout(LayoutKind.Sequential)]
internal struct CHARACTER_RANGE
{
public ushort wcLow;
public ushort cChars;
}
// The structure has been copied from public\internal\drivers\inc\rectypes.h
//typedef struct tagRECO_RANGE
// {
// ULONG iwcBegin;
// ULONG cCount;
// } RECO_RANGE;
[StructLayout(LayoutKind.Sequential)]
internal struct RECO_RANGE
{
public uint iwcBegin;
public uint cCount;
}
// The structure has been copied from public\internal\drivers\inc\rectypes.h
//enum enumALT_BREAKS
// { ALT_BREAKS_SAME = 0,
// ALT_BREAKS_UNIQUE = 1,
// ALT_BREAKS_FULL = 2
// } ALT_BREAKS;
internal enum ALT_BREAKS
{
ALT_BREAKS_SAME = 0,
ALT_BREAKS_UNIQUE = 1,
ALT_BREAKS_FULL = 2
}
// The structure has been copied from public\internal\drivers\inc\rectypes.h
//enum enumRECO_TYPE
// { RECO_TYPE_WSTRING = 0,
// RECO_TYPE_WCHAR = 1
// } RECO_TYPE;
// internal enum RECO_TYPE : ushort
//{
// RECO_TYPE_WSTRING = 0,
// RECO_TYPE_WCHAR = 1
//}
// The structure has been copied from public\internal\drivers\inc\rectypes.h
//typedef struct tagRECO_LATTICE_PROPERTY
// {
// GUID guidProperty;
// USHORT cbPropertyValue;
// BYTE *pPropertyValue;
// } RECO_LATTICE_PROPERTY;
[StructLayout(LayoutKind.Sequential)]
internal struct RECO_LATTICE_PROPERTY
{
public Guid guidProperty;
public ushort cbPropertyValue;
public IntPtr pPropertyValue;
}
// The structure has been copied from public\internal\drivers\inc\rectypes.h
//typedef struct tagRECO_LATTICE_PROPERTIES
// {
// ULONG cProperties;
// RECO_LATTICE_PROPERTY **apProps;
// } RECO_LATTICE_PROPERTIES;
[StructLayout(LayoutKind.Sequential)]
internal struct RECO_LATTICE_PROPERTIES
{
public uint cProperties;
public IntPtr apProps;
}
// The structure has been copied from public\internal\drivers\inc\rectypes.h
//typedef int RECO_SCORE;
//
//typedef struct tagRECO_LATTICE_ELEMENT
// {
// RECO_SCORE score;
// WORD type;
// BYTE *pData;
// ULONG ulNextColumn;
// ULONG ulStrokeNumber;
// RECO_LATTICE_PROPERTIES epProp;
// } RECO_LATTICE_ELEMENT;
[StructLayout(LayoutKind.Sequential)]
internal struct RECO_LATTICE_ELEMENT
{
public int score;
public ushort type;
public IntPtr pData;
public uint ulNextColumn;
public uint ulStrokeNumber;
public RECO_LATTICE_PROPERTIES epProp;
}
// The structure has been copied from public\internal\drivers\inc\rectypes.h
//typedef struct tagRECO_LATTICE_COLUMN
// {
// ULONG key;
// RECO_LATTICE_PROPERTIES cpProp;
// ULONG cStrokes;
// ULONG *pStrokes;
// ULONG cLatticeElements;
// RECO_LATTICE_ELEMENT *pLatticeElements;
// } RECO_LATTICE_COLUMN;
[StructLayout(LayoutKind.Sequential)]
internal struct RECO_LATTICE_COLUMN
{
public uint key;
public RECO_LATTICE_PROPERTIES cpProp;
public uint cStrokes;
public IntPtr pStrokes;
public uint cLatticeElements;
public IntPtr pLatticeElements;
}
// The structure has been copied from public\internal\drivers\inc\rectypes.h
//typedef struct tagRECO_LATTICE
// {
// ULONG ulColumnCount;
// RECO_LATTICE_COLUMN *pLatticeColumns;
// ULONG ulPropertyCount;
// GUID *pGuidProperties;
// ULONG ulBestResultColumnCount;
// ULONG *pulBestResultColumns;
// ULONG *pulBestResultIndexes;
// } RECO_LATTICE;
[StructLayout(LayoutKind.Sequential)]
internal struct RECO_LATTICE
{
public uint ulColumnCount;
public IntPtr pLatticeColumns;
public uint ulPropertyCount;
public IntPtr pGuidProperties;
public uint ulBestResultColumnCount;
public IntPtr pulBestResultColumns;
public IntPtr pulBestResultIndexes;
}
}
// 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
- FindCriteriaCD1.cs
- DesigntimeLicenseContext.cs
- EventPropertyMap.cs
- ZipIOExtraField.cs
- ParamArrayAttribute.cs
- RenderData.cs
- XmlSchemaAll.cs
- ImplicitInputBrush.cs
- DocumentProperties.cs
- ActivityTypeResolver.xaml.cs
- XhtmlBasicSelectionListAdapter.cs
- PKCS1MaskGenerationMethod.cs
- HttpHandlerActionCollection.cs
- MonitoringDescriptionAttribute.cs
- SetterBase.cs
- LinqToSqlWrapper.cs
- CompModSwitches.cs
- DropSourceBehavior.cs
- EmptyEnumerator.cs
- GridViewRow.cs
- Classification.cs
- MetadataFile.cs
- FunctionImportElement.cs
- BaseResourcesBuildProvider.cs
- TokenFactoryCredential.cs
- MarkedHighlightComponent.cs
- CheckBoxAutomationPeer.cs
- SecurityHeaderLayout.cs
- _NegotiateClient.cs
- Header.cs
- XmlException.cs
- UInt16.cs
- VisualProxy.cs
- LineGeometry.cs
- ReadOnlyCollection.cs
- Helper.cs
- AuthenticationModulesSection.cs
- VerificationAttribute.cs
- DesignerDataSchemaClass.cs
- CacheRequest.cs
- ExceptionCollection.cs
- WpfGeneratedKnownTypes.cs
- VisualStateGroup.cs
- LineServices.cs
- XmlSignificantWhitespace.cs
- KeyFrames.cs
- ParserHooks.cs
- AsymmetricSignatureDeformatter.cs
- Int16KeyFrameCollection.cs
- BinaryObjectWriter.cs
- Item.cs
- PanelContainerDesigner.cs
- CatalogPartChrome.cs
- MethodBuilderInstantiation.cs
- CancelEventArgs.cs
- ListSortDescription.cs
- ConstraintCollection.cs
- HashLookup.cs
- RepeatInfo.cs
- PhonemeEventArgs.cs
- XmlArrayAttribute.cs
- SmtpReplyReader.cs
- SecurityRuntime.cs
- XPathSingletonIterator.cs
- DesignerProperties.cs
- _ServiceNameStore.cs
- ComponentRenameEvent.cs
- StyleCollectionEditor.cs
- Rfc2898DeriveBytes.cs
- ProcessHostFactoryHelper.cs
- CircleEase.cs
- EntityContainer.cs
- ExpandSegmentCollection.cs
- DocumentCollection.cs
- SettingsPropertyValueCollection.cs
- AssemblyResourceLoader.cs
- MessageSmuggler.cs
- SqlDataSourceCommandEventArgs.cs
- IERequestCache.cs
- CompilerTypeWithParams.cs
- TreeViewImageIndexConverter.cs
- PropertyGridView.cs
- WmpBitmapEncoder.cs
- DiscreteKeyFrames.cs
- TrackingMemoryStream.cs
- CodeSnippetCompileUnit.cs
- SystemFonts.cs
- TransactionInterop.cs
- ToolboxDataAttribute.cs
- followingquery.cs
- URLEditor.cs
- DataRowChangeEvent.cs
- SiteOfOriginPart.cs
- HttpProxyCredentialType.cs
- EventItfInfo.cs
- GuidelineSet.cs
- FixedStringLookup.cs
- DecimalConstantAttribute.cs
- Registry.cs
- XmlQuerySequence.cs