PenThread.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / Stylus / PenThread.cs / 1305600 / PenThread.cs

                            //#define TRACE 

using System;
using System.Diagnostics;
using System.Collections; 
using System.Collections.ObjectModel;
using System.Runtime.InteropServices; 
using System.Windows.Threading; 
using System.Threading;
using System.Security; 
using System.Security.Permissions;
using MS.Internal;
using MS.Internal.PresentationCore;                        // SecurityHelper
using MS.Win32.Penimc; 

using SR=MS.Internal.PresentationCore.SR; 
using SRID=MS.Internal.PresentationCore.SRID; 

namespace System.Windows.Input 
{
    /////////////////////////////////////////////////////////////////////////

    internal sealed class PenThread 
    {
        private PenThreadWorker _penThreadWorker; 
 
        /// 
        ///    Critical - Calls SecurityCritical code PenThreadWorker constructor. 
        ///             Called by PenThreadPool.RegisterPenContextHelper.
        ///             TreatAsSafe boundry is Stylus.EnableCore, Stylus.RegisterHwndForInput
        ///                and HwndWrapperHook class (via HwndSource.InputFilterMessage).
        ///  
        [SecurityCritical]
        internal PenThread() 
        { 
            _penThreadWorker = new PenThreadWorker();
        } 

        /// 
        /// Dispose
        ///  
        internal void Dispose()
        { 
            DisposeHelper(); 
        }
 
        /////////////////////////////////////////////////////////////////////

        ~PenThread()
        { 
            DisposeHelper();
        } 
 
        /////////////////////////////////////////////////////////////////////
 
        /// 
        /// Critical - Call security critical method PenThreadWorker.Dispose().
        /// TreatAsSafe - Safe since it only frees internal private handle
        ///               on an object that is going to be also marked as disposed and 
        ///               start failing all calls after return.
        ///  
        [SecurityCritical, SecurityTreatAsSafe] 
        void DisposeHelper()
        { 
            // NOTE: PenThreadWorker deals with already being disposed logic.
            if (_penThreadWorker != null)
            {
                _penThreadWorker.Dispose(); 
            }
            GC.KeepAlive(this); 
        } 

        ///////////////////////////////////////////////////////////////////// 

        /// 
        /// Critical - Calls SecurityCritical code PenThreadWorker.WorkerAddPenContext.
        ///             Called by PenThreadPool.RegisterPenContextHelper. 
        ///             TreatAsSafe boundry is Stylus.EnableCore, Stylus.RegisterHwndForInput
        ///                and HwndWrapperHook class (via HwndSource.InputFilterMessage). 
        ///  
        [SecurityCritical]
        internal bool AddPenContext(PenContext penContext) 
        {
            return _penThreadWorker.WorkerAddPenContext(penContext);
        }
 
        /// 
        /// Critical - Calls SecurityCritical code PenThreadWorker.WorkerRemovePenContext. 
        ///             Called by PenContext.Disable. 
        ///             TreatAsSafe boundry is PenContext.Dispose, Stylus.ProcessDisplayChange
        ///                and HwndWrapperHook class (via HwndSource.InputFilterMessage). 
        /// 
        [SecurityCritical]
        internal bool RemovePenContext(PenContext penContext)
        { 
            return _penThreadWorker.WorkerRemovePenContext(penContext);
        } 
 

        ///////////////////////////////////////////////////////////////////// 

        /// 
        /// Critical - Calls SecurityCritical code PenThreadWorker.WorkerGetTabletsInfo.
        ///             Called by PenThreadPool.WorkerGetTabletsInfo. 
        /// 
        [SecurityCritical] 
        internal TabletDeviceInfo[] WorkerGetTabletsInfo() 
        {
            return _penThreadWorker.WorkerGetTabletsInfo(); 
        }


        ///  
        /// Critical - Calls SecurityCritical code PenThreadWorker.WorkerCreateContext.
        ///             Called by PenThreadPool.WorkerCreateContext. 
        ///             TreatAsSafe boundry is Stylus.EnableCore and HwndWrapperHook class 
        ///             (via HwndSource.InputFilterMessage).
        ///  
        [SecurityCritical]
        internal PenContextInfo WorkerCreateContext(IntPtr hwnd, IPimcTablet pimcTablet)
        {
            return _penThreadWorker.WorkerCreateContext(hwnd, pimcTablet); 
        }
 
        ///  
        /// Critical - Calls SecurityCritical code PenThreadWorker.WorkerRefreshCursorInfo.
        ///             Called by PenThreadPool.WorkerRefreshCursorInfo. 
        /// 
        [SecurityCritical]
        internal StylusDeviceInfo[] WorkerRefreshCursorInfo(IPimcTablet pimcTablet)
        { 
            return _penThreadWorker.WorkerRefreshCursorInfo(pimcTablet);
        } 
 
        /// 
        /// Critical - Calls SecurityCritical code PenThreadWorker.WorkerGetTabletInfo. 
        ///             Called by PenThreadPool.WorkerGetTabletInfo.
        /// 
        [SecurityCritical]
        internal TabletDeviceInfo WorkerGetTabletInfo(uint index) 
        {
            return _penThreadWorker.WorkerGetTabletInfo(index); 
        } 

        ///  
        /// Critical - Calls SecurityCritical code PenThreadWorker.WorkerGetUpdatedSizes.
        ///             Called by PenThreadPool.WorkerGetUpdatedTabletRect.
        /// 
        [SecurityCritical] 
        internal TabletDeviceSizeInfo WorkerGetUpdatedSizes(IPimcTablet pimcTablet)
        { 
            return _penThreadWorker.WorkerGetUpdatedSizes(pimcTablet); 
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK