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
- CodeParameterDeclarationExpression.cs
- WebPartManagerInternals.cs
- DataGridViewCellFormattingEventArgs.cs
- StringAttributeCollection.cs
- EncryptedKeyIdentifierClause.cs
- SizeAnimation.cs
- TypeDependencyAttribute.cs
- FixedSOMPageConstructor.cs
- EndpointInfoCollection.cs
- ListViewDeleteEventArgs.cs
- coordinator.cs
- UnconditionalPolicy.cs
- MapPathBasedVirtualPathProvider.cs
- FixedDSBuilder.cs
- SoapClientMessage.cs
- Canvas.cs
- DataTrigger.cs
- ButtonFieldBase.cs
- BitmapEffect.cs
- VersionConverter.cs
- ToolBarButton.cs
- WmlLinkAdapter.cs
- MatrixKeyFrameCollection.cs
- TextViewDesigner.cs
- ParallelForEach.cs
- TreeViewEvent.cs
- XamlSerializerUtil.cs
- Baml2006ReaderContext.cs
- HttpInputStream.cs
- TaskFormBase.cs
- SqlBuilder.cs
- FormViewPagerRow.cs
- CommentGlyph.cs
- SqlFunctions.cs
- RemoteWebConfigurationHostStream.cs
- BinaryParser.cs
- StoreContentChangedEventArgs.cs
- SystemDropShadowChrome.cs
- followingsibling.cs
- CategoryGridEntry.cs
- DataRowView.cs
- RuleSetBrowserDialog.cs
- XmlSignatureManifest.cs
- WorkflowInstanceExtensionProvider.cs
- MemberMaps.cs
- Partitioner.cs
- ConnectionsZone.cs
- CommentEmitter.cs
- AssemblyAssociatedContentFileAttribute.cs
- HandlerElementCollection.cs
- XmlSchemaGroup.cs
- ColorMap.cs
- RuleProcessor.cs
- ResourceExpression.cs
- SharedPersonalizationStateInfo.cs
- TaskFormBase.cs
- AVElementHelper.cs
- GroupBox.cs
- ReachDocumentPageSerializerAsync.cs
- XmlSignificantWhitespace.cs
- BaseValidator.cs
- HwndKeyboardInputProvider.cs
- FieldAccessException.cs
- StateDesigner.Helpers.cs
- ListBoxItem.cs
- ColorConvertedBitmap.cs
- BackEase.cs
- GenericQueueSurrogate.cs
- IDQuery.cs
- NumericUpDownAccelerationCollection.cs
- InvalidDataException.cs
- HtmlGenericControl.cs
- XPathDocumentIterator.cs
- WorkflowMessageEventArgs.cs
- PermissionSetEnumerator.cs
- CodeStatement.cs
- MDIControlStrip.cs
- ColumnTypeConverter.cs
- Compensate.cs
- RichTextBox.cs
- AdornedElementPlaceholder.cs
- SamlConditions.cs
- PropertyMetadata.cs
- Substitution.cs
- TemplatePartAttribute.cs
- CodeParameterDeclarationExpression.cs
- Thread.cs
- ExtendedPropertyDescriptor.cs
- Peer.cs
- Odbc32.cs
- EmptyArray.cs
- AssociationSet.cs
- DesignerAttribute.cs
- KerberosReceiverSecurityToken.cs
- AssociationSetEnd.cs
- TraceHandler.cs
- _AuthenticationState.cs
- ConsoleKeyInfo.cs
- TransformConverter.cs
- CustomTypeDescriptor.cs