NativeMethodsOther.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Shared / MS / Win32 / NativeMethodsOther.cs / 2 / NativeMethodsOther.cs

                            //------------------------------------------------------------------------------ 
//-----------------------------------------------------------------------------

namespace MS.Win32
{ 
    using Accessibility;
    using System.Runtime.InteropServices; 
    using System; 
    using System.Security;
    using System.Security.Permissions; 
    using System.Collections;
    using System.Diagnostics;
    using System.IO;
    using System.Text; 
    using MS.Win32;
    using Microsoft.Win32.SafeHandles; 
 

#if WINDOWS_BASE 
    using MS.Internal.WindowsBase;
#elif PRESENTATION_CORE
    using MS.Internal.PresentationCore;
#elif PRESENTATIONFRAMEWORK 
    using MS.Internal.PresentationFramework;
#elif DRT 
    using MS.Internal.Drt; 
#else
#error Attempt to use FriendAccessAllowedAttribute from an unknown assembly. 
    using MS.Internal.YourAssemblyName;
#endif

    [FriendAccessAllowed] 
    internal partial class NativeMethods
    { 
        // Translates Win32 error codes into HRESULTs. 
        public static int MakeHRFromErrorCode(int errorCode)
        { 
            Debug.Assert((0xFFFF0000 & errorCode) == 0);
            return unchecked(((int)0x80070000) | errorCode);
        }
 
        public const int    FEATURE_OBJECT_CACHING = 0 ;
        public const int    FEATURE_ZONE_ELEVATION = 1; 
        public const int    FEATURE_MIME_HANDLING = 2; 
        public const int    FEATURE_MIME_SNIFFING = 3;
        public const int    FEATURE_WINDOW_RESTRICTIONS = 4; 
        public const int    FEATURE_WEBOC_POPUPMANAGEMENT = 5;
        public const int    FEATURE_BEHAVIORS = 6;
        public const int    FEATURE_DISABLE_MK_PROTOCOL = 7;
        public const int    FEATURE_LOCALMACHINE_LOCKDOWN = 8; 
        public const int    FEATURE_SECURITYBAND = 9;
        public const int    FEATURE_RESTRICT_ACTIVEXINSTALL = 10; 
        public const int    FEATURE_VALIDATE_NAVIGATE_URL = 11; 
        public const int    FEATURE_RESTRICT_FILEDOWNLOAD = 12;
        public const int    FEATURE_ADDON_MANAGEMENT = 13; 
        public const int    FEATURE_PROTOCOL_LOCKDOWN = 14;
        public const int    FEATURE_HTTP_USERNAME_PASSWORD_DISABLE = 15;
        public const int    FEATURE_SAFE_BINDTOOBJECT = 16;
        public const int    FEATURE_UNC_SAVEDFILECHECK = 17; 
        public const int    FEATURE_GET_URL_DOM_FILEPATH_UNENCODED = 18;
 
        public const int    GET_FEATURE_FROM_PROCESS = 0x00000002; 

        public const int     SET_FEATURE_ON_PROCESS=0x00000002; 

        public const int    URLZONE_LOCAL_MACHINE  = 0;
        public const int    URLZONE_INTRANET        = URLZONE_LOCAL_MACHINE + 1 ;
        public const int    URLZONE_TRUSTED         = URLZONE_INTRANET + 1 ; 
        public const int    URLZONE_INTERNET        = URLZONE_TRUSTED + 1 ;
        public const int    URLZONE_UNTRUSTED       = URLZONE_INTERNET + 1 ; 
 
        public const byte   URLPOLICY_ALLOW         =  0x00;
        public const byte   URLPOLICY_QUERY         =  0x01; 
        public const byte   URLPOLICY_DISALLOW      =  0x03;

        public const int    URLACTION_FEATURE_ZONE_ELEVATION = 0x00002101 ;
        public const int    PUAF_NOUI                = 0x00000001 ; 
        public const int    MUTZ_NOSAVEDFILECHECK = 0x00000001;
 
        [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode )] 
        internal sealed class OSVERSIONINFOEX
        { 
            public OSVERSIONINFOEX()
            {
                osVersionInfoSize = (int)SecurityHelper.SizeOf(this);
            } 

            // The OSVersionInfoSize field must be set to SecurityHelper.SizeOf(this) 
            public int osVersionInfoSize = 0; 
            public int majorVersion = 0;
            public int minorVersion = 0; 
            public int buildNumber = 0;
            public int platformId = 0;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
            public string csdVersion = null; 
            public short servicePackMajor = 0;
            public short servicePackMinor = 0; 
            public short suiteMask = 0; 
            public byte productType = 0;
            public byte reserved = 0; 
        }

        [ComImport, Guid("79eac9ee-baf9-11ce-8c82-00aa004ba90b"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IInternetSecurityMgrSite 
        {
            void GetWindow( /* [out] */ ref IntPtr phwnd) ; 
            void EnableModeless( /* [in] */ bool fEnable) ; 
        }
 
        [StructLayout(LayoutKind.Sequential)]
        internal class OLECMD {
            [MarshalAs(UnmanagedType.U4)]
            public   int cmdID = 0; 
            [MarshalAs(UnmanagedType.U4)]
            public   int cmdf = 0; 
 
        }
 
        [ComVisible(true), ComImport(), Guid("B722BCCB-4E68-101B-A2BC-00AA00404770"),
        InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown) ]
        internal interface IOleCommandTarget
        { 

            [return: MarshalAs(UnmanagedType.I4)] 
            [PreserveSig] 
            int QueryStatus(
                ref Guid pguidCmdGroup, 
                int cCmds,
                [In, Out]
                OLECMD prgCmds,
                [In, Out] 
                IntPtr pCmdText);
 
            [return: MarshalAs(UnmanagedType.I4)] 
            [PreserveSig]
            int Exec( 
                ref Guid pguidCmdGroup,
                int nCmdID,
                int nCmdexecopt,
                // we need to have this an array because callers need to be able to specify NULL or VT_NULL 
                [In, MarshalAs(UnmanagedType.LPArray)]
                Object[] pvaIn, 
                int pvaOut); 
        }
 
        [ComVisible(true), StructLayout(LayoutKind.Sequential)]
        internal class DOCHOSTUIINFO {
            [MarshalAs(UnmanagedType.U4)]
            internal   int cbSize = SecurityHelper.SizeOf(typeof(DOCHOSTUIINFO)); 
            [MarshalAs(UnmanagedType.I4)]
            internal   int dwFlags; 
            [MarshalAs(UnmanagedType.I4)] 
            internal   int dwDoubleClick;
            [MarshalAs(UnmanagedType.I4)] 
            internal   int dwReserved1 = 0;
            [MarshalAs(UnmanagedType.I4)]
            internal   int dwReserved2 = 0;
        } 

 
        public enum DOCHOSTUIFLAG { 
            DIALOG = 0x1,
            DISABLE_HELP_MENU = 0x2, 
            NO3DBORDER = 0x4,
            SCROLL_NO = 0x8,
            DISABLE_SCRIPT_INACTIVE = 0x10,
            OPENNEWWIN = 0x20, 
            DISABLE_OFFSCREEN = 0x40,
            FLAT_SCROLLBAR = 0x80, 
            DIV_BLOCKDEFAULT = 0x100, 
            ACTIVATE_CLIENTHIT_ONLY = 0x200,
            NO3DOUTERBORDER = 0x00200000, 
            ENABLE_FORMS_AUTOCOMPLETE = 0x00004000,
            ENABLE_INPLACE_NAVIGATION = 0x00010000,
            IME_ENABLE_RECONVERSION   = 0x00020000,
            THEME = 0x00040000, 
            NOTHEME = 0x80000,
            DISABLE_COOKIE = 0x400, 
            NOPICS                    = 0x100000, 
            DISABLE_EDIT_NS_FIXUP     = 0x400000,
            LOCAL_MACHINE_ACCESS_CHECK= 0x800000, 
            DISABLE_UNTRUSTEDPROTOCOL = 0x1000000,
            HOST_NAVIGATES            = 0x2000000,
            ENABLE_REDIRECT_NOTIFICATION = 0x4000000
        } 

        public enum DOCHOSTUIDBLCLICK { 
            DEFAULT = 0x0, 
            SHOWPROPERTIES = 0x1,
            SHOWCODE = 0x2 
        }
        [DllImport(ExternDll.Gdi32, ExactSpelling = true, CharSet = CharSet.Auto, SetLastError = true)]
        internal static extern IntPtr SetEnhMetaFileBits(uint cbBuffer, byte[] buffer);
 
        // NOTE:  this struct (and BitmapHandle below) replaces a version from NativeMethodsCLR.cs that uses
        // IntPtrs instead of BitmapHandles (which derive from SafeHandle). 
        [StructLayout(LayoutKind.Sequential)] 
        internal class ICONINFO
        { 
            public bool fIcon = false;
            public int xHotspot = 0;
            public int yHotspot = 0;
            public BitmapHandle hbmMask = null; 
            public BitmapHandle hbmColor = null;
        } 
 
        internal class BitmapHandle : SafeHandle
        { 
            /// 
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can
            ///      be risky 
            /// 
            /// 
            /// NOTE: This constructor calls a virtual (HandleCollectorType). 
            /// This means all derived classes are at risk if their constructors have base:(ptr, fOwnsHandle)
            /// in their initialization list.  If derived classes do this they must be aware that if they override 
            /// the virtual it will be called *before* their constructor runs.  The class will exist at this point,
            /// so it won't break, but the virtual can't depend on any initialization steps done in the constructor.
            /// See CursorHandle below, which is safe.
 
            [SecurityCritical,SecurityTreatAsSafe]
            internal BitmapHandle(IntPtr ptr, bool fOwnsHandle ) : base(ptr, fOwnsHandle) 
            { 
                HandleCollector.Add(handle, HandleCollectorType);
            } 

            /// 
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can 
            ///      be risky
            ///  
            [SecurityCritical,SecurityTreatAsSafe] 
            internal BitmapHandle() : base(IntPtr.Zero, true)
            { 
            }

            /// 
            ///      Critical:This code calls into a base class which is protected by link demand an by inheritance demand 
            ///      TreatAsSafe: This code is considered safe to give out
            ///  
            public override bool IsInvalid 
            {
                [SecurityCritical,SecurityTreatAsSafe] 
                get
                {
                    return handle == IntPtr.Zero;
                } 
            }
 
            internal virtual int HandleCollectorType 
            {
                get 
                {
                    return NativeMethods.CommonHandles.GDI;
                }
            } 

            public HandleRef MakeHandleRef(object wrapper) 
            { 
                return new HandleRef(wrapper, handle);
            } 

            /// 
            ///     Critical: This calls into DeleteObject
            ///  
            [SecurityCritical]
            protected override bool ReleaseHandle() 
            { 
                HandleCollector.Remove(handle, NativeMethods.CommonHandles.GDI);
 
                return UnsafeNativeMethods.DeleteObject(handle);
            }
        }
 
        internal class IconHandle : SafeHandle
        { 
            ///  
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can 
            ///      be risky
            /// 
            ///
            /// NOTE: This constructor calls a virtual (HandleCollectorType). 
            /// This means all derived classes are at risk if their constructors have base:(ptr, fOwnsHandle)
            /// in their initialization list.  If derived classes do this they must be aware that if they override 
            /// the virtual it will be called *before* their constructor runs.  The class will exist at this point, 
            /// so it won't break, but the virtual can't depend on any initialization steps done in the constructor.
            /// See CursorHandle below, which is safe. 

            [SecurityCritical,SecurityTreatAsSafe]
            internal IconHandle( IntPtr ptr, bool fOwnsHandle ) : base( ptr, fOwnsHandle)
            { 
                HandleCollector.Add( handle , HandleCollectorType );
            } 
 
            /// 
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand 
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can
            ///      be risky
            /// 
            [SecurityCritical,SecurityTreatAsSafe] 
            internal IconHandle(IntPtr ptr) : base(ptr, true)
            { 
            } 

            internal IconHandle() : this(IntPtr.Zero) 
            {
            }

            ///  
            ///      Critical:This code calls into a base class which is protected by link demand an by inheritance demand
            ///      TreatAsSafe: This code is considered safe to give out 
            ///  
            public override bool IsInvalid
            { 
                [SecurityCritical,SecurityTreatAsSafe]
                get
                {
                    return handle == IntPtr.Zero; 
                }
            } 
 
            internal virtual int HandleCollectorType
            { 
                get
                {
                    return NativeMethods.CommonHandles.Icon ;
                } 
            }
 
            public HandleRef MakeHandleRef( object wrapper ) 
            {
                return new HandleRef(wrapper, handle); 
            }

            /// 
            ///     Critical: This calls into DestroyIcon 
            /// 
            [SecurityCritical] 
            protected override bool ReleaseHandle() 
            {
                HandleCollector.Remove( handle , NativeMethods.CommonHandles.Icon); 
                return UnsafeNativeMethods.DestroyIcon(handle);
            }

        } 

        internal sealed class CursorHandle : IconHandle 
        { 

 
            /// 
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can
            ///      be risky 
            /// 
            [SecurityCritical,SecurityTreatAsSafe] 
            internal CursorHandle() : base(IntPtr.Zero, true) 
            {
            } 

            internal CursorHandle( IntPtr ptr, bool fOwnsHandle ) : base( ptr, fOwnsHandle)
            {
            } 

            ///  
            ///     Critical: This calls into DestroyCursor 
            /// 
            [SecurityCritical] 
            protected override bool ReleaseHandle()
            {
                HandleCollector.Remove( handle , HandleCollectorType );
                return UnsafeNativeMethods.DestroyCursor( handle ); 
            }
 
            internal override int HandleCollectorType 
            {
                get 
                {
                    return NativeMethods.CommonHandles.Cursor ;
                }
            } 

        } 
 
        public static int SignedHIWORD(IntPtr intPtr)
        { 
            return SignedHIWORD(IntPtrToInt32(intPtr));
        }

        public static int SignedLOWORD(IntPtr intPtr) 
        {
            return SignedLOWORD(IntPtrToInt32(intPtr)); 
        } 

        public const int SIZE_RESTORED = 0; 
        public const int SIZE_MINIMIZED = 1;

        public const int WS_EX_NOACTIVATE = 0x08000000;
        public const int VK_LSHIFT = 0xA0; 
        public const int VK_RMENU = 0xA5;
        public const int VK_LMENU = 0xA4; 
        public const int VK_LCONTROL = 0xA2; 
        public const int VK_RCONTROL = 0xA3;
        public const int VK_LBUTTON = 0x01; 
        public const int VK_RBUTTON = 0x02;
        public const int VK_MBUTTON = 0x04;
        public const int VK_XBUTTON1 = 0x05;
        public const int VK_XBUTTON2 = 0x06; 

        // We have this wrapper because casting IntPtr to int may 
        // generate OverflowException when one of high 32 bits is set. 
        public static int IntPtrToInt32(IntPtr intPtr)
        { 
            return unchecked((int)intPtr.ToInt64());
        }

        public const int PM_QS_SENDMESSAGE = unchecked(QS_SENDMESSAGE << 16); 
        public const int PM_QS_POSTMESSAGE = unchecked((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16);
        public const int MWMO_WAITALL = 0x0001; 
        public const int MWMO_ALERTABLE = 0x0002; 
        public const int MWMO_INPUTAVAILABLE = 0x0004;
 
        public static IntPtr HWND_MESSAGE = new IntPtr(-3);


        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] 
        public class WNDCLASSEX_I
        { 
            public int cbSize = 0; 

            public int style = 0; 

            public IntPtr lpfnWndProc = IntPtr.Zero;

            public int cbClsExtra = 0; 

            public int cbWndExtra = 0; 
 
            public IntPtr hInstance = IntPtr.Zero;
 
            public IntPtr hIcon = IntPtr.Zero;

            public IntPtr hCursor = IntPtr.Zero;
 
            public IntPtr hbrBackground = IntPtr.Zero;
 
            public IntPtr lpszMenuName = IntPtr.Zero; 

            public IntPtr lpszClassName = IntPtr.Zero; 

            public IntPtr hIconSm = IntPtr.Zero;
        }
 
        // NOTE:  this replaces the RECT struct in NativeMethodsCLR.cs because it adds an extra method IsEmpty
        [StructLayout(LayoutKind.Sequential)] 
        public struct RECT 
        {
            public int left; 

            public int top;

            public int right; 

            public int bottom; 
 
            public RECT(int left, int top, int right, int bottom)
            { 
                this.left = left;
                this.top = top;
                this.right = right;
                this.bottom = bottom; 
            }
 
            public bool IsEmpty 
            {
                get 
                {
                    return left >= right || top >= bottom;
                }
            } 
        }
 
        // NOTE:  this replaces the struct in NativeMethodsCLR.cs because it adds some additonal methods 
        [StructLayout(LayoutKind.Sequential, Pack = 2)]
        public struct BITMAPINFO 
        {
            // bmiHeader was a by-value BITMAPINFOHEADER structure
            public int bmiHeader_biSize;  // ndirect.DllLib.sizeOf( BITMAPINFOHEADER.class );
 
            public int bmiHeader_biWidth;
 
            public int bmiHeader_biHeight; 

            public short bmiHeader_biPlanes; 

            public short bmiHeader_biBitCount;

            public int bmiHeader_biCompression; 

            public int bmiHeader_biSizeImage; 
 
            public int bmiHeader_biXPelsPerMeter;
 
            public int bmiHeader_biYPelsPerMeter;

            public int bmiHeader_biClrUsed;
 
            public int bmiHeader_biClrImportant;
 
 
            // hamidm -- 03/08/2006
            // if the following RGBQUAD struct is added in this struct, 
            // we need to update bmiHeader_biSize in the cctor to hard-coded 40
            // since it expects the size of the BITMAPINFOHEADER only
            //
            // bmiColors was an embedded array of RGBQUAD structures 
            // public byte     bmiColors_rgbBlue = 0;
            // public byte     bmiColors_rgbGreen = 0; 
            // public byte     bmiColors_rgbRed = 0; 
            // public byte     bmiColors_rgbReserved = 0;
            public BITMAPINFO(int width, int height, short bpp) 
            {
                bmiHeader_biSize = SecurityHelper.SizeOf(typeof(BITMAPINFO));
                bmiHeader_biWidth = width;
                bmiHeader_biHeight = height; 
                bmiHeader_biPlanes = 1;
                bmiHeader_biBitCount = bpp; 
                bmiHeader_biCompression = 0; 
                bmiHeader_biSizeImage = 0;
                bmiHeader_biXPelsPerMeter = 0; 
                bmiHeader_biYPelsPerMeter = 0;
                bmiHeader_biClrUsed = 0;
                bmiHeader_biClrImportant = 0;
            } 
        }
 
        [StructLayout(LayoutKind.Sequential)] 
        internal class SECURITY_ATTRIBUTES : IDisposable
        { 
            public int nLength = SecurityHelper.SizeOf(typeof(SECURITY_ATTRIBUTES));

            public IntPtr lpSecurityDescriptor = IntPtr.Zero;
 
            public bool bInheritHandle = false;
 
            public void Dispose() 
            {
                if (lpSecurityDescriptor != IntPtr.Zero) 
                {
                    UnsafeNativeMethods.LocalFree(lpSecurityDescriptor);
                    lpSecurityDescriptor = IntPtr.Zero;
                } 
                GC.SuppressFinalize(this);
            } 
 
            ~SECURITY_ATTRIBUTES()
            { 
                Dispose();
            }

        } 

        internal const uint DELETE = 0x00010000, READ_CONTROL = 0x00020000, WRITE_DAC = 0x00040000, WRITE_OWNER = 0x00080000, SYNCHRONIZE = 0x00100000, STANDARD_RIGHTS_REQUIRED = 0x000F0000, STANDARD_RIGHTS_READ = READ_CONTROL, STANDARD_RIGHTS_WRITE = READ_CONTROL, STANDARD_RIGHTS_EXECUTE = READ_CONTROL, STANDARD_RIGHTS_ALL = 0x001F0000, SPECIFIC_RIGHTS_ALL = 0x0000FFFF, ACCESS_SYSTEM_SECURITY = 0x01000000, MAXIMUM_ALLOWED = 0x02000000, GENERIC_READ = 0x80000000, GENERIC_WRITE = 0x40000000, GENERIC_EXECUTE = 0x20000000, GENERIC_ALL = 0x10000000; 
 
        internal const uint FILE_READ_DATA = 0x0001,    // file & pipe
            FILE_LIST_DIRECTORY = 0x0001,    // directory 
            FILE_WRITE_DATA = 0x0002,    // file & pipe
            FILE_ADD_FILE = 0x0002,    // directory
            FILE_APPEND_DATA = 0x0004,    // file
            FILE_ADD_SUBDIRECTORY = 0x0004,    // directory 
            FILE_CREATE_PIPE_INSTANCE = 0x0004,    // named pipe
            FILE_READ_EA = 0x0008,    // file & directory 
            FILE_WRITE_EA = 0x0010,    // file & directory 
            FILE_EXECUTE = 0x0020,    // file
            FILE_TRAVERSE = 0x0020,    // directory 
            FILE_DELETE_CHILD = 0x0040,    // directory
            FILE_READ_ATTRIBUTES = 0x0080,    // all
            FILE_WRITE_ATTRIBUTES = 0x0100;    // all
 
        internal const uint FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF, FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE, FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE, FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE;
 
        internal const uint FILE_SHARE_READ = 0x00000001, FILE_SHARE_WRITE = 0x00000002, FILE_SHARE_DELETE = 0x00000004; 

        internal const int ERROR_ALREADY_EXISTS = 183; 

        internal const int OPEN_EXISTING = 3;

        internal const int PAGE_READONLY = 0x02; 

        internal const int SECTION_MAP_READ = 0x0004; 
 
        internal const int FILE_ATTRIBUTE_NORMAL = 0x00000080;
        internal const int FILE_ATTRIBUTE_TEMPORARY = 0x00000100; 
        internal const int FILE_FLAG_DELETE_ON_CLOSE = 0x04000000;

        internal const int CREATE_ALWAYS   = 2;
 
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public class WNDCLASSEX_D 
        { 
            public int cbSize = 0;
 
            public int style = 0;

            public WndProc lpfnWndProc = null;
 
            public int cbClsExtra = 0;
 
            public int cbWndExtra = 0; 

            public IntPtr hInstance = IntPtr.Zero; 

            public IntPtr hIcon = IntPtr.Zero;

            public IntPtr hCursor = IntPtr.Zero; 

            public IntPtr hbrBackground = IntPtr.Zero; 
 
            public string lpszMenuName = null;
 
            public string lpszClassName = null;

            public IntPtr hIconSm = IntPtr.Zero;
        } 

 
#if BASE_NATIVEMETHODS 

        public const int QS_EVENT = 0x2000; 

        public const int VK_CANCEL = 0x03;

 
        public const int VK_BACK = 0x08;
 
        public const int VK_CLEAR = 0x0C; 

        public const int VK_RETURN = 0x0D; 

        public const int VK_PAUSE = 0x13;

        public const int VK_CAPITAL = 0x14; 

        public const int VK_KANA = 0x15; 
 
        public const int VK_HANGEUL = 0x15;
 
        public const int VK_HANGUL = 0x15;

        public const int VK_JUNJA = 0x17;
 
        public const int VK_FINAL = 0x18;
 
        public const int VK_HANJA = 0x19; 

        public const int VK_KANJI = 0x19; 

        public const int VK_ESCAPE = 0x1B;

        public const int VK_CONVERT = 0x1C; 

        public const int VK_NONCONVERT = 0x1D; 
 
        public const int VK_ACCEPT = 0x1E;
 
        public const int VK_MODECHANGE = 0x1F;

        public const int VK_SPACE = 0x20;
 
        public const int VK_PRIOR = 0x21;
 
        public const int VK_NEXT = 0x22; 

        public const int VK_END = 0x23; 

        public const int VK_HOME = 0x24;

        public const int VK_LEFT = 0x25; 

        public const int VK_UP = 0x26; 
 
        public const int VK_RIGHT = 0x27;
 
        public const int VK_DOWN = 0x28;

        public const int VK_SELECT = 0x29;
 
        public const int VK_PRINT = 0x2A;
 
        public const int VK_EXECUTE = 0x2B; 

        public const int VK_SNAPSHOT = 0x2C; 

        public const int VK_INSERT = 0x2D;

        public const int VK_DELETE = 0x2E; 

        public const int VK_HELP = 0x2F; 
 
        public const int VK_0 = 0x30;
 
        public const int VK_1 = 0x31;

        public const int VK_2 = 0x32;
 
        public const int VK_3 = 0x33;
 
        public const int VK_4 = 0x34; 

        public const int VK_5 = 0x35; 

        public const int VK_6 = 0x36;

        public const int VK_7 = 0x37; 

        public const int VK_8 = 0x38; 
 
        public const int VK_9 = 0x39;
 
        public const int VK_A = 0x41;

        public const int VK_B = 0x42;
 
        public const int VK_C = 0x43;
 
        public const int VK_D = 0x44; 

        public const int VK_E = 0x45; 

        public const int VK_F = 0x46;

        public const int VK_G = 0x47; 

        public const int VK_H = 0x48; 
 
        public const int VK_I = 0x49;
 
        public const int VK_J = 0x4A;

        public const int VK_K = 0x4B;
 
        public const int VK_L = 0x4C;
 
        public const int VK_M = 0x4D; 

        public const int VK_N = 0x4E; 

        public const int VK_O = 0x4F;

        public const int VK_P = 0x50; 

        public const int VK_Q = 0x51; 
 
        public const int VK_R = 0x52;
 
        public const int VK_S = 0x53;

        public const int VK_T = 0x54;
 
        public const int VK_U = 0x55;
 
        public const int VK_V = 0x56; 

        public const int VK_W = 0x57; 

        public const int VK_X = 0x58;

        public const int VK_Y = 0x59; 

        public const int VK_Z = 0x5A; 
 
        public const int VK_LWIN = 0x5B;
 
        public const int VK_RWIN = 0x5C;

        public const int VK_APPS = 0x5D;
 
        public const int VK_POWER = 0x5E;
 
        public const int VK_SLEEP = 0x5F; 

        public const int VK_NUMPAD0 = 0x60; 

        public const int VK_NUMPAD1 = 0x61;

        public const int VK_NUMPAD2 = 0x62; 

        public const int VK_NUMPAD3 = 0x63; 
 
        public const int VK_NUMPAD4 = 0x64;
 
        public const int VK_NUMPAD5 = 0x65;

        public const int VK_NUMPAD6 = 0x66;
 
        public const int VK_NUMPAD7 = 0x67;
 
        public const int VK_NUMPAD8 = 0x68; 

        public const int VK_NUMPAD9 = 0x69; 

        public const int VK_MULTIPLY = 0x6A;

        public const int VK_ADD = 0x6B; 

        public const int VK_SEPARATOR = 0x6C; 
 
        public const int VK_SUBTRACT = 0x6D;
 
        public const int VK_DECIMAL = 0x6E;

        public const int VK_DIVIDE = 0x6F;
 
        public const int VK_F1 = 0x70;
 
        public const int VK_F2 = 0x71; 

        public const int VK_F3 = 0x72; 

        public const int VK_F4 = 0x73;

        public const int VK_F5 = 0x74; 

        public const int VK_F6 = 0x75; 
 
        public const int VK_F7 = 0x76;
 
        public const int VK_F8 = 0x77;

        public const int VK_F9 = 0x78;
 
        public const int VK_F10 = 0x79;
 
        public const int VK_F11 = 0x7A; 

        public const int VK_F12 = 0x7B; 

        public const int VK_F13 = 0x7C;

        public const int VK_F14 = 0x7D; 

        public const int VK_F15 = 0x7E; 
 
        public const int VK_F16 = 0x7F;
 
        public const int VK_F17 = 0x80;

        public const int VK_F18 = 0x81;
 
        public const int VK_F19 = 0x82;
 
        public const int VK_F20 = 0x83; 

        public const int VK_F21 = 0x84; 

        public const int VK_F22 = 0x85;

        public const int VK_F23 = 0x86; 

        public const int VK_F24 = 0x87; 
 
        public const int VK_NUMLOCK = 0x90;
 
        public const int VK_SCROLL = 0x91;


        public const int VK_RSHIFT = 0xA1; 

        public const int VK_BROWSER_BACK = 0xA6; 
 
        public const int VK_BROWSER_FORWARD = 0xA7;
 
        public const int VK_BROWSER_REFRESH = 0xA8;

        public const int VK_BROWSER_STOP = 0xA9;
 
        public const int VK_BROWSER_SEARCH = 0xAA;
 
        public const int VK_BROWSER_FAVORITES = 0xAB; 

        public const int VK_BROWSER_HOME = 0xAC; 

        public const int VK_VOLUME_MUTE = 0xAD;

        public const int VK_VOLUME_DOWN = 0xAE; 

        public const int VK_VOLUME_UP = 0xAF; 
 
        public const int VK_MEDIA_NEXT_TRACK = 0xB0;
 
        public const int VK_MEDIA_PREV_TRACK = 0xB1;

        public const int VK_MEDIA_STOP = 0xB2;
 
        public const int VK_MEDIA_PLAY_PAUSE = 0xB3;
 
        public const int VK_LAUNCH_MAIL = 0xB4; 

        public const int VK_LAUNCH_MEDIA_SELECT = 0xB5; 

        public const int VK_LAUNCH_APP1 = 0xB6;

        public const int VK_LAUNCH_APP2 = 0xB7; 

        public const int VK_PROCESSKEY = 0xE5; 
 
        public const int VK_PACKET = 0xE7;
 
        public const int VK_ATTN = 0xF6;

        public const int VK_CRSEL = 0xF7;
 
        public const int VK_EXSEL = 0xF8;
 
        public const int VK_EREOF = 0xF9; 

        public const int VK_PLAY = 0xFA; 

        public const int VK_ZOOM = 0xFB;

        public const int VK_NONAME = 0xFC; 

        public const int VK_PA1 = 0xFD; 
 
        public const int VK_OEM_CLEAR = 0xFE;
#endif 

        /////////////////////
        // from Framework
        internal const int ENDSESSION_LOGOFF = (unchecked((int)0x80000000)); 

        internal const int 
        ERROR_SUCCESS = 0; 

        public const int LOCALE_FONTSIGNATURE = 0x00000058; 

        public const int
            SM_CXFULLSCREEN = 16,
            SM_CYFULLSCREEN = 17, 
            SM_SLOWMACHINE = 73,
            SM_TABLETPC = 86, 
            SM_MEDIACENTER = 87, 
            SM_REMOTECONTROL = 0x2001,
            SWP_NOREDRAW = 0x0008, 
            SWP_FRAMECHANGED = 0x0020,  // The frame changed: send WM_NCCALCSIZE
            SWP_NOCOPYBITS = 0x0100,
            SWP_NOOWNERZORDER = 0x0200,  // Don't do owner Z ordering
            SWP_NOSENDCHANGING = 0x0400,  // Don't send WM_WINDOWPOSCHANGING 
            SWP_NOREPOSITION = SWP_NOOWNERZORDER,
            SWP_DEFERERASE = 0x2000, 
            SWP_ASYNCWINDOWPOS = 0x4000, 
            SPI_GETCURSORSHADOW = 0x101A,
            SPI_SETCURSORSHADOW = 0x101B, 
            SPI_GETFOCUSBORDERWIDTH = 0x200E,
            SPI_SETFOCUSBORDERWIDTH = 0x200F,
            SPI_GETFOCUSBORDERHEIGHT = 0x2010,
            SPI_SETFOCUSBORDERHEIGHT = 0x2011, 
            SPI_GETSTYLUSHOTTRACKING = 0x1010,
            SPI_SETSTYLUSHOTTRACKING = 0x1011, 
            SPI_GETTOOLTIPFADE = 0x1018, 
            SPI_SETTOOLTIPFADE = 0x1019,
            SPI_GETFOREGROUNDFLASHCOUNT = 0x2004, 
            SPI_SETFOREGROUNDFLASHCOUNT = 0x2005,
            SPI_SETCARETWIDTH = 0x2007,
            SPI_SETMOUSEVANISH = 0x1021,
            SPI_SETHIGHCONTRAST = 0x0043, 
            SPI_SETKEYBOARDPREF = 0x0045,
            SPI_SETFLATMENU = 0x1023, 
            SPI_SETDROPSHADOW = 0x1025, 
            SPI_SETWORKAREA = 0x002F,
            SPI_SETICONMETRICS = 0x002E, 
            SPI_SETDRAGWIDTH = 0x004C,
            SPI_SETDRAGHEIGHT = 0x004D,
            SPI_SETPENWINDOWS = 0x0031,
            SPI_SETMOUSEBUTTONSWAP = 0x0021, 
            SPI_SETSHOWSOUNDS = 0x0039,
            SPI_SETKEYBOARDCUES = 0x100B, 
            SPI_SETKEYBOARDDELAY = 0x0017, 
            SPI_SETSNAPTODEFBUTTON = 0x0060,
            SPI_SETWHEELSCROLLLINES = 0x0069, 
            SPI_SETMOUSEHOVERWIDTH = 0x0063,
            SPI_SETMOUSEHOVERHEIGHT = 0x0065,
            SPI_SETMOUSEHOVERTIME = 0x0067,
            SPI_SETMENUDROPALIGNMENT = 0x001C, 
            SPI_SETMENUFADE = 0x1013,
            SPI_SETMENUSHOWDELAY = 0x006B, 
            SPI_SETCOMBOBOXANIMATION = 0x1005, 
            SPI_SETCLIENTAREAANIMATION = 0x1043,
            SPI_SETGRADIENTCAPTIONS = 0x1009, 
            SPI_SETHOTTRACKING = 0x100F,
            SPI_SETLISTBOXSMOOTHSCROLLING = 0x1007,
            SPI_SETMENUANIMATION = 0x1003,
            SPI_SETSELECTIONFADE = 0x1015, 
            SPI_SETTOOLTIPANIMATION = 0x1017,
            SPI_SETUIEFFECTS = 0x103F, 
            SPI_SETANIMATION = 0x0049, 
            SPI_SETDRAGFULLWINDOWS = 0x0025,
            SPI_SETBORDER = 0x0006, 
            SPI_SETNONCLIENTMETRICS = 0x002A;

        public const int LANG_KOREAN = 0x12;
 
#if NEVER
        public static int PRIMARYLANGID(int lgid) 
        { 
            return ((ushort)(lgid) & 0x3ff);
        } 
#endif

        public const int
            MB_YESNO = 0x00000004, 
            MB_SYSTEMMODAL = 0x00001000,
            IDYES = 6; 
 
        public const int PM_QS_INPUT = unchecked(QS_INPUT << 16);
        public const int PM_QS_PAINT = unchecked(QS_PAINT << 16); 


        public const int
        SW_PARENTCLOSING = 1, 
        SW_PARENTOPENING = 3,
        SC_MOUSEMOVE = SC_MOVE + 0x02, 
        SPI_SETKEYBOARDSPEED = 0x000B; 

        internal const int TYMED_HGLOBAL = 1; 
        internal const int TYMED_FILE = 2;
        internal const int TYMED_ISTREAM = 4;
        internal const int TYMED_ISTORAGE = 8;
        internal const int TYMED_GDI = 16; 
        internal const int TYMED_MFPICT = 32;
        internal const int TYMED_ENHMF = 64; 
 

        public const int WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX); 
        public const int WM_THEMECHANGED = 0x031A;

        public const int KEYEVENTF_EXTENDEDKEY = 0x0001;
        public const int KEYEVENTF_KEYUP = 0x0002; 
        public const int KEYEVENTF_UNICODE = 0x0004;
        public const int KEYEVENTF_SCANCODE = 0x0008; 
 
        public const int MOUSEEVENTF_MOVE = 0x0001;
        public const int MOUSEEVENTF_LEFTDOWN = 0x0002; 
        public const int MOUSEEVENTF_LEFTUP = 0x0004;
        public const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
        public const int MOUSEEVENTF_RIGHTUP = 0x0010;
        public const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; 
        public const int MOUSEEVENTF_MIDDLEUP = 0x0040;
        public const int MOUSEEVENTF_XDOWN = 0x0080; 
        public const int MOUSEEVENTF_XUP = 0x0100; 
        public const int MOUSEEVENTF_WHEEL = 0x00800;
        public const int MOUSEEVENTF_VIRTUALDESK = 0x04000; 
        public const int MOUSEEVENTF_ABSOLUTE = 0x08000;
        public const int MOUSEEVENTF_ACTUAL = 0x10000;

        public const int GWL_HINSTANCE = -6; 
        public const int GWL_USERDATA = -21;
        public const int GCL_MENUNAME = -8; 
        public const int GCL_HBRBACKGROUND = -10; 
        public const int GCL_HCURSOR = -12;
        public const int GCL_HICON = -14; 
        public const int GCL_HMODULE = -16;
        public const int GCL_CBWNDEXTRA = -18;
        public const int GCL_CBCL----TRA = -20;
        public const int GCL_STYLE = -26; 
        public const int GCW_ATOM = -32;
        public const int GCL_HICONSM = -34; 
 
        public const int MONITOR_DEFAULTTONULL       = 0x00000000;
        public const int MONITOR_DEFAULTTOPRIMARY    = 0x00000001; 
        public const int MONITOR_DEFAULTTONEAREST = 0x00000002;


        [StructLayout(LayoutKind.Sequential)] 
        public class ANIMATIONINFO
        { 
            public int cbSize = SecurityHelper.SizeOf(typeof(ANIMATIONINFO)); 
            public int iMinAnimate = 0;
        } 



        [StructLayout(LayoutKind.Sequential)] 
        public sealed class STATDATA
        { 
            [MarshalAs(UnmanagedType.U4)] 
            public int advf = 0;
            [MarshalAs(UnmanagedType.U4)] 
            public int dwConnection = 0;
        }

        public enum WINDOWTHEMEATTRIBUTETYPE 
        {
            WTA_NONCLIENT = 1 
        }; 

        public const uint WTNCA_NODRAWCAPTION = 0x00000001;   // don't draw the window caption 
        public const uint WTNCA_NODRAWICON = 0x00000002;   // don't draw the system icon
        public const uint WTNCA_NOSYSMENU = 0x00000004;   // don't expose the system menu icon functionality
        public const uint WTNCA_VALIDBITS = (WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON | WTNCA_NOSYSMENU);
 
#if WCP_SYSTEM_THEMES_ENABLED
        [StructLayout(LayoutKind.Sequential)] 
        public class WTA_OPTIONS 
        {
            public uint dwFlags = 0; 
            public uint dwMask = 0;
        };
#endif // WCP_SYSTEM_THEMES_ENABLED
 

        internal const int NO_ERROR = 0; 
 

        /////////////////////////// 
        // Used by BASE

        public const int VK_OEM_1 = 0xBA;
        public const int VK_OEM_PLUS = 0xBB; 
        public const int VK_OEM_COMMA = 0xBC;
        public const int VK_OEM_MINUS = 0xBD; 
        public const int VK_OEM_PERIOD = 0xBE; 
        public const int VK_OEM_2 = 0xBF;
        public const int VK_OEM_3 = 0xC0; 
        public const int VK_C1 = 0xC1;   // Brazilian ABNT_C1 key (not defined in winuser.h).
        public const int VK_C2 = 0xC2;   // Brazilian ABNT_C2 key (not defined in winuser.h).
        public const int VK_OEM_4 = 0xDB;
        public const int VK_OEM_5 = 0xDC; 
        public const int VK_OEM_6 = 0xDD;
        public const int VK_OEM_7 = 0xDE; 
        public const int VK_OEM_8 = 0xDF; 
        public const int VK_OEM_AX = 0xE1;
        public const int VK_OEM_102 = 0xE2; 
        public const int VK_OEM_RESET = 0xE9;
        public const int VK_OEM_JUMP = 0xEA;
        public const int VK_OEM_PA1 = 0xEB;
        public const int VK_OEM_PA2 = 0xEC; 
        public const int VK_OEM_PA3 = 0xED;
        public const int VK_OEM_WSCTRL = 0xEE; 
        public const int VK_OEM_CUSEL = 0xEF; 
        public const int VK_OEM_ATTN = 0xF0;
        public const int VK_OEM_FINISH = 0xF1; 
        public const int VK_OEM_COPY = 0xF2;
        public const int VK_OEM_AUTO = 0xF3;
        public const int VK_OEM_ENLW = 0xF4;
        public const int VK_OEM_BACKTAB = 0xF5; 

        //////////////////////////// 
        // Needed by BASE 
#if BASE_NATIVEMETHODS
        ///  
        /// HWND.
        /// 
        [StructLayout(LayoutKind.Sequential)]
        public struct HWND 
        {
            ///  
            /// 
            /// 
            public IntPtr h; 

            /// 
            ///
            ///  
            /// 
            ///  
            public static HWND Cast(IntPtr h) 
            {
                HWND hTemp = new HWND(); 
                hTemp.h = h;
                return hTemp;
            }
 
            public HandleRef MakeHandleRef(object wrapper)
            { 
                return new HandleRef(wrapper,h); 
            }
 
            /// 
            ///
            /// 
            ///  
            /// 
            public static implicit operator IntPtr(HWND h) 
            { 
                return h.h;
            } 

/*
            /// 
            /// 
            /// 
            public static HWND NULL 
            { 
                get
                { 
                    HWND hTemp = new HWND();
                    hTemp.h = IntPtr.Zero;
                    return hTemp;
                } 
            }
 
            ///  
            ///
            ///  
            public static HWND HWND_TOP
            {
                get
                { 
                    HWND hTemp = new HWND();
                    hTemp.h = new IntPtr(0); 
                    return hTemp; 
                }
            } 

            /// 
            ///
            ///  
            public static HWND HWND_BOTTOM
            { 
                get 
                {
                    HWND hTemp = new HWND(); 
                    hTemp.h = new IntPtr(1);
                    return hTemp;
                }
            } 

            ///  
            /// 
            /// 
            public static HWND HWND_TOPMOST 
            {
                get
                {
                    HWND hTemp = new HWND(); 
                    hTemp.h = new IntPtr(-1);
                    return hTemp; 
                } 
            }
 
            /// 
            ///
            /// 
            public static HWND HWND_NOTOPMOST 
            {
                get 
                { 
                    HWND hTemp = new HWND();
                    hTemp.h = new IntPtr(-2); 
                    return hTemp;
                }
            }
 
            /// 
            /// 
            ///  
            public static HWND HWND_MESSAGE
            { 
                get
                {
                    HWND hTemp = new HWND();
                    hTemp.h = new IntPtr(-3); 
                    return hTemp;
                } 
            } 
*/
            ///  
            ///
            /// 
            /// 
            ///  
            /// 
            public static bool operator ==(HWND hl, HWND hr) 
            { 
                return (hl.h == hr.h);
            } 

            /// 
            ///
            ///  
            /// 
            ///  
            ///  
            public static bool operator !=(HWND hl, HWND hr)
            { 
                return (hl.h != hr.h);
            }

            ///  
            ///
            ///  
            ///  
            /// 
            override public bool Equals(object oCompare) 
            {
                HWND hr = Cast((HWND)oCompare);
                return (h == hr.h);
            } 

            ///  
            /// 
            /// 
            ///  
            public override int GetHashCode()
            {
                return (int)h;
            } 
        }
 
        ///  
        /// HDC.
        ///  
        public struct HDC
        {
            /// 
            /// 
            /// 
            public IntPtr h; 
 
            /// 
            /// 
            /// 
            /// 
            /// 
            public static HDC Cast(IntPtr h) 
            {
                HDC hTemp = new HDC(); 
                hTemp.h = h; 
                return hTemp;
            } 

            public HandleRef MakeHandleRef( object wrapper)
            {
                return new HandleRef(wrapper, h); 
            }
 
            ///  
            ///
            ///  
            public static HDC NULL
            {
                get
                { 
                    HDC hTemp = new HDC();
                    hTemp.h = IntPtr.Zero; 
                    return hTemp; 
                }
            } 
        }

        public const int DRAGDROP_S_DROP = 0x00040100;
        public const int DRAGDROP_S_CANCEL = 0x00040101; 
        public const int DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102;
 
        public const int WM_MOUSEQUERY = 0x009B; 
        public const int TME_CANCEL = (unchecked((int)0x80000000));
        public const int IDC_HAND = 32649; 

        /// 
        /// End document printing
        ///  
        /// Printer DC
        /// More than 0 if succeeds, zero or less if fails 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")] 
        [DllImport("gdi32.dll")]//CASRemoval:
        public static extern Int32 EndDoc(HDC hdc); 

        public const int DM_ORIENTATION = 0x00000001;
        public const int DM_PAPERSIZE = 0x00000002;
        public const int DM_PAPERLENGTH = 0x00000004; 
        public const int DM_PAPERWIDTH = 0x00000008;
        public const int DM_PRINTQUALITY = 0x00000400; 
        public const int DM_YRESOLUTION = 0x00002000; 

        ///  
        /// Escape description for ExtEscape
        /// 
        [StructLayout(LayoutKind.Sequential)]
        public unsafe struct PrinterEscape 
        {
            public Int32 cbInput; 
            public UInt32 cbOutput; 
            public UInt32 opcode;
            public Int32 cbSize; 
            public void* buffer;
        }

        ///  
        /// Send Escape to DC (printer)
        ///  
        /// Printer DC 
        /// Escape code
        /// # bytes in lpvInData 
        /// Input data
        /// size of lpvOutData in bytes
        /// Structure to receive data
        /// 0 if escape not implemented, negative if error, otherwise succeeds 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")]
        [DllImport("gdi32.dll")]//CASRemoval: 
        public static unsafe extern Int32 ExtEscape(HDC hdc, Int32 nEscape, Int32 cbInput, PrinterEscape* lpvInData, Int32 cbOutput, [Out] void* lpvOutData); 

        public const int MM_ISOTROPIC = 7; 


        public const int DM_OUT_BUFFER = 2;
 

        ///  
        /// Document info for printing 
        /// 
        [StructLayout(LayoutKind.Sequential)] 
        public unsafe struct DocInfo
        {// (*)indicates must be specfied
            internal Int32 cbSize;                     // (*)size of this structure (20)
            internal String lpszName;                   // (*)Name of document 
            internal String lpszOutput;                 // Name of output file (null)
            internal String lpszDatatype;               // Type of data ("raw" or "emf") can be null 
            internal Int32 fwType;                     // Flags about print job (0) 
        }
 
        /// 
        /// Start document printing
        /// 
        /// Printer DC 
        /// Document information
        /// More than zero if succeeded 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")] 
        [DllImport("gdi32.dll")]//CASRemoval:
        public unsafe static extern Int32 StartDoc(HDC hdc, ref DocInfo docInfo); 

        /// 
        ///
        ///  
        /// 
        ///  
        ///  
        /// 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("winspool.drv")] 
        [DllImport("winspool.drv", BestFitMapping = false, ThrowOnUnmappableChar = true)]//CASRemoval:
        public unsafe static extern Int32 OpenPrinterA(String printerName, IntPtr* phPrinter, void* pDefaults);

        ///  
        ///
        ///  
        ///  
        /// 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("winspool.drv")] 
        [DllImport("winspool.drv")]//CASRemoval:
        public static extern Int32 ClosePrinter(IntPtr hPrinter);

        ///  
        /// End document page
        ///  
        /// Printer DC 
        /// More than 0 if succeeds, zero or less if fails
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")] 
        [DllImport("gdi32.dll")]//CASRemoval:
        public static extern Int32 EndPage(HDC hdc);

        ///  
        /// Start document page
        ///  
        /// Printer DC 
        /// More than 0 if succeeds, zero or less if fails
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")] 
        [DllImport("gdi32.dll")]//CASRemoval:
        public static extern Int32 StartPage(HDC hdc);

 
        /// Win32 constants
        public const int E_HANDLE = unchecked((int)0x80070006); 
 

 
        /// wParam for WM_SETTINGCHANGE
        public const int SPI_SETFONTSMOOTHING = 0x004B;
        /// wParam for WM_SETTINGCHANGE
        public const int SPI_SETFONTSMOOTHINGTYPE = 0x200B; 
        /// wParam for WM_SETTINGCHANGE
        public const int SPI_SETFONTSMOOTHINGCONTRAST = 0x200D; 
        /// wParam for WM_SETTINGCHANGE 
        public const int SPI_SETFONTSMOOTHINGORIENTATION = 0x2013;
        /// wParam for WM_SETTINGCHANGE 
        public const int SPI_SETDISPLAYPIXELSTRUCTURE = 0x2015;
        /// wParam for WM_SETTINGCHANGE
        public const int SPI_SETDISPLAYGAMMA = 0x2017;
        /// wParam for WM_SETTINGCHANGE 
        public const int SPI_SETDISPLAYCLEARTYPELEVEL = 0x2019;
        /// wParam for WM_SETTINGCHANGE 
        public const int SPI_SETDISPLAYTEXTCONTRASTLEVEL = 0x201b; 

        public const int GMMP_USE_DISPLAY_POINTS = 1; 
        public const int GMMP_USE_HIGH_RESOLUTION_POINTS = 2;

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] // For GetMouseMovePointsEx
        public struct MOUSEMOVEPOINT { 
            public int    x ;                       //Specifies the x-coordinate of the mouse
            public int    y ;                       //Specifies the x-coordinate of the mouse 
            public int    time ;                    //Specifies the time stamp of the mouse coordinate 
            public IntPtr dwExtraInfo;              //Specifies extra information associated with this coordinate.
        } 

        public const int ERROR_FILE_NOT_FOUND               = 2;
        public const int ERROR_PATH_NOT_FOUND               = 3;
        public const int ERROR_ACCESS_DENIED                = 5; 
        public const int ERROR_INVALID_DRIVE                = 15;
        public const int ERROR_SHARING_VIOLATION            = 32; 
        public const int ERROR_FILE_EXISTS                  = 80; 
        public const int ERROR_INVALID_PARAMETER            = 87;
        public const int ERROR_FILENAME_EXCED_RANGE         = 206; 
        public const int ERROR_NO_MORE_ITEMS                = 259;
        public const int ERROR_OPERATION_ABORTED            = 995;

#endif // BASE_NATIVEMETHODS 

 
        public const int LR_DEFAULTCOLOR = 0x0000, 
                         LR_MONOCHROME = 0x0001,
                         LR_COLOR = 0x0002, 
                         LR_COPYRETURNORG = 0x0004,
                         LR_COPYDELETEORG = 0x0008,
                         LR_LOADFROMFILE = 0x0010,
                         LR_LOADTRANSPARENT = 0x0020, 
                         LR_DEFAULTSIZE = 0x0040,
                         LR_VGACOLOR = 0x0080, 
                         LR_LOADMAP3DCOLORS = 0x1000, 
                         LR_CREATEDIBSECTION = 0x2000,
                         LR_COPYFROMRESOURCE = 0x4000, 
                         LR_SHARED = unchecked((int)0x8000);

        internal enum Win32SystemColors
        { 
            ActiveBorder = 0x0A,
            ActiveCaption = 0x02, 
            ActiveCaptionText = 0x09, 
            AppWorkspace = 0x0C,
            Control = 0x0F, 
            ControlDark = 0x10,
            ControlDarkDark = 0x15,
            ControlLight = 0x16,
            ControlLightLight = 0x14, 
            ControlText = 0x12,
            Desktop = 0x01, 
            GradientActiveCaption = 0x1B, 
            GradientInactiveCaption = 0x1C,
            GrayText = 0x11, 
            Highlight = 0x0D,
            HighlightText = 0x0E,
            HotTrack = 0x1A,
            InactiveBorder = 0x0B, 
            InactiveCaption = 0x03,
            InactiveCaptionText = 0x13, 
            Info = 0x18, 
            InfoText = 0x17,
            Menu = 0x04, 
            MenuBar = 0x1E,
            MenuHighlight = 0x1D,
            MenuText = 0x07,
            ScrollBar = 0x00, 
            Window = 0x05,
            WindowFrame = 0x06, 
            WindowText = 0x08 
        }
 
#if WINDOWS_BASE
        // Copied from winineti.h

        // Note: CachePath should be an array of size 260. 
        [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
        internal struct InternetCacheConfigInfo 
        { 
            internal UInt32 dwStructSize;
            internal UInt32 dwContainer; 
            internal UInt32 dwQuota;
            internal UInt32 dwReserved4;
            [MarshalAs(UnmanagedType.Bool)] internal bool fPerUser;
            internal UInt32 dwSyncMode; 
            internal UInt32 dwNumCachePaths;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] internal string CachePath; 
            internal UInt32 dwCacheSize; 
            internal UInt32 dwNormalUsage;
            internal UInt32 dwExemptUsage; 
        }
#endif

        public const int WM_WTSSESSION_CHANGE = 0x02b1; 

        public const int WTS_CONSOLE_CONNECT    = 0x1; 
        public const int WTS_CONSOLE_DISCONNECT = 0x2; 
        public const int WTS_REMOTE_CONNECT     = 0x3;
        public const int WTS_REMOTE_DISCONNECT  = 0x4; 
        public const int WTS_SESSION_LOCK       = 0x7;
        public const int WTS_SESSION_UNLOCK     = 0x8;

        public const uint NOTIFY_FOR_THIS_SESSION = 0; 

        public const int PBT_APMSUSPEND         = 0x0004; 
        public const int PBT_APMRESUMECRITICAL  = 0x0006; 
        public const int PBT_APMRESUMESUSPEND   = 0x0007;
        public const int PBT_APMRESUMEAUTOMATIC = 0x0012; 

        public const uint PROFILE_READ = 1;
    }
} 


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

namespace MS.Win32
{ 
    using Accessibility;
    using System.Runtime.InteropServices; 
    using System; 
    using System.Security;
    using System.Security.Permissions; 
    using System.Collections;
    using System.Diagnostics;
    using System.IO;
    using System.Text; 
    using MS.Win32;
    using Microsoft.Win32.SafeHandles; 
 

#if WINDOWS_BASE 
    using MS.Internal.WindowsBase;
#elif PRESENTATION_CORE
    using MS.Internal.PresentationCore;
#elif PRESENTATIONFRAMEWORK 
    using MS.Internal.PresentationFramework;
#elif DRT 
    using MS.Internal.Drt; 
#else
#error Attempt to use FriendAccessAllowedAttribute from an unknown assembly. 
    using MS.Internal.YourAssemblyName;
#endif

    [FriendAccessAllowed] 
    internal partial class NativeMethods
    { 
        // Translates Win32 error codes into HRESULTs. 
        public static int MakeHRFromErrorCode(int errorCode)
        { 
            Debug.Assert((0xFFFF0000 & errorCode) == 0);
            return unchecked(((int)0x80070000) | errorCode);
        }
 
        public const int    FEATURE_OBJECT_CACHING = 0 ;
        public const int    FEATURE_ZONE_ELEVATION = 1; 
        public const int    FEATURE_MIME_HANDLING = 2; 
        public const int    FEATURE_MIME_SNIFFING = 3;
        public const int    FEATURE_WINDOW_RESTRICTIONS = 4; 
        public const int    FEATURE_WEBOC_POPUPMANAGEMENT = 5;
        public const int    FEATURE_BEHAVIORS = 6;
        public const int    FEATURE_DISABLE_MK_PROTOCOL = 7;
        public const int    FEATURE_LOCALMACHINE_LOCKDOWN = 8; 
        public const int    FEATURE_SECURITYBAND = 9;
        public const int    FEATURE_RESTRICT_ACTIVEXINSTALL = 10; 
        public const int    FEATURE_VALIDATE_NAVIGATE_URL = 11; 
        public const int    FEATURE_RESTRICT_FILEDOWNLOAD = 12;
        public const int    FEATURE_ADDON_MANAGEMENT = 13; 
        public const int    FEATURE_PROTOCOL_LOCKDOWN = 14;
        public const int    FEATURE_HTTP_USERNAME_PASSWORD_DISABLE = 15;
        public const int    FEATURE_SAFE_BINDTOOBJECT = 16;
        public const int    FEATURE_UNC_SAVEDFILECHECK = 17; 
        public const int    FEATURE_GET_URL_DOM_FILEPATH_UNENCODED = 18;
 
        public const int    GET_FEATURE_FROM_PROCESS = 0x00000002; 

        public const int     SET_FEATURE_ON_PROCESS=0x00000002; 

        public const int    URLZONE_LOCAL_MACHINE  = 0;
        public const int    URLZONE_INTRANET        = URLZONE_LOCAL_MACHINE + 1 ;
        public const int    URLZONE_TRUSTED         = URLZONE_INTRANET + 1 ; 
        public const int    URLZONE_INTERNET        = URLZONE_TRUSTED + 1 ;
        public const int    URLZONE_UNTRUSTED       = URLZONE_INTERNET + 1 ; 
 
        public const byte   URLPOLICY_ALLOW         =  0x00;
        public const byte   URLPOLICY_QUERY         =  0x01; 
        public const byte   URLPOLICY_DISALLOW      =  0x03;

        public const int    URLACTION_FEATURE_ZONE_ELEVATION = 0x00002101 ;
        public const int    PUAF_NOUI                = 0x00000001 ; 
        public const int    MUTZ_NOSAVEDFILECHECK = 0x00000001;
 
        [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode )] 
        internal sealed class OSVERSIONINFOEX
        { 
            public OSVERSIONINFOEX()
            {
                osVersionInfoSize = (int)SecurityHelper.SizeOf(this);
            } 

            // The OSVersionInfoSize field must be set to SecurityHelper.SizeOf(this) 
            public int osVersionInfoSize = 0; 
            public int majorVersion = 0;
            public int minorVersion = 0; 
            public int buildNumber = 0;
            public int platformId = 0;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
            public string csdVersion = null; 
            public short servicePackMajor = 0;
            public short servicePackMinor = 0; 
            public short suiteMask = 0; 
            public byte productType = 0;
            public byte reserved = 0; 
        }

        [ComImport, Guid("79eac9ee-baf9-11ce-8c82-00aa004ba90b"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IInternetSecurityMgrSite 
        {
            void GetWindow( /* [out] */ ref IntPtr phwnd) ; 
            void EnableModeless( /* [in] */ bool fEnable) ; 
        }
 
        [StructLayout(LayoutKind.Sequential)]
        internal class OLECMD {
            [MarshalAs(UnmanagedType.U4)]
            public   int cmdID = 0; 
            [MarshalAs(UnmanagedType.U4)]
            public   int cmdf = 0; 
 
        }
 
        [ComVisible(true), ComImport(), Guid("B722BCCB-4E68-101B-A2BC-00AA00404770"),
        InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown) ]
        internal interface IOleCommandTarget
        { 

            [return: MarshalAs(UnmanagedType.I4)] 
            [PreserveSig] 
            int QueryStatus(
                ref Guid pguidCmdGroup, 
                int cCmds,
                [In, Out]
                OLECMD prgCmds,
                [In, Out] 
                IntPtr pCmdText);
 
            [return: MarshalAs(UnmanagedType.I4)] 
            [PreserveSig]
            int Exec( 
                ref Guid pguidCmdGroup,
                int nCmdID,
                int nCmdexecopt,
                // we need to have this an array because callers need to be able to specify NULL or VT_NULL 
                [In, MarshalAs(UnmanagedType.LPArray)]
                Object[] pvaIn, 
                int pvaOut); 
        }
 
        [ComVisible(true), StructLayout(LayoutKind.Sequential)]
        internal class DOCHOSTUIINFO {
            [MarshalAs(UnmanagedType.U4)]
            internal   int cbSize = SecurityHelper.SizeOf(typeof(DOCHOSTUIINFO)); 
            [MarshalAs(UnmanagedType.I4)]
            internal   int dwFlags; 
            [MarshalAs(UnmanagedType.I4)] 
            internal   int dwDoubleClick;
            [MarshalAs(UnmanagedType.I4)] 
            internal   int dwReserved1 = 0;
            [MarshalAs(UnmanagedType.I4)]
            internal   int dwReserved2 = 0;
        } 

 
        public enum DOCHOSTUIFLAG { 
            DIALOG = 0x1,
            DISABLE_HELP_MENU = 0x2, 
            NO3DBORDER = 0x4,
            SCROLL_NO = 0x8,
            DISABLE_SCRIPT_INACTIVE = 0x10,
            OPENNEWWIN = 0x20, 
            DISABLE_OFFSCREEN = 0x40,
            FLAT_SCROLLBAR = 0x80, 
            DIV_BLOCKDEFAULT = 0x100, 
            ACTIVATE_CLIENTHIT_ONLY = 0x200,
            NO3DOUTERBORDER = 0x00200000, 
            ENABLE_FORMS_AUTOCOMPLETE = 0x00004000,
            ENABLE_INPLACE_NAVIGATION = 0x00010000,
            IME_ENABLE_RECONVERSION   = 0x00020000,
            THEME = 0x00040000, 
            NOTHEME = 0x80000,
            DISABLE_COOKIE = 0x400, 
            NOPICS                    = 0x100000, 
            DISABLE_EDIT_NS_FIXUP     = 0x400000,
            LOCAL_MACHINE_ACCESS_CHECK= 0x800000, 
            DISABLE_UNTRUSTEDPROTOCOL = 0x1000000,
            HOST_NAVIGATES            = 0x2000000,
            ENABLE_REDIRECT_NOTIFICATION = 0x4000000
        } 

        public enum DOCHOSTUIDBLCLICK { 
            DEFAULT = 0x0, 
            SHOWPROPERTIES = 0x1,
            SHOWCODE = 0x2 
        }
        [DllImport(ExternDll.Gdi32, ExactSpelling = true, CharSet = CharSet.Auto, SetLastError = true)]
        internal static extern IntPtr SetEnhMetaFileBits(uint cbBuffer, byte[] buffer);
 
        // NOTE:  this struct (and BitmapHandle below) replaces a version from NativeMethodsCLR.cs that uses
        // IntPtrs instead of BitmapHandles (which derive from SafeHandle). 
        [StructLayout(LayoutKind.Sequential)] 
        internal class ICONINFO
        { 
            public bool fIcon = false;
            public int xHotspot = 0;
            public int yHotspot = 0;
            public BitmapHandle hbmMask = null; 
            public BitmapHandle hbmColor = null;
        } 
 
        internal class BitmapHandle : SafeHandle
        { 
            /// 
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can
            ///      be risky 
            /// 
            /// 
            /// NOTE: This constructor calls a virtual (HandleCollectorType). 
            /// This means all derived classes are at risk if their constructors have base:(ptr, fOwnsHandle)
            /// in their initialization list.  If derived classes do this they must be aware that if they override 
            /// the virtual it will be called *before* their constructor runs.  The class will exist at this point,
            /// so it won't break, but the virtual can't depend on any initialization steps done in the constructor.
            /// See CursorHandle below, which is safe.
 
            [SecurityCritical,SecurityTreatAsSafe]
            internal BitmapHandle(IntPtr ptr, bool fOwnsHandle ) : base(ptr, fOwnsHandle) 
            { 
                HandleCollector.Add(handle, HandleCollectorType);
            } 

            /// 
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can 
            ///      be risky
            ///  
            [SecurityCritical,SecurityTreatAsSafe] 
            internal BitmapHandle() : base(IntPtr.Zero, true)
            { 
            }

            /// 
            ///      Critical:This code calls into a base class which is protected by link demand an by inheritance demand 
            ///      TreatAsSafe: This code is considered safe to give out
            ///  
            public override bool IsInvalid 
            {
                [SecurityCritical,SecurityTreatAsSafe] 
                get
                {
                    return handle == IntPtr.Zero;
                } 
            }
 
            internal virtual int HandleCollectorType 
            {
                get 
                {
                    return NativeMethods.CommonHandles.GDI;
                }
            } 

            public HandleRef MakeHandleRef(object wrapper) 
            { 
                return new HandleRef(wrapper, handle);
            } 

            /// 
            ///     Critical: This calls into DeleteObject
            ///  
            [SecurityCritical]
            protected override bool ReleaseHandle() 
            { 
                HandleCollector.Remove(handle, NativeMethods.CommonHandles.GDI);
 
                return UnsafeNativeMethods.DeleteObject(handle);
            }
        }
 
        internal class IconHandle : SafeHandle
        { 
            ///  
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can 
            ///      be risky
            /// 
            ///
            /// NOTE: This constructor calls a virtual (HandleCollectorType). 
            /// This means all derived classes are at risk if their constructors have base:(ptr, fOwnsHandle)
            /// in their initialization list.  If derived classes do this they must be aware that if they override 
            /// the virtual it will be called *before* their constructor runs.  The class will exist at this point, 
            /// so it won't break, but the virtual can't depend on any initialization steps done in the constructor.
            /// See CursorHandle below, which is safe. 

            [SecurityCritical,SecurityTreatAsSafe]
            internal IconHandle( IntPtr ptr, bool fOwnsHandle ) : base( ptr, fOwnsHandle)
            { 
                HandleCollector.Add( handle , HandleCollectorType );
            } 
 
            /// 
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand 
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can
            ///      be risky
            /// 
            [SecurityCritical,SecurityTreatAsSafe] 
            internal IconHandle(IntPtr ptr) : base(ptr, true)
            { 
            } 

            internal IconHandle() : this(IntPtr.Zero) 
            {
            }

            ///  
            ///      Critical:This code calls into a base class which is protected by link demand an by inheritance demand
            ///      TreatAsSafe: This code is considered safe to give out 
            ///  
            public override bool IsInvalid
            { 
                [SecurityCritical,SecurityTreatAsSafe]
                get
                {
                    return handle == IntPtr.Zero; 
                }
            } 
 
            internal virtual int HandleCollectorType
            { 
                get
                {
                    return NativeMethods.CommonHandles.Icon ;
                } 
            }
 
            public HandleRef MakeHandleRef( object wrapper ) 
            {
                return new HandleRef(wrapper, handle); 
            }

            /// 
            ///     Critical: This calls into DestroyIcon 
            /// 
            [SecurityCritical] 
            protected override bool ReleaseHandle() 
            {
                HandleCollector.Remove( handle , NativeMethods.CommonHandles.Icon); 
                return UnsafeNativeMethods.DestroyIcon(handle);
            }

        } 

        internal sealed class CursorHandle : IconHandle 
        { 

 
            /// 
            ///      Critical:This code calls into a base class which is protected by link demand and by inheritance demand
            ///      TreatAsSafe: Creating the wrapper is not bad it is accessing the data in it to manipulate it that can
            ///      be risky 
            /// 
            [SecurityCritical,SecurityTreatAsSafe] 
            internal CursorHandle() : base(IntPtr.Zero, true) 
            {
            } 

            internal CursorHandle( IntPtr ptr, bool fOwnsHandle ) : base( ptr, fOwnsHandle)
            {
            } 

            ///  
            ///     Critical: This calls into DestroyCursor 
            /// 
            [SecurityCritical] 
            protected override bool ReleaseHandle()
            {
                HandleCollector.Remove( handle , HandleCollectorType );
                return UnsafeNativeMethods.DestroyCursor( handle ); 
            }
 
            internal override int HandleCollectorType 
            {
                get 
                {
                    return NativeMethods.CommonHandles.Cursor ;
                }
            } 

        } 
 
        public static int SignedHIWORD(IntPtr intPtr)
        { 
            return SignedHIWORD(IntPtrToInt32(intPtr));
        }

        public static int SignedLOWORD(IntPtr intPtr) 
        {
            return SignedLOWORD(IntPtrToInt32(intPtr)); 
        } 

        public const int SIZE_RESTORED = 0; 
        public const int SIZE_MINIMIZED = 1;

        public const int WS_EX_NOACTIVATE = 0x08000000;
        public const int VK_LSHIFT = 0xA0; 
        public const int VK_RMENU = 0xA5;
        public const int VK_LMENU = 0xA4; 
        public const int VK_LCONTROL = 0xA2; 
        public const int VK_RCONTROL = 0xA3;
        public const int VK_LBUTTON = 0x01; 
        public const int VK_RBUTTON = 0x02;
        public const int VK_MBUTTON = 0x04;
        public const int VK_XBUTTON1 = 0x05;
        public const int VK_XBUTTON2 = 0x06; 

        // We have this wrapper because casting IntPtr to int may 
        // generate OverflowException when one of high 32 bits is set. 
        public static int IntPtrToInt32(IntPtr intPtr)
        { 
            return unchecked((int)intPtr.ToInt64());
        }

        public const int PM_QS_SENDMESSAGE = unchecked(QS_SENDMESSAGE << 16); 
        public const int PM_QS_POSTMESSAGE = unchecked((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16);
        public const int MWMO_WAITALL = 0x0001; 
        public const int MWMO_ALERTABLE = 0x0002; 
        public const int MWMO_INPUTAVAILABLE = 0x0004;
 
        public static IntPtr HWND_MESSAGE = new IntPtr(-3);


        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] 
        public class WNDCLASSEX_I
        { 
            public int cbSize = 0; 

            public int style = 0; 

            public IntPtr lpfnWndProc = IntPtr.Zero;

            public int cbClsExtra = 0; 

            public int cbWndExtra = 0; 
 
            public IntPtr hInstance = IntPtr.Zero;
 
            public IntPtr hIcon = IntPtr.Zero;

            public IntPtr hCursor = IntPtr.Zero;
 
            public IntPtr hbrBackground = IntPtr.Zero;
 
            public IntPtr lpszMenuName = IntPtr.Zero; 

            public IntPtr lpszClassName = IntPtr.Zero; 

            public IntPtr hIconSm = IntPtr.Zero;
        }
 
        // NOTE:  this replaces the RECT struct in NativeMethodsCLR.cs because it adds an extra method IsEmpty
        [StructLayout(LayoutKind.Sequential)] 
        public struct RECT 
        {
            public int left; 

            public int top;

            public int right; 

            public int bottom; 
 
            public RECT(int left, int top, int right, int bottom)
            { 
                this.left = left;
                this.top = top;
                this.right = right;
                this.bottom = bottom; 
            }
 
            public bool IsEmpty 
            {
                get 
                {
                    return left >= right || top >= bottom;
                }
            } 
        }
 
        // NOTE:  this replaces the struct in NativeMethodsCLR.cs because it adds some additonal methods 
        [StructLayout(LayoutKind.Sequential, Pack = 2)]
        public struct BITMAPINFO 
        {
            // bmiHeader was a by-value BITMAPINFOHEADER structure
            public int bmiHeader_biSize;  // ndirect.DllLib.sizeOf( BITMAPINFOHEADER.class );
 
            public int bmiHeader_biWidth;
 
            public int bmiHeader_biHeight; 

            public short bmiHeader_biPlanes; 

            public short bmiHeader_biBitCount;

            public int bmiHeader_biCompression; 

            public int bmiHeader_biSizeImage; 
 
            public int bmiHeader_biXPelsPerMeter;
 
            public int bmiHeader_biYPelsPerMeter;

            public int bmiHeader_biClrUsed;
 
            public int bmiHeader_biClrImportant;
 
 
            // hamidm -- 03/08/2006
            // if the following RGBQUAD struct is added in this struct, 
            // we need to update bmiHeader_biSize in the cctor to hard-coded 40
            // since it expects the size of the BITMAPINFOHEADER only
            //
            // bmiColors was an embedded array of RGBQUAD structures 
            // public byte     bmiColors_rgbBlue = 0;
            // public byte     bmiColors_rgbGreen = 0; 
            // public byte     bmiColors_rgbRed = 0; 
            // public byte     bmiColors_rgbReserved = 0;
            public BITMAPINFO(int width, int height, short bpp) 
            {
                bmiHeader_biSize = SecurityHelper.SizeOf(typeof(BITMAPINFO));
                bmiHeader_biWidth = width;
                bmiHeader_biHeight = height; 
                bmiHeader_biPlanes = 1;
                bmiHeader_biBitCount = bpp; 
                bmiHeader_biCompression = 0; 
                bmiHeader_biSizeImage = 0;
                bmiHeader_biXPelsPerMeter = 0; 
                bmiHeader_biYPelsPerMeter = 0;
                bmiHeader_biClrUsed = 0;
                bmiHeader_biClrImportant = 0;
            } 
        }
 
        [StructLayout(LayoutKind.Sequential)] 
        internal class SECURITY_ATTRIBUTES : IDisposable
        { 
            public int nLength = SecurityHelper.SizeOf(typeof(SECURITY_ATTRIBUTES));

            public IntPtr lpSecurityDescriptor = IntPtr.Zero;
 
            public bool bInheritHandle = false;
 
            public void Dispose() 
            {
                if (lpSecurityDescriptor != IntPtr.Zero) 
                {
                    UnsafeNativeMethods.LocalFree(lpSecurityDescriptor);
                    lpSecurityDescriptor = IntPtr.Zero;
                } 
                GC.SuppressFinalize(this);
            } 
 
            ~SECURITY_ATTRIBUTES()
            { 
                Dispose();
            }

        } 

        internal const uint DELETE = 0x00010000, READ_CONTROL = 0x00020000, WRITE_DAC = 0x00040000, WRITE_OWNER = 0x00080000, SYNCHRONIZE = 0x00100000, STANDARD_RIGHTS_REQUIRED = 0x000F0000, STANDARD_RIGHTS_READ = READ_CONTROL, STANDARD_RIGHTS_WRITE = READ_CONTROL, STANDARD_RIGHTS_EXECUTE = READ_CONTROL, STANDARD_RIGHTS_ALL = 0x001F0000, SPECIFIC_RIGHTS_ALL = 0x0000FFFF, ACCESS_SYSTEM_SECURITY = 0x01000000, MAXIMUM_ALLOWED = 0x02000000, GENERIC_READ = 0x80000000, GENERIC_WRITE = 0x40000000, GENERIC_EXECUTE = 0x20000000, GENERIC_ALL = 0x10000000; 
 
        internal const uint FILE_READ_DATA = 0x0001,    // file & pipe
            FILE_LIST_DIRECTORY = 0x0001,    // directory 
            FILE_WRITE_DATA = 0x0002,    // file & pipe
            FILE_ADD_FILE = 0x0002,    // directory
            FILE_APPEND_DATA = 0x0004,    // file
            FILE_ADD_SUBDIRECTORY = 0x0004,    // directory 
            FILE_CREATE_PIPE_INSTANCE = 0x0004,    // named pipe
            FILE_READ_EA = 0x0008,    // file & directory 
            FILE_WRITE_EA = 0x0010,    // file & directory 
            FILE_EXECUTE = 0x0020,    // file
            FILE_TRAVERSE = 0x0020,    // directory 
            FILE_DELETE_CHILD = 0x0040,    // directory
            FILE_READ_ATTRIBUTES = 0x0080,    // all
            FILE_WRITE_ATTRIBUTES = 0x0100;    // all
 
        internal const uint FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF, FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE, FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE, FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE;
 
        internal const uint FILE_SHARE_READ = 0x00000001, FILE_SHARE_WRITE = 0x00000002, FILE_SHARE_DELETE = 0x00000004; 

        internal const int ERROR_ALREADY_EXISTS = 183; 

        internal const int OPEN_EXISTING = 3;

        internal const int PAGE_READONLY = 0x02; 

        internal const int SECTION_MAP_READ = 0x0004; 
 
        internal const int FILE_ATTRIBUTE_NORMAL = 0x00000080;
        internal const int FILE_ATTRIBUTE_TEMPORARY = 0x00000100; 
        internal const int FILE_FLAG_DELETE_ON_CLOSE = 0x04000000;

        internal const int CREATE_ALWAYS   = 2;
 
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public class WNDCLASSEX_D 
        { 
            public int cbSize = 0;
 
            public int style = 0;

            public WndProc lpfnWndProc = null;
 
            public int cbClsExtra = 0;
 
            public int cbWndExtra = 0; 

            public IntPtr hInstance = IntPtr.Zero; 

            public IntPtr hIcon = IntPtr.Zero;

            public IntPtr hCursor = IntPtr.Zero; 

            public IntPtr hbrBackground = IntPtr.Zero; 
 
            public string lpszMenuName = null;
 
            public string lpszClassName = null;

            public IntPtr hIconSm = IntPtr.Zero;
        } 

 
#if BASE_NATIVEMETHODS 

        public const int QS_EVENT = 0x2000; 

        public const int VK_CANCEL = 0x03;

 
        public const int VK_BACK = 0x08;
 
        public const int VK_CLEAR = 0x0C; 

        public const int VK_RETURN = 0x0D; 

        public const int VK_PAUSE = 0x13;

        public const int VK_CAPITAL = 0x14; 

        public const int VK_KANA = 0x15; 
 
        public const int VK_HANGEUL = 0x15;
 
        public const int VK_HANGUL = 0x15;

        public const int VK_JUNJA = 0x17;
 
        public const int VK_FINAL = 0x18;
 
        public const int VK_HANJA = 0x19; 

        public const int VK_KANJI = 0x19; 

        public const int VK_ESCAPE = 0x1B;

        public const int VK_CONVERT = 0x1C; 

        public const int VK_NONCONVERT = 0x1D; 
 
        public const int VK_ACCEPT = 0x1E;
 
        public const int VK_MODECHANGE = 0x1F;

        public const int VK_SPACE = 0x20;
 
        public const int VK_PRIOR = 0x21;
 
        public const int VK_NEXT = 0x22; 

        public const int VK_END = 0x23; 

        public const int VK_HOME = 0x24;

        public const int VK_LEFT = 0x25; 

        public const int VK_UP = 0x26; 
 
        public const int VK_RIGHT = 0x27;
 
        public const int VK_DOWN = 0x28;

        public const int VK_SELECT = 0x29;
 
        public const int VK_PRINT = 0x2A;
 
        public const int VK_EXECUTE = 0x2B; 

        public const int VK_SNAPSHOT = 0x2C; 

        public const int VK_INSERT = 0x2D;

        public const int VK_DELETE = 0x2E; 

        public const int VK_HELP = 0x2F; 
 
        public const int VK_0 = 0x30;
 
        public const int VK_1 = 0x31;

        public const int VK_2 = 0x32;
 
        public const int VK_3 = 0x33;
 
        public const int VK_4 = 0x34; 

        public const int VK_5 = 0x35; 

        public const int VK_6 = 0x36;

        public const int VK_7 = 0x37; 

        public const int VK_8 = 0x38; 
 
        public const int VK_9 = 0x39;
 
        public const int VK_A = 0x41;

        public const int VK_B = 0x42;
 
        public const int VK_C = 0x43;
 
        public const int VK_D = 0x44; 

        public const int VK_E = 0x45; 

        public const int VK_F = 0x46;

        public const int VK_G = 0x47; 

        public const int VK_H = 0x48; 
 
        public const int VK_I = 0x49;
 
        public const int VK_J = 0x4A;

        public const int VK_K = 0x4B;
 
        public const int VK_L = 0x4C;
 
        public const int VK_M = 0x4D; 

        public const int VK_N = 0x4E; 

        public const int VK_O = 0x4F;

        public const int VK_P = 0x50; 

        public const int VK_Q = 0x51; 
 
        public const int VK_R = 0x52;
 
        public const int VK_S = 0x53;

        public const int VK_T = 0x54;
 
        public const int VK_U = 0x55;
 
        public const int VK_V = 0x56; 

        public const int VK_W = 0x57; 

        public const int VK_X = 0x58;

        public const int VK_Y = 0x59; 

        public const int VK_Z = 0x5A; 
 
        public const int VK_LWIN = 0x5B;
 
        public const int VK_RWIN = 0x5C;

        public const int VK_APPS = 0x5D;
 
        public const int VK_POWER = 0x5E;
 
        public const int VK_SLEEP = 0x5F; 

        public const int VK_NUMPAD0 = 0x60; 

        public const int VK_NUMPAD1 = 0x61;

        public const int VK_NUMPAD2 = 0x62; 

        public const int VK_NUMPAD3 = 0x63; 
 
        public const int VK_NUMPAD4 = 0x64;
 
        public const int VK_NUMPAD5 = 0x65;

        public const int VK_NUMPAD6 = 0x66;
 
        public const int VK_NUMPAD7 = 0x67;
 
        public const int VK_NUMPAD8 = 0x68; 

        public const int VK_NUMPAD9 = 0x69; 

        public const int VK_MULTIPLY = 0x6A;

        public const int VK_ADD = 0x6B; 

        public const int VK_SEPARATOR = 0x6C; 
 
        public const int VK_SUBTRACT = 0x6D;
 
        public const int VK_DECIMAL = 0x6E;

        public const int VK_DIVIDE = 0x6F;
 
        public const int VK_F1 = 0x70;
 
        public const int VK_F2 = 0x71; 

        public const int VK_F3 = 0x72; 

        public const int VK_F4 = 0x73;

        public const int VK_F5 = 0x74; 

        public const int VK_F6 = 0x75; 
 
        public const int VK_F7 = 0x76;
 
        public const int VK_F8 = 0x77;

        public const int VK_F9 = 0x78;
 
        public const int VK_F10 = 0x79;
 
        public const int VK_F11 = 0x7A; 

        public const int VK_F12 = 0x7B; 

        public const int VK_F13 = 0x7C;

        public const int VK_F14 = 0x7D; 

        public const int VK_F15 = 0x7E; 
 
        public const int VK_F16 = 0x7F;
 
        public const int VK_F17 = 0x80;

        public const int VK_F18 = 0x81;
 
        public const int VK_F19 = 0x82;
 
        public const int VK_F20 = 0x83; 

        public const int VK_F21 = 0x84; 

        public const int VK_F22 = 0x85;

        public const int VK_F23 = 0x86; 

        public const int VK_F24 = 0x87; 
 
        public const int VK_NUMLOCK = 0x90;
 
        public const int VK_SCROLL = 0x91;


        public const int VK_RSHIFT = 0xA1; 

        public const int VK_BROWSER_BACK = 0xA6; 
 
        public const int VK_BROWSER_FORWARD = 0xA7;
 
        public const int VK_BROWSER_REFRESH = 0xA8;

        public const int VK_BROWSER_STOP = 0xA9;
 
        public const int VK_BROWSER_SEARCH = 0xAA;
 
        public const int VK_BROWSER_FAVORITES = 0xAB; 

        public const int VK_BROWSER_HOME = 0xAC; 

        public const int VK_VOLUME_MUTE = 0xAD;

        public const int VK_VOLUME_DOWN = 0xAE; 

        public const int VK_VOLUME_UP = 0xAF; 
 
        public const int VK_MEDIA_NEXT_TRACK = 0xB0;
 
        public const int VK_MEDIA_PREV_TRACK = 0xB1;

        public const int VK_MEDIA_STOP = 0xB2;
 
        public const int VK_MEDIA_PLAY_PAUSE = 0xB3;
 
        public const int VK_LAUNCH_MAIL = 0xB4; 

        public const int VK_LAUNCH_MEDIA_SELECT = 0xB5; 

        public const int VK_LAUNCH_APP1 = 0xB6;

        public const int VK_LAUNCH_APP2 = 0xB7; 

        public const int VK_PROCESSKEY = 0xE5; 
 
        public const int VK_PACKET = 0xE7;
 
        public const int VK_ATTN = 0xF6;

        public const int VK_CRSEL = 0xF7;
 
        public const int VK_EXSEL = 0xF8;
 
        public const int VK_EREOF = 0xF9; 

        public const int VK_PLAY = 0xFA; 

        public const int VK_ZOOM = 0xFB;

        public const int VK_NONAME = 0xFC; 

        public const int VK_PA1 = 0xFD; 
 
        public const int VK_OEM_CLEAR = 0xFE;
#endif 

        /////////////////////
        // from Framework
        internal const int ENDSESSION_LOGOFF = (unchecked((int)0x80000000)); 

        internal const int 
        ERROR_SUCCESS = 0; 

        public const int LOCALE_FONTSIGNATURE = 0x00000058; 

        public const int
            SM_CXFULLSCREEN = 16,
            SM_CYFULLSCREEN = 17, 
            SM_SLOWMACHINE = 73,
            SM_TABLETPC = 86, 
            SM_MEDIACENTER = 87, 
            SM_REMOTECONTROL = 0x2001,
            SWP_NOREDRAW = 0x0008, 
            SWP_FRAMECHANGED = 0x0020,  // The frame changed: send WM_NCCALCSIZE
            SWP_NOCOPYBITS = 0x0100,
            SWP_NOOWNERZORDER = 0x0200,  // Don't do owner Z ordering
            SWP_NOSENDCHANGING = 0x0400,  // Don't send WM_WINDOWPOSCHANGING 
            SWP_NOREPOSITION = SWP_NOOWNERZORDER,
            SWP_DEFERERASE = 0x2000, 
            SWP_ASYNCWINDOWPOS = 0x4000, 
            SPI_GETCURSORSHADOW = 0x101A,
            SPI_SETCURSORSHADOW = 0x101B, 
            SPI_GETFOCUSBORDERWIDTH = 0x200E,
            SPI_SETFOCUSBORDERWIDTH = 0x200F,
            SPI_GETFOCUSBORDERHEIGHT = 0x2010,
            SPI_SETFOCUSBORDERHEIGHT = 0x2011, 
            SPI_GETSTYLUSHOTTRACKING = 0x1010,
            SPI_SETSTYLUSHOTTRACKING = 0x1011, 
            SPI_GETTOOLTIPFADE = 0x1018, 
            SPI_SETTOOLTIPFADE = 0x1019,
            SPI_GETFOREGROUNDFLASHCOUNT = 0x2004, 
            SPI_SETFOREGROUNDFLASHCOUNT = 0x2005,
            SPI_SETCARETWIDTH = 0x2007,
            SPI_SETMOUSEVANISH = 0x1021,
            SPI_SETHIGHCONTRAST = 0x0043, 
            SPI_SETKEYBOARDPREF = 0x0045,
            SPI_SETFLATMENU = 0x1023, 
            SPI_SETDROPSHADOW = 0x1025, 
            SPI_SETWORKAREA = 0x002F,
            SPI_SETICONMETRICS = 0x002E, 
            SPI_SETDRAGWIDTH = 0x004C,
            SPI_SETDRAGHEIGHT = 0x004D,
            SPI_SETPENWINDOWS = 0x0031,
            SPI_SETMOUSEBUTTONSWAP = 0x0021, 
            SPI_SETSHOWSOUNDS = 0x0039,
            SPI_SETKEYBOARDCUES = 0x100B, 
            SPI_SETKEYBOARDDELAY = 0x0017, 
            SPI_SETSNAPTODEFBUTTON = 0x0060,
            SPI_SETWHEELSCROLLLINES = 0x0069, 
            SPI_SETMOUSEHOVERWIDTH = 0x0063,
            SPI_SETMOUSEHOVERHEIGHT = 0x0065,
            SPI_SETMOUSEHOVERTIME = 0x0067,
            SPI_SETMENUDROPALIGNMENT = 0x001C, 
            SPI_SETMENUFADE = 0x1013,
            SPI_SETMENUSHOWDELAY = 0x006B, 
            SPI_SETCOMBOBOXANIMATION = 0x1005, 
            SPI_SETCLIENTAREAANIMATION = 0x1043,
            SPI_SETGRADIENTCAPTIONS = 0x1009, 
            SPI_SETHOTTRACKING = 0x100F,
            SPI_SETLISTBOXSMOOTHSCROLLING = 0x1007,
            SPI_SETMENUANIMATION = 0x1003,
            SPI_SETSELECTIONFADE = 0x1015, 
            SPI_SETTOOLTIPANIMATION = 0x1017,
            SPI_SETUIEFFECTS = 0x103F, 
            SPI_SETANIMATION = 0x0049, 
            SPI_SETDRAGFULLWINDOWS = 0x0025,
            SPI_SETBORDER = 0x0006, 
            SPI_SETNONCLIENTMETRICS = 0x002A;

        public const int LANG_KOREAN = 0x12;
 
#if NEVER
        public static int PRIMARYLANGID(int lgid) 
        { 
            return ((ushort)(lgid) & 0x3ff);
        } 
#endif

        public const int
            MB_YESNO = 0x00000004, 
            MB_SYSTEMMODAL = 0x00001000,
            IDYES = 6; 
 
        public const int PM_QS_INPUT = unchecked(QS_INPUT << 16);
        public const int PM_QS_PAINT = unchecked(QS_PAINT << 16); 


        public const int
        SW_PARENTCLOSING = 1, 
        SW_PARENTOPENING = 3,
        SC_MOUSEMOVE = SC_MOVE + 0x02, 
        SPI_SETKEYBOARDSPEED = 0x000B; 

        internal const int TYMED_HGLOBAL = 1; 
        internal const int TYMED_FILE = 2;
        internal const int TYMED_ISTREAM = 4;
        internal const int TYMED_ISTORAGE = 8;
        internal const int TYMED_GDI = 16; 
        internal const int TYMED_MFPICT = 32;
        internal const int TYMED_ENHMF = 64; 
 

        public const int WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX); 
        public const int WM_THEMECHANGED = 0x031A;

        public const int KEYEVENTF_EXTENDEDKEY = 0x0001;
        public const int KEYEVENTF_KEYUP = 0x0002; 
        public const int KEYEVENTF_UNICODE = 0x0004;
        public const int KEYEVENTF_SCANCODE = 0x0008; 
 
        public const int MOUSEEVENTF_MOVE = 0x0001;
        public const int MOUSEEVENTF_LEFTDOWN = 0x0002; 
        public const int MOUSEEVENTF_LEFTUP = 0x0004;
        public const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
        public const int MOUSEEVENTF_RIGHTUP = 0x0010;
        public const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; 
        public const int MOUSEEVENTF_MIDDLEUP = 0x0040;
        public const int MOUSEEVENTF_XDOWN = 0x0080; 
        public const int MOUSEEVENTF_XUP = 0x0100; 
        public const int MOUSEEVENTF_WHEEL = 0x00800;
        public const int MOUSEEVENTF_VIRTUALDESK = 0x04000; 
        public const int MOUSEEVENTF_ABSOLUTE = 0x08000;
        public const int MOUSEEVENTF_ACTUAL = 0x10000;

        public const int GWL_HINSTANCE = -6; 
        public const int GWL_USERDATA = -21;
        public const int GCL_MENUNAME = -8; 
        public const int GCL_HBRBACKGROUND = -10; 
        public const int GCL_HCURSOR = -12;
        public const int GCL_HICON = -14; 
        public const int GCL_HMODULE = -16;
        public const int GCL_CBWNDEXTRA = -18;
        public const int GCL_CBCL----TRA = -20;
        public const int GCL_STYLE = -26; 
        public const int GCW_ATOM = -32;
        public const int GCL_HICONSM = -34; 
 
        public const int MONITOR_DEFAULTTONULL       = 0x00000000;
        public const int MONITOR_DEFAULTTOPRIMARY    = 0x00000001; 
        public const int MONITOR_DEFAULTTONEAREST = 0x00000002;


        [StructLayout(LayoutKind.Sequential)] 
        public class ANIMATIONINFO
        { 
            public int cbSize = SecurityHelper.SizeOf(typeof(ANIMATIONINFO)); 
            public int iMinAnimate = 0;
        } 



        [StructLayout(LayoutKind.Sequential)] 
        public sealed class STATDATA
        { 
            [MarshalAs(UnmanagedType.U4)] 
            public int advf = 0;
            [MarshalAs(UnmanagedType.U4)] 
            public int dwConnection = 0;
        }

        public enum WINDOWTHEMEATTRIBUTETYPE 
        {
            WTA_NONCLIENT = 1 
        }; 

        public const uint WTNCA_NODRAWCAPTION = 0x00000001;   // don't draw the window caption 
        public const uint WTNCA_NODRAWICON = 0x00000002;   // don't draw the system icon
        public const uint WTNCA_NOSYSMENU = 0x00000004;   // don't expose the system menu icon functionality
        public const uint WTNCA_VALIDBITS = (WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON | WTNCA_NOSYSMENU);
 
#if WCP_SYSTEM_THEMES_ENABLED
        [StructLayout(LayoutKind.Sequential)] 
        public class WTA_OPTIONS 
        {
            public uint dwFlags = 0; 
            public uint dwMask = 0;
        };
#endif // WCP_SYSTEM_THEMES_ENABLED
 

        internal const int NO_ERROR = 0; 
 

        /////////////////////////// 
        // Used by BASE

        public const int VK_OEM_1 = 0xBA;
        public const int VK_OEM_PLUS = 0xBB; 
        public const int VK_OEM_COMMA = 0xBC;
        public const int VK_OEM_MINUS = 0xBD; 
        public const int VK_OEM_PERIOD = 0xBE; 
        public const int VK_OEM_2 = 0xBF;
        public const int VK_OEM_3 = 0xC0; 
        public const int VK_C1 = 0xC1;   // Brazilian ABNT_C1 key (not defined in winuser.h).
        public const int VK_C2 = 0xC2;   // Brazilian ABNT_C2 key (not defined in winuser.h).
        public const int VK_OEM_4 = 0xDB;
        public const int VK_OEM_5 = 0xDC; 
        public const int VK_OEM_6 = 0xDD;
        public const int VK_OEM_7 = 0xDE; 
        public const int VK_OEM_8 = 0xDF; 
        public const int VK_OEM_AX = 0xE1;
        public const int VK_OEM_102 = 0xE2; 
        public const int VK_OEM_RESET = 0xE9;
        public const int VK_OEM_JUMP = 0xEA;
        public const int VK_OEM_PA1 = 0xEB;
        public const int VK_OEM_PA2 = 0xEC; 
        public const int VK_OEM_PA3 = 0xED;
        public const int VK_OEM_WSCTRL = 0xEE; 
        public const int VK_OEM_CUSEL = 0xEF; 
        public const int VK_OEM_ATTN = 0xF0;
        public const int VK_OEM_FINISH = 0xF1; 
        public const int VK_OEM_COPY = 0xF2;
        public const int VK_OEM_AUTO = 0xF3;
        public const int VK_OEM_ENLW = 0xF4;
        public const int VK_OEM_BACKTAB = 0xF5; 

        //////////////////////////// 
        // Needed by BASE 
#if BASE_NATIVEMETHODS
        ///  
        /// HWND.
        /// 
        [StructLayout(LayoutKind.Sequential)]
        public struct HWND 
        {
            ///  
            /// 
            /// 
            public IntPtr h; 

            /// 
            ///
            ///  
            /// 
            ///  
            public static HWND Cast(IntPtr h) 
            {
                HWND hTemp = new HWND(); 
                hTemp.h = h;
                return hTemp;
            }
 
            public HandleRef MakeHandleRef(object wrapper)
            { 
                return new HandleRef(wrapper,h); 
            }
 
            /// 
            ///
            /// 
            ///  
            /// 
            public static implicit operator IntPtr(HWND h) 
            { 
                return h.h;
            } 

/*
            /// 
            /// 
            /// 
            public static HWND NULL 
            { 
                get
                { 
                    HWND hTemp = new HWND();
                    hTemp.h = IntPtr.Zero;
                    return hTemp;
                } 
            }
 
            ///  
            ///
            ///  
            public static HWND HWND_TOP
            {
                get
                { 
                    HWND hTemp = new HWND();
                    hTemp.h = new IntPtr(0); 
                    return hTemp; 
                }
            } 

            /// 
            ///
            ///  
            public static HWND HWND_BOTTOM
            { 
                get 
                {
                    HWND hTemp = new HWND(); 
                    hTemp.h = new IntPtr(1);
                    return hTemp;
                }
            } 

            ///  
            /// 
            /// 
            public static HWND HWND_TOPMOST 
            {
                get
                {
                    HWND hTemp = new HWND(); 
                    hTemp.h = new IntPtr(-1);
                    return hTemp; 
                } 
            }
 
            /// 
            ///
            /// 
            public static HWND HWND_NOTOPMOST 
            {
                get 
                { 
                    HWND hTemp = new HWND();
                    hTemp.h = new IntPtr(-2); 
                    return hTemp;
                }
            }
 
            /// 
            /// 
            ///  
            public static HWND HWND_MESSAGE
            { 
                get
                {
                    HWND hTemp = new HWND();
                    hTemp.h = new IntPtr(-3); 
                    return hTemp;
                } 
            } 
*/
            ///  
            ///
            /// 
            /// 
            ///  
            /// 
            public static bool operator ==(HWND hl, HWND hr) 
            { 
                return (hl.h == hr.h);
            } 

            /// 
            ///
            ///  
            /// 
            ///  
            ///  
            public static bool operator !=(HWND hl, HWND hr)
            { 
                return (hl.h != hr.h);
            }

            ///  
            ///
            ///  
            ///  
            /// 
            override public bool Equals(object oCompare) 
            {
                HWND hr = Cast((HWND)oCompare);
                return (h == hr.h);
            } 

            ///  
            /// 
            /// 
            ///  
            public override int GetHashCode()
            {
                return (int)h;
            } 
        }
 
        ///  
        /// HDC.
        ///  
        public struct HDC
        {
            /// 
            /// 
            /// 
            public IntPtr h; 
 
            /// 
            /// 
            /// 
            /// 
            /// 
            public static HDC Cast(IntPtr h) 
            {
                HDC hTemp = new HDC(); 
                hTemp.h = h; 
                return hTemp;
            } 

            public HandleRef MakeHandleRef( object wrapper)
            {
                return new HandleRef(wrapper, h); 
            }
 
            ///  
            ///
            ///  
            public static HDC NULL
            {
                get
                { 
                    HDC hTemp = new HDC();
                    hTemp.h = IntPtr.Zero; 
                    return hTemp; 
                }
            } 
        }

        public const int DRAGDROP_S_DROP = 0x00040100;
        public const int DRAGDROP_S_CANCEL = 0x00040101; 
        public const int DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102;
 
        public const int WM_MOUSEQUERY = 0x009B; 
        public const int TME_CANCEL = (unchecked((int)0x80000000));
        public const int IDC_HAND = 32649; 

        /// 
        /// End document printing
        ///  
        /// Printer DC
        /// More than 0 if succeeds, zero or less if fails 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")] 
        [DllImport("gdi32.dll")]//CASRemoval:
        public static extern Int32 EndDoc(HDC hdc); 

        public const int DM_ORIENTATION = 0x00000001;
        public const int DM_PAPERSIZE = 0x00000002;
        public const int DM_PAPERLENGTH = 0x00000004; 
        public const int DM_PAPERWIDTH = 0x00000008;
        public const int DM_PRINTQUALITY = 0x00000400; 
        public const int DM_YRESOLUTION = 0x00002000; 

        ///  
        /// Escape description for ExtEscape
        /// 
        [StructLayout(LayoutKind.Sequential)]
        public unsafe struct PrinterEscape 
        {
            public Int32 cbInput; 
            public UInt32 cbOutput; 
            public UInt32 opcode;
            public Int32 cbSize; 
            public void* buffer;
        }

        ///  
        /// Send Escape to DC (printer)
        ///  
        /// Printer DC 
        /// Escape code
        /// # bytes in lpvInData 
        /// Input data
        /// size of lpvOutData in bytes
        /// Structure to receive data
        /// 0 if escape not implemented, negative if error, otherwise succeeds 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")]
        [DllImport("gdi32.dll")]//CASRemoval: 
        public static unsafe extern Int32 ExtEscape(HDC hdc, Int32 nEscape, Int32 cbInput, PrinterEscape* lpvInData, Int32 cbOutput, [Out] void* lpvOutData); 

        public const int MM_ISOTROPIC = 7; 


        public const int DM_OUT_BUFFER = 2;
 

        ///  
        /// Document info for printing 
        /// 
        [StructLayout(LayoutKind.Sequential)] 
        public unsafe struct DocInfo
        {// (*)indicates must be specfied
            internal Int32 cbSize;                     // (*)size of this structure (20)
            internal String lpszName;                   // (*)Name of document 
            internal String lpszOutput;                 // Name of output file (null)
            internal String lpszDatatype;               // Type of data ("raw" or "emf") can be null 
            internal Int32 fwType;                     // Flags about print job (0) 
        }
 
        /// 
        /// Start document printing
        /// 
        /// Printer DC 
        /// Document information
        /// More than zero if succeeded 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")] 
        [DllImport("gdi32.dll")]//CASRemoval:
        public unsafe static extern Int32 StartDoc(HDC hdc, ref DocInfo docInfo); 

        /// 
        ///
        ///  
        /// 
        ///  
        ///  
        /// 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("winspool.drv")] 
        [DllImport("winspool.drv", BestFitMapping = false, ThrowOnUnmappableChar = true)]//CASRemoval:
        public unsafe static extern Int32 OpenPrinterA(String printerName, IntPtr* phPrinter, void* pDefaults);

        ///  
        ///
        ///  
        ///  
        /// 
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("winspool.drv")] 
        [DllImport("winspool.drv")]//CASRemoval:
        public static extern Int32 ClosePrinter(IntPtr hPrinter);

        ///  
        /// End document page
        ///  
        /// Printer DC 
        /// More than 0 if succeeds, zero or less if fails
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")] 
        [DllImport("gdi32.dll")]//CASRemoval:
        public static extern Int32 EndPage(HDC hdc);

        ///  
        /// Start document page
        ///  
        /// Printer DC 
        /// More than 0 if succeeds, zero or less if fails
        //CASRemoval:[System.Security.SuppressUnmanagedCodeSecurity, DllImport("gdi32.dll")] 
        [DllImport("gdi32.dll")]//CASRemoval:
        public static extern Int32 StartPage(HDC hdc);

 
        /// Win32 constants
        public const int E_HANDLE = unchecked((int)0x80070006); 
 

 
        /// wParam for WM_SETTINGCHANGE
        public const int SPI_SETFONTSMOOTHING = 0x004B;
        /// wParam for WM_SETTINGCHANGE
        public const int SPI_SETFONTSMOOTHINGTYPE = 0x200B; 
        /// wParam for WM_SETTINGCHANGE
        public const int SPI_SETFONTSMOOTHINGCONTRAST = 0x200D; 
        /// wParam for WM_SETTINGCHANGE 
        public const int SPI_SETFONTSMOOTHINGORIENTATION = 0x2013;
        /// wParam for WM_SETTINGCHANGE 
        public const int SPI_SETDISPLAYPIXELSTRUCTURE = 0x2015;
        /// wParam for WM_SETTINGCHANGE
        public const int SPI_SETDISPLAYGAMMA = 0x2017;
        /// wParam for WM_SETTINGCHANGE 
        public const int SPI_SETDISPLAYCLEARTYPELEVEL = 0x2019;
        /// wParam for WM_SETTINGCHANGE 
        public const int SPI_SETDISPLAYTEXTCONTRASTLEVEL = 0x201b; 

        public const int GMMP_USE_DISPLAY_POINTS = 1; 
        public const int GMMP_USE_HIGH_RESOLUTION_POINTS = 2;

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] // For GetMouseMovePointsEx
        public struct MOUSEMOVEPOINT { 
            public int    x ;                       //Specifies the x-coordinate of the mouse
            public int    y ;                       //Specifies the x-coordinate of the mouse 
            public int    time ;                    //Specifies the time stamp of the mouse coordinate 
            public IntPtr dwExtraInfo;              //Specifies extra information associated with this coordinate.
        } 

        public const int ERROR_FILE_NOT_FOUND               = 2;
        public const int ERROR_PATH_NOT_FOUND               = 3;
        public const int ERROR_ACCESS_DENIED                = 5; 
        public const int ERROR_INVALID_DRIVE                = 15;
        public const int ERROR_SHARING_VIOLATION            = 32; 
        public const int ERROR_FILE_EXISTS                  = 80; 
        public const int ERROR_INVALID_PARAMETER            = 87;
        public const int ERROR_FILENAME_EXCED_RANGE         = 206; 
        public const int ERROR_NO_MORE_ITEMS                = 259;
        public const int ERROR_OPERATION_ABORTED            = 995;

#endif // BASE_NATIVEMETHODS 

 
        public const int LR_DEFAULTCOLOR = 0x0000, 
                         LR_MONOCHROME = 0x0001,
                         LR_COLOR = 0x0002, 
                         LR_COPYRETURNORG = 0x0004,
                         LR_COPYDELETEORG = 0x0008,
                         LR_LOADFROMFILE = 0x0010,
                         LR_LOADTRANSPARENT = 0x0020, 
                         LR_DEFAULTSIZE = 0x0040,
                         LR_VGACOLOR = 0x0080, 
                         LR_LOADMAP3DCOLORS = 0x1000, 
                         LR_CREATEDIBSECTION = 0x2000,
                         LR_COPYFROMRESOURCE = 0x4000, 
                         LR_SHARED = unchecked((int)0x8000);

        internal enum Win32SystemColors
        { 
            ActiveBorder = 0x0A,
            ActiveCaption = 0x02, 
            ActiveCaptionText = 0x09, 
            AppWorkspace = 0x0C,
            Control = 0x0F, 
            ControlDark = 0x10,
            ControlDarkDark = 0x15,
            ControlLight = 0x16,
            ControlLightLight = 0x14, 
            ControlText = 0x12,
            Desktop = 0x01, 
            GradientActiveCaption = 0x1B, 
            GradientInactiveCaption = 0x1C,
            GrayText = 0x11, 
            Highlight = 0x0D,
            HighlightText = 0x0E,
            HotTrack = 0x1A,
            InactiveBorder = 0x0B, 
            InactiveCaption = 0x03,
            InactiveCaptionText = 0x13, 
            Info = 0x18, 
            InfoText = 0x17,
            Menu = 0x04, 
            MenuBar = 0x1E,
            MenuHighlight = 0x1D,
            MenuText = 0x07,
            ScrollBar = 0x00, 
            Window = 0x05,
            WindowFrame = 0x06, 
            WindowText = 0x08 
        }
 
#if WINDOWS_BASE
        // Copied from winineti.h

        // Note: CachePath should be an array of size 260. 
        [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
        internal struct InternetCacheConfigInfo 
        { 
            internal UInt32 dwStructSize;
            internal UInt32 dwContainer; 
            internal UInt32 dwQuota;
            internal UInt32 dwReserved4;
            [MarshalAs(UnmanagedType.Bool)] internal bool fPerUser;
            internal UInt32 dwSyncMode; 
            internal UInt32 dwNumCachePaths;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] internal string CachePath; 
            internal UInt32 dwCacheSize; 
            internal UInt32 dwNormalUsage;
            internal UInt32 dwExemptUsage; 
        }
#endif

        public const int WM_WTSSESSION_CHANGE = 0x02b1; 

        public const int WTS_CONSOLE_CONNECT    = 0x1; 
        public const int WTS_CONSOLE_DISCONNECT = 0x2; 
        public const int WTS_REMOTE_CONNECT     = 0x3;
        public const int WTS_REMOTE_DISCONNECT  = 0x4; 
        public const int WTS_SESSION_LOCK       = 0x7;
        public const int WTS_SESSION_UNLOCK     = 0x8;

        public const uint NOTIFY_FOR_THIS_SESSION = 0; 

        public const int PBT_APMSUSPEND         = 0x0004; 
        public const int PBT_APMRESUMECRITICAL  = 0x0006; 
        public const int PBT_APMRESUMESUSPEND   = 0x0007;
        public const int PBT_APMRESUMEAUTOMATIC = 0x0012; 

        public const uint PROFILE_READ = 1;
    }
} 


// 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