Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Shared / MS / Win32 / SafeNativeMethodsCLR.cs / 1 / SafeNativeMethodsCLR.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace MS.Win32
{
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System;
using System.Security;
using System.Security.Permissions;
using System.Collections;
using System.IO;
using System.Text;
using System.ComponentModel;
// The SecurityHelper class differs between assemblies and could not actually be
// shared, so it is duplicated across namespaces to prevent name collision.
#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 a class (duplicated across multiple namespaces) from an unknown assembly.
#endif
using IComDataObject = System.Runtime.InteropServices.ComTypes.IDataObject;
///
/// Critical - This entire class is critical as it has SuppressUnmanagedCodeSecurity.
/// TreatAsSafe - These Native methods have been reviewed as safe to call.
///
internal static partial class SafeNativeMethods
{
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
public static int GetMessagePos()
{
return SafeNativeMethodsPrivate.GetMessagePos();
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr GetKeyboardLayout(int dwLayout)
{
return SafeNativeMethodsPrivate.GetKeyboardLayout(dwLayout);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr ActivateKeyboardLayout(HandleRef hkl, int uFlags)
{
return SafeNativeMethodsPrivate.ActivateKeyboardLayout(hkl, uFlags);
}
#if BASE_NATIVEMETHODS
///
/// Critical - access unmanaged code via SetLastError() and IntGetKeyboardLayoutList().
/// TreatAsSafe - no returns from SetLastError(). Calling IntGetKeyboardLayoutList() is safe.
///
[SecurityCritical,SecurityTreatAsSafe]
public static int GetKeyboardLayoutList(int size, [Out, MarshalAs(UnmanagedType.LPArray)] IntPtr[] hkls)
{
UnsafeNativeMethods.SetLastError(0);
int result = SafeNativeMethodsPrivate.GetKeyboardLayoutList(size, hkls);
if(result == 0)
{
int win32Err = Marshal.GetLastWin32Error();
if (win32Err != 0)
{
throw new Win32Exception(win32Err);
}
}
return result;
}
#endif
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
internal static void GetMonitorInfo(HandleRef hmonitor, [In, Out]NativeMethods.MONITORINFOEX info)
{
if (SafeNativeMethodsPrivate.IntGetMonitorInfo(hmonitor, info) == false)
{
throw new Win32Exception();
}
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr MonitorFromPoint(NativeMethods.POINTSTRUCT pt, int flags)
{
return SafeNativeMethodsPrivate.MonitorFromPoint(pt,flags);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr MonitorFromRect(ref NativeMethods.RECT rect, int flags)
{
return SafeNativeMethodsPrivate.MonitorFromRect(ref rect,flags);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr MonitorFromWindow(HandleRef handle, int flags)
{
return SafeNativeMethodsPrivate.MonitorFromWindow(handle, flags);
}
#if BASE_NATIVEMETHODS
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static NativeMethods.CursorHandle LoadCursor(HandleRef hInst, IntPtr iconId)
{
NativeMethods.CursorHandle cursorHandle = SafeNativeMethodsPrivate.LoadCursor(hInst, iconId);
if(cursorHandle == null || cursorHandle.IsInvalid)
{
throw new Win32Exception();
}
return cursorHandle;
}
#endif
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr GetCursor()
{
return SafeNativeMethodsPrivate.GetCursor();
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Hiding cursor is ok
///
[SecurityCritical, SecurityTreatAsSafe]
public static int ShowCursor(bool show)
{
return SafeNativeMethodsPrivate.ShowCursor(show);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
internal static bool AdjustWindowRectEx(ref NativeMethods.RECT lpRect, int dwStyle, bool bMenu, int dwExStyle)
{
bool returnValue = SafeNativeMethodsPrivate.IntAdjustWindowRectEx(ref lpRect, dwStyle, bMenu, dwExStyle);
if (returnValue == false)
{
throw new Win32Exception();
}
return returnValue;
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
internal static void GetClientRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect)
{
if(!SafeNativeMethodsPrivate.IntGetClientRect(hWnd, ref rect))
{
throw new Win32Exception();
}
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
internal static void GetWindowRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect)
{
if(!SafeNativeMethodsPrivate.IntGetWindowRect(hWnd, ref rect))
{
throw new Win32Exception();
}
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static int GetDoubleClickTime()
{
return SafeNativeMethodsPrivate.GetDoubleClickTime();
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical, SecurityTreatAsSafe]
public static bool IsWindowEnabled(HandleRef hWnd)
{
return SafeNativeMethodsPrivate.IsWindowEnabled(hWnd);
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical, SecurityTreatAsSafe]
public static bool IsWindowVisible(HandleRef hWnd)
{
return SafeNativeMethodsPrivate.IsWindowVisible(hWnd);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
internal static bool ReleaseCapture()
{
bool returnValue = SafeNativeMethodsPrivate.IntReleaseCapture();
if (returnValue == false)
{
throw new Win32Exception();
}
return returnValue;
}
#if BASE_NATIVEMETHODS
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static bool TrackMouseEvent(NativeMethods.TRACKMOUSEEVENT tme)
{
bool retVal = SafeNativeMethodsPrivate.TrackMouseEvent(tme);
int win32Err = Marshal.GetLastWin32Error(); // Dance around FxCop
if(!retVal && win32Err != 0)
{
throw new System.ComponentModel.Win32Exception(win32Err);
}
return retVal;
}
// Note: this overload has no return value. If we need an overload that
// returns the timer ID, then we'll need to add one.
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static void SetTimer(HandleRef hWnd, int nIDEvent, int uElapse)
{
if(SafeNativeMethodsPrivate.SetTimer(hWnd, nIDEvent, uElapse, null) == IntPtr.Zero)
{
throw new Win32Exception();
}
}
// Note: this returns true or false for success. We still don't have an overload
// that returns the timer ID.
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static bool TrySetTimer(HandleRef hWnd, int nIDEvent, int uElapse)
{
if(SafeNativeMethodsPrivate.TrySetTimer(hWnd, nIDEvent, uElapse, null) == IntPtr.Zero)
{
return false;
}
return true;
}
#endif
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call as in the worst case it destroys the dispatcher timer.
/// it destroys a timer
///
[SecurityCritical,SecurityTreatAsSafe]
public static bool KillTimer(HandleRef hwnd, int idEvent)
{
return (SafeNativeMethodsPrivate.KillTimer(hwnd,idEvent));
}
#if FRAMEWORK_NATIVEMETHODS || CORE_NATIVEMETHODS || BASE_NATIVEMETHODS
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static int GetTickCount()
{
return SafeNativeMethodsPrivate.GetTickCount();
}
#endif
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static bool IsWindowUnicode(HandleRef hWnd)
{
return (SafeNativeMethodsPrivate.IsWindowUnicode(hWnd));
}
#if BASE_NATIVEMETHODS
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Setting Cursor is ok
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr SetCursor(HandleRef hcursor)
{
return SafeNativeMethodsPrivate.SetCursor(hcursor);
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Setting Cursor is ok
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr SetCursor(SafeHandle hcursor)
{
return SafeNativeMethodsPrivate.SetCursor(hcursor);
}
#endif
// not used by compiler - don't include.
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Screen to Clien is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
public static void ScreenToClient(HandleRef hWnd, [In, Out] NativeMethods.POINT pt)
{
if(SafeNativeMethodsPrivate.IntScreenToClient(hWnd, pt) == 0)
{
throw new Win32Exception();
}
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Process Id is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
public static int GetCurrentProcessId()
{
return SafeNativeMethodsPrivate.GetCurrentProcessId();
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Thread ID is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
public static int GetCurrentThreadId()
{
return SafeNativeMethodsPrivate.GetCurrentThreadId();
}
///
/// This will return a valid handle only if a window on the current thread has capture
/// else it will return NULL. (Refer to Platform SDK)
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Getting mouse capture is ok
///
[SecurityCritical, SecurityTreatAsSafe]
public static IntPtr GetCapture()
{
return SafeNativeMethodsPrivate.GetCapture();
}
#if BASE_NATIVEMETHODS
///
/// This function cannot be used to capture mouse input for another process.
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Setting Capture is ok
///
[SecurityCritical, SecurityTreatAsSafe]
public static IntPtr SetCapture(HandleRef hwnd)
{
return SafeNativeMethodsPrivate.SetCapture(hwnd);
}
///
/// This can be guessed anyways and does not relay any risky information
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Getting virtual key mapping is ok
///
[SecurityCritical, SecurityTreatAsSafe]
internal static int MapVirtualKey(int nVirtKey, int nMapType)
{
return SafeNativeMethodsPrivate.MapVirtualKey(nVirtKey,nMapType);
}
#endif
[SuppressUnmanagedCodeSecurity,SecurityCritical(SecurityCriticalScope.Everything)]
private partial class SafeNativeMethodsPrivate
{
[DllImport(ExternDll.Kernel32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetCurrentProcessId();
[DllImport(ExternDll.Kernel32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetCurrentThreadId();
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern IntPtr GetCapture();
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool IsWindowVisible(HandleRef hWnd);
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetMessagePos();
[DllImport(ExternDll.User32, EntryPoint = "ReleaseCapture", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public static extern bool IntReleaseCapture();
[DllImport(ExternDll.User32, EntryPoint = "GetWindowRect", ExactSpelling = true, CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool IntGetWindowRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect);
[DllImport(ExternDll.User32, EntryPoint = "GetClientRect", ExactSpelling = true, CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool IntGetClientRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect);
[DllImport(ExternDll.User32, EntryPoint = "AdjustWindowRectEx", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public static extern bool IntAdjustWindowRectEx(ref NativeMethods.RECT lpRect, int dwStyle, bool bMenu, int dwExStyle);
[DllImport(ExternDll.User32, ExactSpelling=true)]
public static extern IntPtr MonitorFromRect(ref NativeMethods.RECT rect, int flags);
[DllImport(ExternDll.User32, ExactSpelling = true)]
public static extern IntPtr MonitorFromPoint(NativeMethods.POINTSTRUCT pt, int flags);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern IntPtr ActivateKeyboardLayout(HandleRef hkl, int uFlags);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern IntPtr GetKeyboardLayout(int dwLayout);
[DllImport(ExternDll.User32, SetLastError = true, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr SetTimer(HandleRef hWnd, int nIDEvent, int uElapse, NativeMethods.TimerProc lpTimerFunc);
[DllImport(ExternDll.User32, EntryPoint="SetTimer", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr TrySetTimer(HandleRef hWnd, int nIDEvent, int uElapse, NativeMethods.TimerProc lpTimerFunc);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool KillTimer(HandleRef hwnd, int idEvent);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool IsWindowUnicode(HandleRef hWnd);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int GetDoubleClickTime();
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool IsWindowEnabled(HandleRef hWnd);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr GetCursor();
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int ShowCursor(bool show);
[DllImport(ExternDll.User32, EntryPoint = "GetMonitorInfo", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool IntGetMonitorInfo(HandleRef hmonitor, [In, Out]NativeMethods.MONITORINFOEX info);
[DllImport(ExternDll.User32, ExactSpelling=true)]
public static extern IntPtr MonitorFromWindow(HandleRef handle, int flags);
#if BASE_NATIVEMETHODS
[DllImport(ExternDll.User32, CharSet = CharSet.Auto)]
internal static extern int MapVirtualKey(int nVirtKey, int nMapType);
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern IntPtr SetCapture(HandleRef hwnd);
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern IntPtr SetCursor(HandleRef hcursor);
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern IntPtr SetCursor(SafeHandle hcursor);
[DllImport(ExternDll.User32, SetLastError = true, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int GetKeyboardLayoutList(int size, [Out, MarshalAs(UnmanagedType.LPArray)] IntPtr[] hkls);
[DllImport(ExternDll.User32, ExactSpelling=true, SetLastError=true)]
public static extern bool TrackMouseEvent(NativeMethods.TRACKMOUSEEVENT tme);
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public static extern NativeMethods.CursorHandle LoadCursor(HandleRef hInst, IntPtr iconId);
#endif
#if BASE_NATIVEMETHODS || CORE_NATIVEMETHODS || FRAMEWORK_NATIVEMETHODS
[DllImport(ExternDll.Kernel32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetTickCount();
#endif
[DllImport(ExternDll.User32, EntryPoint="ScreenToClient", SetLastError=true, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int IntScreenToClient(HandleRef hWnd, [In, Out] NativeMethods.POINT pt);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace MS.Win32
{
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System;
using System.Security;
using System.Security.Permissions;
using System.Collections;
using System.IO;
using System.Text;
using System.ComponentModel;
// The SecurityHelper class differs between assemblies and could not actually be
// shared, so it is duplicated across namespaces to prevent name collision.
#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 a class (duplicated across multiple namespaces) from an unknown assembly.
#endif
using IComDataObject = System.Runtime.InteropServices.ComTypes.IDataObject;
///
/// Critical - This entire class is critical as it has SuppressUnmanagedCodeSecurity.
/// TreatAsSafe - These Native methods have been reviewed as safe to call.
///
internal static partial class SafeNativeMethods
{
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
public static int GetMessagePos()
{
return SafeNativeMethodsPrivate.GetMessagePos();
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr GetKeyboardLayout(int dwLayout)
{
return SafeNativeMethodsPrivate.GetKeyboardLayout(dwLayout);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr ActivateKeyboardLayout(HandleRef hkl, int uFlags)
{
return SafeNativeMethodsPrivate.ActivateKeyboardLayout(hkl, uFlags);
}
#if BASE_NATIVEMETHODS
///
/// Critical - access unmanaged code via SetLastError() and IntGetKeyboardLayoutList().
/// TreatAsSafe - no returns from SetLastError(). Calling IntGetKeyboardLayoutList() is safe.
///
[SecurityCritical,SecurityTreatAsSafe]
public static int GetKeyboardLayoutList(int size, [Out, MarshalAs(UnmanagedType.LPArray)] IntPtr[] hkls)
{
UnsafeNativeMethods.SetLastError(0);
int result = SafeNativeMethodsPrivate.GetKeyboardLayoutList(size, hkls);
if(result == 0)
{
int win32Err = Marshal.GetLastWin32Error();
if (win32Err != 0)
{
throw new Win32Exception(win32Err);
}
}
return result;
}
#endif
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
internal static void GetMonitorInfo(HandleRef hmonitor, [In, Out]NativeMethods.MONITORINFOEX info)
{
if (SafeNativeMethodsPrivate.IntGetMonitorInfo(hmonitor, info) == false)
{
throw new Win32Exception();
}
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr MonitorFromPoint(NativeMethods.POINTSTRUCT pt, int flags)
{
return SafeNativeMethodsPrivate.MonitorFromPoint(pt,flags);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr MonitorFromRect(ref NativeMethods.RECT rect, int flags)
{
return SafeNativeMethodsPrivate.MonitorFromRect(ref rect,flags);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr MonitorFromWindow(HandleRef handle, int flags)
{
return SafeNativeMethodsPrivate.MonitorFromWindow(handle, flags);
}
#if BASE_NATIVEMETHODS
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static NativeMethods.CursorHandle LoadCursor(HandleRef hInst, IntPtr iconId)
{
NativeMethods.CursorHandle cursorHandle = SafeNativeMethodsPrivate.LoadCursor(hInst, iconId);
if(cursorHandle == null || cursorHandle.IsInvalid)
{
throw new Win32Exception();
}
return cursorHandle;
}
#endif
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr GetCursor()
{
return SafeNativeMethodsPrivate.GetCursor();
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Hiding cursor is ok
///
[SecurityCritical, SecurityTreatAsSafe]
public static int ShowCursor(bool show)
{
return SafeNativeMethodsPrivate.ShowCursor(show);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
internal static bool AdjustWindowRectEx(ref NativeMethods.RECT lpRect, int dwStyle, bool bMenu, int dwExStyle)
{
bool returnValue = SafeNativeMethodsPrivate.IntAdjustWindowRectEx(ref lpRect, dwStyle, bMenu, dwExStyle);
if (returnValue == false)
{
throw new Win32Exception();
}
return returnValue;
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
internal static void GetClientRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect)
{
if(!SafeNativeMethodsPrivate.IntGetClientRect(hWnd, ref rect))
{
throw new Win32Exception();
}
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
internal static void GetWindowRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect)
{
if(!SafeNativeMethodsPrivate.IntGetWindowRect(hWnd, ref rect))
{
throw new Win32Exception();
}
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static int GetDoubleClickTime()
{
return SafeNativeMethodsPrivate.GetDoubleClickTime();
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical, SecurityTreatAsSafe]
public static bool IsWindowEnabled(HandleRef hWnd)
{
return SafeNativeMethodsPrivate.IsWindowEnabled(hWnd);
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical, SecurityTreatAsSafe]
public static bool IsWindowVisible(HandleRef hWnd)
{
return SafeNativeMethodsPrivate.IsWindowVisible(hWnd);
}
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
internal static bool ReleaseCapture()
{
bool returnValue = SafeNativeMethodsPrivate.IntReleaseCapture();
if (returnValue == false)
{
throw new Win32Exception();
}
return returnValue;
}
#if BASE_NATIVEMETHODS
///
/// Critical: This code calls into unmanaged code which elevates
/// TreatAsSafe: This method is ok to give out
///
[SecurityCritical,SecurityTreatAsSafe]
public static bool TrackMouseEvent(NativeMethods.TRACKMOUSEEVENT tme)
{
bool retVal = SafeNativeMethodsPrivate.TrackMouseEvent(tme);
int win32Err = Marshal.GetLastWin32Error(); // Dance around FxCop
if(!retVal && win32Err != 0)
{
throw new System.ComponentModel.Win32Exception(win32Err);
}
return retVal;
}
// Note: this overload has no return value. If we need an overload that
// returns the timer ID, then we'll need to add one.
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static void SetTimer(HandleRef hWnd, int nIDEvent, int uElapse)
{
if(SafeNativeMethodsPrivate.SetTimer(hWnd, nIDEvent, uElapse, null) == IntPtr.Zero)
{
throw new Win32Exception();
}
}
// Note: this returns true or false for success. We still don't have an overload
// that returns the timer ID.
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static bool TrySetTimer(HandleRef hWnd, int nIDEvent, int uElapse)
{
if(SafeNativeMethodsPrivate.TrySetTimer(hWnd, nIDEvent, uElapse, null) == IntPtr.Zero)
{
return false;
}
return true;
}
#endif
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call as in the worst case it destroys the dispatcher timer.
/// it destroys a timer
///
[SecurityCritical,SecurityTreatAsSafe]
public static bool KillTimer(HandleRef hwnd, int idEvent)
{
return (SafeNativeMethodsPrivate.KillTimer(hwnd,idEvent));
}
#if FRAMEWORK_NATIVEMETHODS || CORE_NATIVEMETHODS || BASE_NATIVEMETHODS
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static int GetTickCount()
{
return SafeNativeMethodsPrivate.GetTickCount();
}
#endif
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsafe: This function is safe to call
///
[SecurityCritical,SecurityTreatAsSafe]
public static bool IsWindowUnicode(HandleRef hWnd)
{
return (SafeNativeMethodsPrivate.IsWindowUnicode(hWnd));
}
#if BASE_NATIVEMETHODS
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Setting Cursor is ok
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr SetCursor(HandleRef hcursor)
{
return SafeNativeMethodsPrivate.SetCursor(hcursor);
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Setting Cursor is ok
///
[SecurityCritical,SecurityTreatAsSafe]
public static IntPtr SetCursor(SafeHandle hcursor)
{
return SafeNativeMethodsPrivate.SetCursor(hcursor);
}
#endif
// not used by compiler - don't include.
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Screen to Clien is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
public static void ScreenToClient(HandleRef hWnd, [In, Out] NativeMethods.POINT pt)
{
if(SafeNativeMethodsPrivate.IntScreenToClient(hWnd, pt) == 0)
{
throw new Win32Exception();
}
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Process Id is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
public static int GetCurrentProcessId()
{
return SafeNativeMethodsPrivate.GetCurrentProcessId();
}
///
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Thread ID is ok to give out
///
[SecurityCritical, SecurityTreatAsSafe]
public static int GetCurrentThreadId()
{
return SafeNativeMethodsPrivate.GetCurrentThreadId();
}
///
/// This will return a valid handle only if a window on the current thread has capture
/// else it will return NULL. (Refer to Platform SDK)
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Getting mouse capture is ok
///
[SecurityCritical, SecurityTreatAsSafe]
public static IntPtr GetCapture()
{
return SafeNativeMethodsPrivate.GetCapture();
}
#if BASE_NATIVEMETHODS
///
/// This function cannot be used to capture mouse input for another process.
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Setting Capture is ok
///
[SecurityCritical, SecurityTreatAsSafe]
public static IntPtr SetCapture(HandleRef hwnd)
{
return SafeNativeMethodsPrivate.SetCapture(hwnd);
}
///
/// This can be guessed anyways and does not relay any risky information
/// Critical: This code elevates to unmanaged code permission
/// TreatAsSafe: Getting virtual key mapping is ok
///
[SecurityCritical, SecurityTreatAsSafe]
internal static int MapVirtualKey(int nVirtKey, int nMapType)
{
return SafeNativeMethodsPrivate.MapVirtualKey(nVirtKey,nMapType);
}
#endif
[SuppressUnmanagedCodeSecurity,SecurityCritical(SecurityCriticalScope.Everything)]
private partial class SafeNativeMethodsPrivate
{
[DllImport(ExternDll.Kernel32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetCurrentProcessId();
[DllImport(ExternDll.Kernel32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetCurrentThreadId();
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern IntPtr GetCapture();
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool IsWindowVisible(HandleRef hWnd);
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetMessagePos();
[DllImport(ExternDll.User32, EntryPoint = "ReleaseCapture", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public static extern bool IntReleaseCapture();
[DllImport(ExternDll.User32, EntryPoint = "GetWindowRect", ExactSpelling = true, CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool IntGetWindowRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect);
[DllImport(ExternDll.User32, EntryPoint = "GetClientRect", ExactSpelling = true, CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool IntGetClientRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect);
[DllImport(ExternDll.User32, EntryPoint = "AdjustWindowRectEx", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public static extern bool IntAdjustWindowRectEx(ref NativeMethods.RECT lpRect, int dwStyle, bool bMenu, int dwExStyle);
[DllImport(ExternDll.User32, ExactSpelling=true)]
public static extern IntPtr MonitorFromRect(ref NativeMethods.RECT rect, int flags);
[DllImport(ExternDll.User32, ExactSpelling = true)]
public static extern IntPtr MonitorFromPoint(NativeMethods.POINTSTRUCT pt, int flags);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern IntPtr ActivateKeyboardLayout(HandleRef hkl, int uFlags);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern IntPtr GetKeyboardLayout(int dwLayout);
[DllImport(ExternDll.User32, SetLastError = true, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr SetTimer(HandleRef hWnd, int nIDEvent, int uElapse, NativeMethods.TimerProc lpTimerFunc);
[DllImport(ExternDll.User32, EntryPoint="SetTimer", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr TrySetTimer(HandleRef hWnd, int nIDEvent, int uElapse, NativeMethods.TimerProc lpTimerFunc);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool KillTimer(HandleRef hwnd, int idEvent);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool IsWindowUnicode(HandleRef hWnd);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int GetDoubleClickTime();
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool IsWindowEnabled(HandleRef hWnd);
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr GetCursor();
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int ShowCursor(bool show);
[DllImport(ExternDll.User32, EntryPoint = "GetMonitorInfo", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool IntGetMonitorInfo(HandleRef hmonitor, [In, Out]NativeMethods.MONITORINFOEX info);
[DllImport(ExternDll.User32, ExactSpelling=true)]
public static extern IntPtr MonitorFromWindow(HandleRef handle, int flags);
#if BASE_NATIVEMETHODS
[DllImport(ExternDll.User32, CharSet = CharSet.Auto)]
internal static extern int MapVirtualKey(int nVirtKey, int nMapType);
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern IntPtr SetCapture(HandleRef hwnd);
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern IntPtr SetCursor(HandleRef hcursor);
[DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern IntPtr SetCursor(SafeHandle hcursor);
[DllImport(ExternDll.User32, SetLastError = true, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int GetKeyboardLayoutList(int size, [Out, MarshalAs(UnmanagedType.LPArray)] IntPtr[] hkls);
[DllImport(ExternDll.User32, ExactSpelling=true, SetLastError=true)]
public static extern bool TrackMouseEvent(NativeMethods.TRACKMOUSEEVENT tme);
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public static extern NativeMethods.CursorHandle LoadCursor(HandleRef hInst, IntPtr iconId);
#endif
#if BASE_NATIVEMETHODS || CORE_NATIVEMETHODS || FRAMEWORK_NATIVEMETHODS
[DllImport(ExternDll.Kernel32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetTickCount();
#endif
[DllImport(ExternDll.User32, EntryPoint="ScreenToClient", SetLastError=true, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int IntScreenToClient(HandleRef hWnd, [In, Out] NativeMethods.POINT pt);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ImageClickEventArgs.cs
- XmlSchemaParticle.cs
- RNGCryptoServiceProvider.cs
- NativeMethods.cs
- XmlAttributeAttribute.cs
- PieceDirectory.cs
- ProbeDuplex11AsyncResult.cs
- RemoteWebConfigurationHostServer.cs
- VisualBrush.cs
- FixedSOMPage.cs
- NavigationHelper.cs
- Properties.cs
- DataSourceView.cs
- BitmapEffectDrawingContent.cs
- OutputWindow.cs
- PartBasedPackageProperties.cs
- MetafileHeaderWmf.cs
- control.ime.cs
- OptimizedTemplateContent.cs
- XmlDataSource.cs
- MultiView.cs
- DataGridTextBoxColumn.cs
- SrgsGrammar.cs
- ProgressBarBrushConverter.cs
- RemotingSurrogateSelector.cs
- FixedBufferAttribute.cs
- HtmlTextViewAdapter.cs
- SerializationObjectManager.cs
- ConfigurationLocationCollection.cs
- SystemIPInterfaceStatistics.cs
- SerializationSectionGroup.cs
- ServiceModelConfigurationElementCollection.cs
- HttpStaticObjectsCollectionWrapper.cs
- RawKeyboardInputReport.cs
- NameValueFileSectionHandler.cs
- SchemaContext.cs
- StyleSelector.cs
- OrderByQueryOptionExpression.cs
- DataObjectMethodAttribute.cs
- TextTrailingWordEllipsis.cs
- TemplateControlCodeDomTreeGenerator.cs
- SurrogateEncoder.cs
- EdmFunction.cs
- ZipArchive.cs
- File.cs
- CrossSiteScriptingValidation.cs
- XPathQilFactory.cs
- CqlWriter.cs
- SmtpFailedRecipientsException.cs
- Math.cs
- WrapPanel.cs
- MissingMemberException.cs
- SessionStateItemCollection.cs
- HttpDictionary.cs
- SuppressMessageAttribute.cs
- DataGridViewButtonCell.cs
- PathStreamGeometryContext.cs
- EventListenerClientSide.cs
- UTF32Encoding.cs
- initElementDictionary.cs
- mediaeventargs.cs
- DetailsViewPageEventArgs.cs
- ZoneIdentityPermission.cs
- CodeNamespaceImport.cs
- ReferencedCollectionType.cs
- WeakReadOnlyCollection.cs
- TextPatternIdentifiers.cs
- PackagingUtilities.cs
- TimeManager.cs
- UdpReplyToBehavior.cs
- XmlTextReader.cs
- DesignBinding.cs
- SecurityElementBase.cs
- DebuggerAttributes.cs
- CreateParams.cs
- MonthCalendar.cs
- InternalResources.cs
- SharedPersonalizationStateInfo.cs
- PersonalizationStateInfo.cs
- ByteAnimation.cs
- Deserializer.cs
- XmlLanguage.cs
- DataServiceRequestArgs.cs
- Converter.cs
- UrlPath.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- MultiplexingDispatchMessageFormatter.cs
- GridViewUpdatedEventArgs.cs
- WindowsSolidBrush.cs
- CallbackValidator.cs
- WindowsSspiNegotiation.cs
- DesignerCommandAdapter.cs
- TypedTableBaseExtensions.cs
- UnlockInstanceAsyncResult.cs
- VisualTarget.cs
- DigestTraceRecordHelper.cs
- MachineKeySection.cs
- ComEventsInfo.cs
- ScriptComponentDescriptor.cs
- OleStrCAMarshaler.cs