e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
1767 lines
86 KiB
C#
1767 lines
86 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="NativeMethods.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace Microsoft.Win32 {
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
#if !SILVERLIGHT
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Globalization;
|
|
using System.Runtime.Remoting;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.ConstrainedExecution;
|
|
using System.Runtime.Versioning;
|
|
using System.Diagnostics;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.ComponentModel;
|
|
using System.Security.Permissions;
|
|
using Microsoft.Win32.SafeHandles;
|
|
|
|
// not public!
|
|
[HostProtection(MayLeakOnAbort = true)]
|
|
#endif
|
|
|
|
internal static class NativeMethods {
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
|
internal class TEXTMETRIC {
|
|
public int tmHeight = 0;
|
|
public int tmAscent = 0;
|
|
public int tmDescent = 0;
|
|
public int tmInternalLeading = 0;
|
|
public int tmExternalLeading = 0;
|
|
public int tmAveCharWidth = 0;
|
|
public int tmMaxCharWidth = 0;
|
|
public int tmWeight = 0;
|
|
public int tmOverhang = 0;
|
|
public int tmDigitizedAspectX = 0;
|
|
public int tmDigitizedAspectY = 0;
|
|
public char tmFirstChar = '\0';
|
|
public char tmLastChar = '\0';
|
|
public char tmDefaultChar = '\0';
|
|
public char tmBreakChar = '\0';
|
|
public byte tmItalic = 0;
|
|
public byte tmUnderlined = 0;
|
|
public byte tmStruckOut = 0;
|
|
public byte tmPitchAndFamily = 0;
|
|
public byte tmCharSet = 0;
|
|
}
|
|
|
|
public const int DEFAULT_GUI_FONT = 17;
|
|
public const int SM_CYSCREEN = 1;
|
|
|
|
#if !SILVERLIGHT
|
|
public readonly static HandleRef NullHandleRef = new HandleRef(null, IntPtr.Zero);
|
|
|
|
public static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
|
|
|
|
public const int GENERIC_READ = unchecked(((int)0x80000000));
|
|
public const int GENERIC_WRITE = (0x40000000);
|
|
|
|
public const int FILE_SHARE_READ = 0x00000001;
|
|
public const int FILE_SHARE_WRITE = 0x00000002;
|
|
public const int FILE_SHARE_DELETE = 0x00000004;
|
|
|
|
public const int S_OK = 0x0;
|
|
public const int E_ABORT = unchecked ((int)0x80004004);
|
|
public const int E_NOTIMPL = unchecked((int)0x80004001);
|
|
|
|
public const int CREATE_ALWAYS = 2;
|
|
|
|
public const int FILE_ATTRIBUTE_NORMAL = 0x00000080;
|
|
|
|
public const int STARTF_USESTDHANDLES = 0x00000100;
|
|
|
|
public const int STD_INPUT_HANDLE = -10;
|
|
public const int STD_OUTPUT_HANDLE = -11;
|
|
public const int STD_ERROR_HANDLE = -12;
|
|
|
|
public const int STILL_ACTIVE = 0x00000103;
|
|
public const int SW_HIDE = 0;
|
|
|
|
public const int WAIT_OBJECT_0 = 0x00000000;
|
|
public const int WAIT_FAILED = unchecked((int)0xFFFFFFFF);
|
|
public const int WAIT_TIMEOUT = 0x00000102;
|
|
public const int WAIT_ABANDONED = 0x00000080;
|
|
public const int WAIT_ABANDONED_0 = WAIT_ABANDONED;
|
|
|
|
// MoveFile Parameter
|
|
public const int MOVEFILE_REPLACE_EXISTING = 0x00000001;
|
|
|
|
// copied from winerror.h
|
|
public const int ERROR_CLASS_ALREADY_EXISTS = 1410;
|
|
public const int ERROR_NONE_MAPPED = 1332;
|
|
public const int ERROR_INSUFFICIENT_BUFFER = 122;
|
|
#endif // !SILVERLIGHT
|
|
public const int ERROR_INVALID_NAME = 0x7B; //123
|
|
#if !SILVERLIGHT
|
|
public const int ERROR_PROC_NOT_FOUND = 127;
|
|
public const int ERROR_BAD_EXE_FORMAT = 193;
|
|
public const int ERROR_EXE_MACHINE_TYPE_MISMATCH= 216;
|
|
public const int MAX_PATH = 260;
|
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class STARTUPINFO {
|
|
public int cb;
|
|
public IntPtr lpReserved = IntPtr.Zero;
|
|
public IntPtr lpDesktop = IntPtr.Zero;
|
|
public IntPtr lpTitle = IntPtr.Zero;
|
|
public int dwX = 0;
|
|
public int dwY = 0;
|
|
public int dwXSize = 0;
|
|
public int dwYSize = 0;
|
|
public int dwXCountChars = 0;
|
|
public int dwYCountChars = 0;
|
|
public int dwFillAttribute = 0;
|
|
public int dwFlags = 0;
|
|
public short wShowWindow = 0;
|
|
public short cbReserved2 = 0;
|
|
public IntPtr lpReserved2 = IntPtr.Zero;
|
|
public SafeFileHandle hStdInput = new SafeFileHandle(IntPtr.Zero, false);
|
|
public SafeFileHandle hStdOutput = new SafeFileHandle(IntPtr.Zero, false);
|
|
public SafeFileHandle hStdError = new SafeFileHandle(IntPtr.Zero, false);
|
|
|
|
public STARTUPINFO() {
|
|
cb = Marshal.SizeOf(this);
|
|
}
|
|
|
|
public void Dispose() {
|
|
// close the handles created for child process
|
|
if(hStdInput != null && !hStdInput.IsInvalid) {
|
|
hStdInput.Close();
|
|
hStdInput = null;
|
|
}
|
|
|
|
if(hStdOutput != null && !hStdOutput.IsInvalid) {
|
|
hStdOutput.Close();
|
|
hStdOutput = null;
|
|
}
|
|
|
|
if(hStdError != null && !hStdError.IsInvalid) {
|
|
hStdError.Close();
|
|
hStdError = null;
|
|
}
|
|
}
|
|
}
|
|
#endif // !SILVERLIGHT
|
|
|
|
//
|
|
// DACL related stuff
|
|
//
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class SECURITY_ATTRIBUTES {
|
|
#if !SILVERLIGHT
|
|
// We don't support ACL's on Silverlight nor on CoreSystem builds in our API's.
|
|
// But, we need P/Invokes to occasionally take these as parameters. We can pass null.
|
|
public int nLength = 12;
|
|
public SafeLocalMemHandle lpSecurityDescriptor = new SafeLocalMemHandle(IntPtr.Zero, false);
|
|
public bool bInheritHandle = false;
|
|
#endif // !SILVERLIGHT
|
|
}
|
|
|
|
#if !SILVERLIGHT
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool GetExitCodeProcess(SafeProcessHandle processHandle, out int exitCode);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool GetProcessTimes(SafeProcessHandle handle, out long creation, out long exit, out long kernel, out long user);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool GetThreadTimes(SafeThreadHandle handle, out long creation, out long exit, out long kernel, out long user);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Ansi, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern IntPtr GetStdHandle(int whichHandle);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern bool CreatePipe(out SafeFileHandle hReadPipe, out SafeFileHandle hWritePipe, SECURITY_ATTRIBUTES lpPipeAttributes, int nSize);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern bool CreateProcess(
|
|
[MarshalAs(UnmanagedType.LPTStr)]
|
|
string lpApplicationName, // LPCTSTR
|
|
StringBuilder lpCommandLine, // LPTSTR - note: CreateProcess might insert a null somewhere in this string
|
|
SECURITY_ATTRIBUTES lpProcessAttributes, // LPSECURITY_ATTRIBUTES
|
|
SECURITY_ATTRIBUTES lpThreadAttributes, // LPSECURITY_ATTRIBUTES
|
|
bool bInheritHandles, // BOOL
|
|
int dwCreationFlags, // DWORD
|
|
IntPtr lpEnvironment, // LPVOID
|
|
[MarshalAs(UnmanagedType.LPTStr)]
|
|
string lpCurrentDirectory, // LPCTSTR
|
|
STARTUPINFO lpStartupInfo, // LPSTARTUPINFO
|
|
SafeNativeMethods.PROCESS_INFORMATION lpProcessInformation // LPPROCESS_INFORMATION
|
|
);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern bool TerminateProcess(SafeProcessHandle processHandle, int exitCode);
|
|
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern int GetCurrentProcessId();
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Ansi, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern IntPtr GetCurrentProcess();
|
|
|
|
#if !FEATURE_PAL
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
[ResourceConsumption(ResourceScope.Machine)]
|
|
internal static string GetLocalPath(string fileName) {
|
|
System.Diagnostics.Debug.Assert(fileName != null && fileName.Length > 0, "Cannot get local path, fileName is not valid");
|
|
|
|
Uri uri = new Uri(fileName);
|
|
return uri.LocalPath + uri.Fragment;
|
|
}
|
|
|
|
[DllImport(ExternDll.Advapi32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=false)]
|
|
[System.Security.SuppressUnmanagedCodeSecurityAttribute()]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public extern static bool CreateProcessAsUser(SafeHandle hToken,
|
|
string lpApplicationName,
|
|
string lpCommandLine,
|
|
SECURITY_ATTRIBUTES lpProcessAttributes,
|
|
SECURITY_ATTRIBUTES lpThreadAttributes,
|
|
bool bInheritHandles,
|
|
int dwCreationFlags,
|
|
HandleRef lpEnvironment,
|
|
string lpCurrentDirectory,
|
|
STARTUPINFO lpStartupInfo,
|
|
SafeNativeMethods.PROCESS_INFORMATION lpProcessInformation
|
|
);
|
|
|
|
[DllImport(ExternDll.Advapi32, CharSet=CharSet.Unicode, ExactSpelling=true, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
internal static extern bool CreateProcessWithLogonW(
|
|
string userName,
|
|
string domain,
|
|
IntPtr password,
|
|
LogonFlags logonFlags,
|
|
[MarshalAs(UnmanagedType.LPTStr)]
|
|
string appName,
|
|
StringBuilder cmdLine,
|
|
int creationFlags,
|
|
IntPtr environmentBlock,
|
|
[MarshalAs(UnmanagedType.LPTStr)]
|
|
string lpCurrentDirectory, // LPCTSTR
|
|
STARTUPINFO lpStartupInfo,
|
|
SafeNativeMethods.PROCESS_INFORMATION lpProcessInformation);
|
|
|
|
[Flags]
|
|
internal enum LogonFlags {
|
|
LOGON_WITH_PROFILE = 0x00000001,
|
|
LOGON_NETCREDENTIALS_ONLY = 0x00000002
|
|
}
|
|
|
|
public const int UIS_SET = 1,
|
|
WSF_VISIBLE = 0x0001,
|
|
UIS_CLEAR = 2,
|
|
UISF_HIDEFOCUS = 0x1,
|
|
UISF_HIDEACCEL = 0x2,
|
|
USERCLASSTYPE_FULL = 1,
|
|
UOI_FLAGS = 1;
|
|
|
|
public const int COLOR_WINDOW = 5;
|
|
public const int WS_POPUP = unchecked((int)0x80000000);
|
|
public const int WS_VISIBLE = 0x10000000;
|
|
public const int WM_SETTINGCHANGE = 0x001A;
|
|
public const int WM_SYSCOLORCHANGE = 0x0015;
|
|
public const int WM_QUERYENDSESSION = 0x0011;
|
|
public const int WM_QUIT = 0x0012;
|
|
public const int WM_ENDSESSION = 0x0016;
|
|
public const int WM_POWERBROADCAST = 0x0218;
|
|
public const int WM_COMPACTING = 0x0041;
|
|
public const int WM_DISPLAYCHANGE = 0x007E;
|
|
public const int WM_FONTCHANGE = 0x001D;
|
|
public const int WM_PALETTECHANGED = 0x0311;
|
|
public const int WM_TIMECHANGE = 0x001E;
|
|
public const int WM_THEMECHANGED = 0x031A;
|
|
public const int WM_WTSSESSION_CHANGE = 0x02B1;
|
|
|
|
public const int ENDSESSION_LOGOFF = unchecked((int)0x80000000);
|
|
public const int WM_TIMER = 0x0113;
|
|
public const int WM_USER = 0x0400;
|
|
public const int WM_CREATETIMER = WM_USER + 1;
|
|
public const int WM_KILLTIMER = WM_USER + 2;
|
|
public const int WM_REFLECT = WM_USER + 0x1C00;
|
|
|
|
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_LOGON = 0x5;
|
|
public const int WTS_SESSION_LOGOFF = 0x6;
|
|
public const int WTS_SESSION_LOCK = 0x7;
|
|
public const int WTS_SESSION_UNLOCK = 0x8;
|
|
public const int WTS_SESSION_REMOTE_CONTROL = 0x9;
|
|
|
|
public const int NOTIFY_FOR_THIS_SESSION = 0x0;
|
|
|
|
public const int CTRL_C_EVENT = 0;
|
|
public const int CTRL_BREAK_EVENT = 1;
|
|
public const int CTRL_CLOSE_EVENT = 2;
|
|
public const int CTRL_LOGOFF_EVENT = 5;
|
|
public const int CTRL_SHUTDOWN_EVENT = 6;
|
|
|
|
public const int SPI_GETBEEP = 1;
|
|
public const int SPI_SETBEEP = 2;
|
|
public const int SPI_GETMOUSE = 3;
|
|
public const int SPI_SETMOUSE = 4;
|
|
public const int SPI_GETBORDER = 5;
|
|
public const int SPI_SETBORDER = 6;
|
|
public const int SPI_GETKEYBOARDSPEED = 10;
|
|
public const int SPI_SETKEYBOARDSPEED = 11;
|
|
public const int SPI_LANGDRIVER = 12;
|
|
public const int SPI_ICONHORIZONTALSPACING = 13;
|
|
public const int SPI_GETSCREENSAVETIMEOUT = 14;
|
|
public const int SPI_SETSCREENSAVETIMEOUT = 15;
|
|
public const int SPI_GETSCREENSAVEACTIVE = 16;
|
|
public const int SPI_SETSCREENSAVEACTIVE = 17;
|
|
public const int SPI_GETGRIDGRANULARITY = 18;
|
|
public const int SPI_SETGRIDGRANULARITY = 19;
|
|
public const int SPI_SETDESKWALLPAPER = 20;
|
|
public const int SPI_SETDESKPATTERN = 21;
|
|
public const int SPI_GETKEYBOARDDELAY = 22;
|
|
public const int SPI_SETKEYBOARDDELAY = 23;
|
|
public const int SPI_ICONVERTICALSPACING = 24;
|
|
public const int SPI_GETICONTITLEWRAP = 25;
|
|
public const int SPI_SETICONTITLEWRAP = 26;
|
|
public const int SPI_GETMENUDROPALIGNMENT = 27;
|
|
public const int SPI_SETMENUDROPALIGNMENT = 28;
|
|
public const int SPI_SETDOUBLECLKWIDTH = 29;
|
|
public const int SPI_SETDOUBLECLKHEIGHT = 30;
|
|
public const int SPI_GETICONTITLELOGFONT = 31;
|
|
public const int SPI_SETDOUBLECLICKTIME = 32;
|
|
public const int SPI_SETMOUSEBUTTONSWAP = 33;
|
|
public const int SPI_SETICONTITLELOGFONT = 34;
|
|
public const int SPI_GETFASTTASKSWITCH = 35;
|
|
public const int SPI_SETFASTTASKSWITCH = 36;
|
|
public const int SPI_SETDRAGFULLWINDOWS = 37;
|
|
public const int SPI_GETDRAGFULLWINDOWS = 38;
|
|
public const int SPI_GETNONCLIENTMETRICS = 41;
|
|
public const int SPI_SETNONCLIENTMETRICS = 42;
|
|
public const int SPI_GETMINIMIZEDMETRICS = 43;
|
|
public const int SPI_SETMINIMIZEDMETRICS = 44;
|
|
public const int SPI_GETICONMETRICS = 45;
|
|
public const int SPI_SETICONMETRICS = 46;
|
|
public const int SPI_SETWORKAREA = 47;
|
|
public const int SPI_GETWORKAREA = 48;
|
|
public const int SPI_SETPENWINDOWS = 49;
|
|
public const int SPI_GETHIGHCONTRAST = 66;
|
|
public const int SPI_SETHIGHCONTRAST = 67;
|
|
public const int SPI_GETKEYBOARDPREF = 68;
|
|
public const int SPI_SETKEYBOARDPREF = 69;
|
|
public const int SPI_GETSCREENREADER = 70;
|
|
public const int SPI_SETSCREENREADER = 71;
|
|
public const int SPI_GETANIMATION = 72;
|
|
public const int SPI_SETANIMATION = 73;
|
|
public const int SPI_GETFONTSMOOTHING = 74;
|
|
public const int SPI_SETFONTSMOOTHING = 75;
|
|
public const int SPI_SETDRAGWIDTH = 76;
|
|
public const int SPI_SETDRAGHEIGHT = 77;
|
|
public const int SPI_SETHANDHELD = 78;
|
|
public const int SPI_GETLOWPOWERTIMEOUT = 79;
|
|
public const int SPI_GETPOWEROFFTIMEOUT = 80;
|
|
public const int SPI_SETLOWPOWERTIMEOUT = 81;
|
|
public const int SPI_SETPOWEROFFTIMEOUT = 82;
|
|
public const int SPI_GETLOWPOWERACTIVE = 83;
|
|
public const int SPI_GETPOWEROFFACTIVE = 84;
|
|
public const int SPI_SETLOWPOWERACTIVE = 85;
|
|
public const int SPI_SETPOWEROFFACTIVE = 86;
|
|
public const int SPI_SETCURSORS = 87;
|
|
public const int SPI_SETICONS = 88;
|
|
public const int SPI_GETDEFAULTINPUTLANG = 89;
|
|
public const int SPI_SETDEFAULTINPUTLANG = 90;
|
|
public const int SPI_SETLANGTOGGLE = 91;
|
|
public const int SPI_GETWINDOWSEXTENSION = 92;
|
|
public const int SPI_SETMOUSETRAILS = 93;
|
|
public const int SPI_GETMOUSETRAILS = 94;
|
|
public const int SPI_SETSCREENSAVERRUNNING = 97;
|
|
public const int SPI_SCREENSAVERRUNNING = SPI_SETSCREENSAVERRUNNING;
|
|
public const int SPI_GETFILTERKEYS = 50;
|
|
public const int SPI_SETFILTERKEYS = 51;
|
|
public const int SPI_GETTOGGLEKEYS = 52;
|
|
public const int SPI_SETTOGGLEKEYS = 53;
|
|
public const int SPI_GETMOUSEKEYS = 54;
|
|
public const int SPI_SETMOUSEKEYS = 55;
|
|
public const int SPI_GETSHOWSOUNDS = 56;
|
|
public const int SPI_SETSHOWSOUNDS = 57;
|
|
public const int SPI_GETSTICKYKEYS = 58;
|
|
public const int SPI_SETSTICKYKEYS = 59;
|
|
public const int SPI_GETACCESSTIMEOUT = 60;
|
|
public const int SPI_SETACCESSTIMEOUT = 61;
|
|
public const int SPI_GETSERIALKEYS = 62;
|
|
public const int SPI_SETSERIALKEYS = 63;
|
|
public const int SPI_GETSOUNDSENTRY = 64;
|
|
public const int SPI_SETSOUNDSENTRY = 65;
|
|
public const int SPI_GETSNAPTODEFBUTTON = 95;
|
|
public const int SPI_SETSNAPTODEFBUTTON = 96;
|
|
public const int SPI_GETMOUSEHOVERWIDTH = 98;
|
|
public const int SPI_SETMOUSEHOVERWIDTH = 99;
|
|
public const int SPI_GETMOUSEHOVERHEIGHT = 100;
|
|
public const int SPI_SETMOUSEHOVERHEIGHT = 101;
|
|
public const int SPI_GETMOUSEHOVERTIME = 102;
|
|
public const int SPI_SETMOUSEHOVERTIME = 103;
|
|
public const int SPI_GETWHEELSCROLLLINES = 104;
|
|
public const int SPI_SETWHEELSCROLLLINES = 105;
|
|
public const int SPI_GETMENUSHOWDELAY = 106;
|
|
public const int SPI_SETMENUSHOWDELAY = 107;
|
|
public const int SPI_GETSHOWIMEUI = 110;
|
|
public const int SPI_SETSHOWIMEUI = 111;
|
|
public const int SPI_GETMOUSESPEED = 112;
|
|
public const int SPI_SETMOUSESPEED = 113;
|
|
public const int SPI_GETSCREENSAVERRUNNING = 114;
|
|
public const int SPI_GETDESKWALLPAPER = 115;
|
|
public const int SPI_GETACTIVEWINDOWTRACKING = 0x1000;
|
|
public const int SPI_SETACTIVEWINDOWTRACKING = 0x1001;
|
|
public const int SPI_GETMENUANIMATION = 0x1002;
|
|
public const int SPI_SETMENUANIMATION = 0x1003;
|
|
public const int SPI_GETCOMBOBOXANIMATION = 0x1004;
|
|
public const int SPI_SETCOMBOBOXANIMATION = 0x1005;
|
|
public const int SPI_GETLISTBOXSMOOTHSCROLLING = 0x1006;
|
|
public const int SPI_SETLISTBOXSMOOTHSCROLLING = 0x1007;
|
|
public const int SPI_GETGRADIENTCAPTIONS = 0x1008;
|
|
public const int SPI_SETGRADIENTCAPTIONS = 0x1009;
|
|
public const int SPI_GETKEYBOARDCUES = 0x100A;
|
|
public const int SPI_SETKEYBOARDCUES = 0x100B;
|
|
public const int SPI_GETMENUUNDERLINES = SPI_GETKEYBOARDCUES;
|
|
public const int SPI_SETMENUUNDERLINES = SPI_SETKEYBOARDCUES;
|
|
public const int SPI_GETACTIVEWNDTRKZORDER = 0x100C;
|
|
public const int SPI_SETACTIVEWNDTRKZORDER = 0x100D;
|
|
public const int SPI_GETHOTTRACKING = 0x100E;
|
|
public const int SPI_SETHOTTRACKING = 0x100F;
|
|
public const int SPI_GETMENUFADE = 0x1012;
|
|
public const int SPI_SETMENUFADE = 0x1013;
|
|
public const int SPI_GETSELECTIONFADE = 0x1014;
|
|
public const int SPI_SETSELECTIONFADE = 0x1015;
|
|
public const int SPI_GETTOOLTIPANIMATION = 0x1016;
|
|
public const int SPI_SETTOOLTIPANIMATION = 0x1017;
|
|
public const int SPI_GETTOOLTIPFADE = 0x1018;
|
|
public const int SPI_SETTOOLTIPFADE = 0x1019;
|
|
public const int SPI_GETCURSORSHADOW = 0x101A;
|
|
public const int SPI_SETCURSORSHADOW = 0x101B;
|
|
public const int SPI_GETUIEFFECTS = 0x103E;
|
|
public const int SPI_SETUIEFFECTS = 0x103F;
|
|
public const int SPI_GETFOREGROUNDLOCKTIMEOUT = 0x2000;
|
|
public const int SPI_SETFOREGROUNDLOCKTIMEOUT = 0x2001;
|
|
public const int SPI_GETACTIVEWNDTRKTIMEOUT = 0x2002;
|
|
public const int SPI_SETACTIVEWNDTRKTIMEOUT = 0x2003;
|
|
public const int SPI_GETFOREGROUNDFLASHCOUNT = 0x2004;
|
|
public const int SPI_SETFOREGROUNDFLASHCOUNT = 0x2005;
|
|
public const int SPI_GETCARETWIDTH = 0x2006;
|
|
public const int SPI_SETCARETWIDTH = 0x2007;
|
|
|
|
public const uint STATUS_INFO_LENGTH_MISMATCH = 0xC0000004;
|
|
|
|
public const int PBT_APMQUERYSUSPEND = 0x0000;
|
|
public const int PBT_APMQUERYSTANDBY = 0x0001;
|
|
public const int PBT_APMQUERYSUSPENDFAILED = 0x0002;
|
|
public const int PBT_APMQUERYSTANDBYFAILED = 0x0003;
|
|
public const int PBT_APMSUSPEND = 0x0004;
|
|
public const int PBT_APMSTANDBY = 0x0005;
|
|
public const int PBT_APMRESUMECRITICAL = 0x0006;
|
|
public const int PBT_APMRESUMESUSPEND = 0x0007;
|
|
public const int PBT_APMRESUMESTANDBY = 0x0008;
|
|
public const int PBT_APMBATTERYLOW = 0x0009;
|
|
public const int PBT_APMPOWERSTATUSCHANGE = 0x000A;
|
|
public const int PBT_APMOEMEVENT = 0x000B;
|
|
|
|
public const int STARTF_USESHOWWINDOW = 0x00000001;
|
|
public const int FILE_MAP_WRITE = 0x00000002;
|
|
public const int FILE_MAP_READ = 0x00000004;
|
|
public const int PAGE_READWRITE = 0x00000004;
|
|
public const int GENERIC_EXECUTE = (0x20000000);
|
|
public const int GENERIC_ALL = (0x10000000);
|
|
public const int ERROR_NOT_READY = 21;
|
|
public const int ERROR_LOCK_FAILED = 167;
|
|
public const int ERROR_BUSY = 170;
|
|
|
|
public const int IMPERSONATION_LEVEL_SecurityAnonymous = 0;
|
|
public const int IMPERSONATION_LEVEL_SecurityIdentification = 1;
|
|
public const int IMPERSONATION_LEVEL_SecurityImpersonation = 2;
|
|
public const int IMPERSONATION_LEVEL_SecurityDelegation = 3;
|
|
|
|
public const int TOKEN_TYPE_TokenPrimary = 1;
|
|
public const int TOKEN_TYPE_TokenImpersonation = 2;
|
|
|
|
public const int TOKEN_ALL_ACCESS = 0x000f01ff;
|
|
public const int TOKEN_EXECUTE = 0x00020000;
|
|
public const int TOKEN_READ = 0x00020008;
|
|
public const int TOKEN_IMPERSONATE = 0x00000004;
|
|
|
|
public const int PIPE_ACCESS_INBOUND = 0x00000001;
|
|
public const int PIPE_ACCESS_OUTBOUND = 0x00000002;
|
|
public const int PIPE_ACCESS_DUPLEX = 0x00000003;
|
|
|
|
public const int PIPE_WAIT = 0x00000000;
|
|
public const int PIPE_NOWAIT = 0x00000001;
|
|
public const int PIPE_READMODE_BYTE = 0x00000000;
|
|
public const int PIPE_READMODE_MESSAGE = 0x00000002;
|
|
public const int PIPE_TYPE_BYTE = 0x00000000;
|
|
public const int PIPE_TYPE_MESSAGE = 0x00000004;
|
|
|
|
public const int PIPE_SINGLE_INSTANCES = 1;
|
|
public const int PIPE_UNLIMITED_INSTANCES = 255;
|
|
|
|
public const int FILE_FLAG_OVERLAPPED = 0x40000000;
|
|
|
|
public const int PM_REMOVE = 0x0001;
|
|
|
|
public const int QS_KEY = 0x0001,
|
|
QS_MOUSEMOVE = 0x0002,
|
|
QS_MOUSEBUTTON = 0x0004,
|
|
QS_POSTMESSAGE = 0x0008,
|
|
QS_TIMER = 0x0010,
|
|
QS_PAINT = 0x0020,
|
|
QS_SENDMESSAGE = 0x0040,
|
|
QS_HOTKEY = 0x0080,
|
|
QS_ALLPOSTMESSAGE = 0x0100,
|
|
QS_MOUSE = QS_MOUSEMOVE | QS_MOUSEBUTTON,
|
|
QS_INPUT = QS_MOUSE | QS_KEY,
|
|
QS_ALLEVENTS = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY,
|
|
QS_ALLINPUT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE;
|
|
|
|
public const int MWMO_INPUTAVAILABLE = 0x0004; // don't use MWMO_WAITALL, see ddb#176342
|
|
|
|
// The following are unique to the SerialPort/SerialStream classes
|
|
internal const byte ONESTOPBIT = 0;
|
|
internal const byte ONE5STOPBITS = 1;
|
|
internal const byte TWOSTOPBITS = 2;
|
|
|
|
internal const int DTR_CONTROL_DISABLE = 0x00;
|
|
internal const int DTR_CONTROL_ENABLE = 0x01;
|
|
internal const int DTR_CONTROL_HANDSHAKE = 0x02;
|
|
|
|
internal const int RTS_CONTROL_DISABLE = 0x00;
|
|
internal const int RTS_CONTROL_ENABLE = 0x01;
|
|
internal const int RTS_CONTROL_HANDSHAKE = 0x02;
|
|
internal const int RTS_CONTROL_TOGGLE = 0x03;
|
|
|
|
internal const int MS_CTS_ON = 0x10;
|
|
internal const int MS_DSR_ON = 0x20;
|
|
internal const int MS_RING_ON = 0x40;
|
|
internal const int MS_RLSD_ON = 0x80;
|
|
|
|
internal const byte EOFCHAR = (byte) 26;
|
|
|
|
// Since C# does not provide access to bitfields and the native DCB structure contains
|
|
// a very necessary one, these are the positional offsets (from the right) of areas
|
|
// of the 32-bit integer used in SerialStream's SetDcbFlag() and GetDcbFlag() methods.
|
|
internal const int FBINARY = 0;
|
|
internal const int FPARITY = 1;
|
|
internal const int FOUTXCTSFLOW = 2;
|
|
internal const int FOUTXDSRFLOW = 3;
|
|
internal const int FDTRCONTROL = 4;
|
|
internal const int FDSRSENSITIVITY = 6;
|
|
internal const int FTXCONTINUEONXOFF = 7;
|
|
internal const int FOUTX = 8;
|
|
internal const int FINX = 9;
|
|
internal const int FERRORCHAR = 10;
|
|
internal const int FNULL = 11;
|
|
internal const int FRTSCONTROL = 12;
|
|
internal const int FABORTONOERROR = 14;
|
|
internal const int FDUMMY2 = 15;
|
|
|
|
internal const int PURGE_TXABORT = 0x0001; // Kill the pending/current writes to the comm port.
|
|
internal const int PURGE_RXABORT = 0x0002; // Kill the pending/current reads to the comm port.
|
|
internal const int PURGE_TXCLEAR = 0x0004; // Kill the transmit queue if there.
|
|
internal const int PURGE_RXCLEAR = 0x0008; // Kill the typeahead buffer if there.
|
|
|
|
internal const byte DEFAULTXONCHAR = (byte) 17;
|
|
internal const byte DEFAULTXOFFCHAR = (byte) 19;
|
|
|
|
internal const int SETRTS = 3; // Set RTS high
|
|
internal const int CLRRTS = 4; // Set RTS low
|
|
internal const int SETDTR = 5; // Set DTR high
|
|
internal const int CLRDTR = 6;
|
|
|
|
internal const int EV_RXCHAR = 0x01;
|
|
internal const int EV_RXFLAG = 0x02;
|
|
internal const int EV_CTS = 0x08;
|
|
internal const int EV_DSR = 0x10;
|
|
internal const int EV_RLSD = 0x20;
|
|
internal const int EV_BREAK = 0x40;
|
|
internal const int EV_ERR = 0x80;
|
|
internal const int EV_RING = 0x100;
|
|
internal const int ALL_EVENTS = 0x1fb; // don't use EV_TXEMPTY
|
|
|
|
internal const int CE_RXOVER = 0x01;
|
|
internal const int CE_OVERRUN = 0x02;
|
|
internal const int CE_PARITY = 0x04;
|
|
internal const int CE_FRAME = 0x08;
|
|
internal const int CE_BREAK = 0x10;
|
|
internal const int CE_TXFULL = 0x100;
|
|
|
|
internal const int MAXDWORD = -1; // note this is 0xfffffff, or UInt32.MaxValue, here used as an int
|
|
|
|
internal const int NOPARITY = 0;
|
|
internal const int ODDPARITY = 1;
|
|
internal const int EVENPARITY = 2;
|
|
internal const int MARKPARITY = 3;
|
|
internal const int SPACEPARITY = 4;
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
|
|
internal class WNDCLASS_I {
|
|
public int style;
|
|
public IntPtr lpfnWndProc;
|
|
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;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
|
|
internal class WNDCLASS {
|
|
public int style;
|
|
public WndProc lpfnWndProc;
|
|
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;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct MSG {
|
|
public IntPtr hwnd;
|
|
public int message;
|
|
public IntPtr wParam;
|
|
public IntPtr lParam;
|
|
public int time;
|
|
public int pt_x;
|
|
public int pt_y;
|
|
}
|
|
|
|
public enum StructFormatEnum {
|
|
Ansi = 1,
|
|
Unicode = 2,
|
|
Auto = 3,
|
|
}
|
|
|
|
internal const int SDDL_REVISION_1 = 1;
|
|
|
|
public enum StructFormat {
|
|
Ansi = 1,
|
|
Unicode = 2,
|
|
Auto = 3,
|
|
}
|
|
|
|
public delegate IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
|
|
|
|
public delegate int ConHndlr(int signalType);
|
|
|
|
// file src\services\monitoring\system\diagnosticts\nativemethods.cs
|
|
public const int SECURITY_DESCRIPTOR_REVISION = 1;
|
|
public const int HKEY_PERFORMANCE_DATA = unchecked((int)0x80000004);
|
|
public const int DWORD_SIZE = 4;
|
|
public const int LARGE_INTEGER_SIZE = 8;
|
|
|
|
public const int PERF_NO_INSTANCES = -1; // no instances (see NumInstances above)
|
|
|
|
public const int PERF_SIZE_DWORD = 0x00000000;
|
|
public const int PERF_SIZE_LARGE = 0x00000100;
|
|
public const int PERF_SIZE_ZERO = 0x00000200; // for Zero Length fields
|
|
public const int PERF_SIZE_VARIABLE_LEN = 0x00000300; // length is In CounterLength field
|
|
|
|
public const int PERF_NO_UNIQUE_ID = -1;
|
|
|
|
//
|
|
// select one of the following values to indicate the counter field usage
|
|
//
|
|
public const int PERF_TYPE_NUMBER = 0x00000000; // a number (not a counter)
|
|
public const int PERF_TYPE_COUNTER = 0x00000400; // an increasing numeric value
|
|
public const int PERF_TYPE_TEXT = 0x00000800; // a text field
|
|
public const int PERF_TYPE_ZERO = 0x00000C00; // displays a zero
|
|
|
|
//
|
|
// If the PERF_TYPE_NUMBER field was selected, then select one of the
|
|
// following to describe the Number
|
|
//
|
|
public const int PERF_NUMBER_HEX = 0x00000000; // display as HEX value
|
|
public const int PERF_NUMBER_DECIMAL = 0x00010000; // display as a decimal integer
|
|
public const int PERF_NUMBER_DEC_1000 = 0x00020000; // display as a decimal/1000
|
|
|
|
//
|
|
// If the PERF_TYPE_COUNTER value was selected then select one of the
|
|
// following to indicate the type of counter
|
|
//
|
|
public const int PERF_COUNTER_VALUE = 0x00000000; // display counter value
|
|
public const int PERF_COUNTER_RATE = 0x00010000; // divide ctr / delta time
|
|
public const int PERF_COUNTER_FRACTION = 0x00020000; // divide ctr / base
|
|
public const int PERF_COUNTER_BASE = 0x00030000; // base value used In fractions
|
|
public const int PERF_COUNTER_ELAPSED = 0x00040000; // subtract counter from current time
|
|
public const int PERF_COUNTER_QUEUELEN = 0x00050000; // Use Queuelen processing func.
|
|
public const int PERF_COUNTER_HISTOGRAM = 0x00060000; // Counter begins or ends a histogram
|
|
public const int PERF_COUNTER_PRECISION = 0x00070000; // divide ctr / private clock
|
|
|
|
//
|
|
// If the PERF_TYPE_TEXT value was selected, then select one of the
|
|
// following to indicate the type of TEXT data.
|
|
//
|
|
public const int PERF_TEXT_UNICODE = 0x00000000; // type of text In text field
|
|
public const int PERF_TEXT_ASCII = 0x00010000; // ASCII using the CodePage field
|
|
|
|
//
|
|
// Timer SubTypes
|
|
//
|
|
public const int PERF_TIMER_TICK = 0x00000000; // use system perf. freq for base
|
|
public const int PERF_TIMER_100NS = 0x00100000; // use 100 NS timer time base units
|
|
public const int PERF_OBJECT_TIMER = 0x00200000; // use the object timer freq
|
|
|
|
//
|
|
// Any types that have calculations performed can use one or more of
|
|
// the following calculation modification flags listed here
|
|
//
|
|
public const int PERF_DELTA_COUNTER = 0x00400000; // compute difference first
|
|
public const int PERF_DELTA_BASE = 0x00800000; // compute base diff as well
|
|
public const int PERF_INVERSE_COUNTER = 0x01000000; // show as 1.00-value (assumes:
|
|
public const int PERF_MULTI_COUNTER = 0x02000000; // sum of multiple instances
|
|
|
|
//
|
|
// Select one of the following values to indicate the display suffix (if any)
|
|
//
|
|
public const int PERF_DISPLAY_NO_SUFFIX = 0x00000000; // no suffix
|
|
public const int PERF_DISPLAY_PER_SEC = 0x10000000; // "/sec"
|
|
public const int PERF_DISPLAY_PERCENT = 0x20000000; // "%"
|
|
public const int PERF_DISPLAY_SECONDS = 0x30000000; // "secs"
|
|
public const int PERF_DISPLAY_NOSHOW = 0x40000000; // value is not displayed
|
|
|
|
//
|
|
// Predefined counter types
|
|
//
|
|
|
|
// 32-bit Counter. Divide delta by delta time. Display suffix: "/sec"
|
|
public const int PERF_COUNTER_COUNTER =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_PER_SEC);
|
|
|
|
|
|
// 64-bit Timer. Divide delta by delta time. Display suffix: "%"
|
|
public const int PERF_COUNTER_TIMER =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT);
|
|
|
|
// Queue Length Space-Time Product. Divide delta by delta time. No Display Suffix.
|
|
public const int PERF_COUNTER_QUEUELEN_TYPE =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_QUEUELEN |
|
|
PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// Queue Length Space-Time Product. Divide delta by delta time. No Display Suffix.
|
|
public const int PERF_COUNTER_LARGE_QUEUELEN_TYPE =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_QUEUELEN |
|
|
PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// Queue Length Space-Time Product using 100 Ns timebase.
|
|
// Divide delta by delta time. No Display Suffix.
|
|
public const int PERF_COUNTER_100NS_QUEUELEN_TYPE =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_QUEUELEN |
|
|
PERF_TIMER_100NS | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// Queue Length Space-Time Product using Object specific timebase.
|
|
// Divide delta by delta time. No Display Suffix.
|
|
public const int PERF_COUNTER_OBJ_TIME_QUEUELEN_TYPE =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_QUEUELEN |
|
|
PERF_OBJECT_TIMER | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// 64-bit Counter. Divide delta by delta time. Display Suffix: "/sec"
|
|
public const int PERF_COUNTER_BULK_COUNT =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_PER_SEC);
|
|
|
|
// Indicates the counter is not a counter but rather Unicode text Display as text.
|
|
public const int PERF_COUNTER_TEXT =
|
|
(PERF_SIZE_VARIABLE_LEN | PERF_TYPE_TEXT | PERF_TEXT_UNICODE |
|
|
PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// Indicates the data is a counter which should not be
|
|
// time averaged on display (such as an error counter on a serial line)
|
|
// Display as is. No Display Suffix.
|
|
public const int PERF_COUNTER_RAWCOUNT =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_NUMBER | PERF_NUMBER_DECIMAL |
|
|
PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// Same as PERF_COUNTER_RAWCOUNT except its size is a large integer
|
|
public const int PERF_COUNTER_LARGE_RAWCOUNT =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_NUMBER | PERF_NUMBER_DECIMAL |
|
|
PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// Special case for RAWCOUNT that want to be displayed In hex
|
|
// Indicates the data is a counter which should not be
|
|
// time averaged on display (such as an error counter on a serial line)
|
|
// Display as is. No Display Suffix.
|
|
public const int PERF_COUNTER_RAWCOUNT_HEX =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_NUMBER | PERF_NUMBER_HEX |
|
|
PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// Same as PERF_COUNTER_RAWCOUNT_HEX except its size is a large integer
|
|
public const int PERF_COUNTER_LARGE_RAWCOUNT_HEX =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_NUMBER | PERF_NUMBER_HEX |
|
|
PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// A count which is either 1 or 0 on each sampling interrupt (% busy)
|
|
// Divide delta by delta base. Display Suffix: "%"
|
|
public const int PERF_SAMPLE_FRACTION =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION |
|
|
PERF_DELTA_COUNTER | PERF_DELTA_BASE | PERF_DISPLAY_PERCENT);
|
|
|
|
// A count which is sampled on each sampling interrupt (queue length)
|
|
// Divide delta by delta time. No Display Suffix.
|
|
public const int PERF_SAMPLE_COUNTER =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// A label: no data is associated with this counter (it has 0 length)
|
|
// Do not display.
|
|
public const int PERF_COUNTER_NODATA =
|
|
(PERF_SIZE_ZERO | PERF_DISPLAY_NOSHOW);
|
|
|
|
// 64-bit Timer inverse (e.g., idle is measured, but display busy %)
|
|
// Display 100 - delta divided by delta time. Display suffix: "%"
|
|
public const int PERF_COUNTER_TIMER_INV =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_INVERSE_COUNTER |
|
|
PERF_DISPLAY_PERCENT);
|
|
|
|
// The divisor for a sample, used with the previous counter to form a
|
|
// sampled %. You must check for >0 before dividing by this! This
|
|
// counter will directly follow the numerator counter. It should not
|
|
// be displayed to the user.
|
|
public const int PERF_SAMPLE_BASE =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_BASE |
|
|
PERF_DISPLAY_NOSHOW |
|
|
0x00000001); // for compatibility with pre-beta versions
|
|
|
|
// A timer which, when divided by an average base, produces a time
|
|
// In seconds which is the average time of some operation. This
|
|
// timer times total operations, and the base is the number of opera-
|
|
// tions. Display Suffix: "sec"
|
|
public const int PERF_AVERAGE_TIMER =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION |
|
|
PERF_DISPLAY_SECONDS);
|
|
|
|
// Used as the denominator In the computation of time or count
|
|
// averages. Must directly follow the numerator counter. Not dis-
|
|
// played to the user.
|
|
public const int PERF_AVERAGE_BASE =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_BASE |
|
|
PERF_DISPLAY_NOSHOW |
|
|
0x00000002); // for compatibility with pre-beta versions
|
|
|
|
|
|
// 64-bit Timer in object specific units. Display delta divided by
|
|
// delta time as returned in the object type header structure. Display suffix: "%"
|
|
public const int PERF_OBJ_TIME_TIMER =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_OBJECT_TIMER | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT);
|
|
|
|
// A bulk count which, when divided (typically) by the number of
|
|
// operations, gives (typically) the number of bytes per operation.
|
|
// No Display Suffix.
|
|
public const int PERF_AVERAGE_BULK =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION |
|
|
PERF_DISPLAY_NOSHOW);
|
|
|
|
// 64-bit Timer in object specific units. Display delta divided by
|
|
// delta time as returned in the object type header structure. Display suffix: "%"
|
|
public const int PERF_OBJ_TIME_TIME =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_OBJECT_TIMER | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT);
|
|
|
|
// 64-bit Timer In 100 nsec units. Display delta divided by
|
|
// delta time. Display suffix: "%"
|
|
public const int PERF_100NSEC_TIMER =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_TIMER_100NS | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT);
|
|
|
|
// 64-bit Timer inverse (e.g., idle is measured, but display busy %)
|
|
// Display 100 - delta divided by delta time. Display suffix: "%"
|
|
public const int PERF_100NSEC_TIMER_INV =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_TIMER_100NS | PERF_DELTA_COUNTER | PERF_INVERSE_COUNTER |
|
|
PERF_DISPLAY_PERCENT);
|
|
|
|
// 64-bit Timer. Divide delta by delta time. Display suffix: "%"
|
|
// Timer for multiple instances, so result can exceed 100%.
|
|
public const int PERF_COUNTER_MULTI_TIMER =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_DELTA_COUNTER | PERF_TIMER_TICK | PERF_MULTI_COUNTER |
|
|
PERF_DISPLAY_PERCENT);
|
|
|
|
// 64-bit Timer inverse (e.g., idle is measured, but display busy %)
|
|
// Display 100 * _MULTI_BASE - delta divided by delta time.
|
|
// Display suffix: "%" Timer for multiple instances, so result
|
|
// can exceed 100%. Followed by a counter of type _MULTI_BASE.
|
|
public const int PERF_COUNTER_MULTI_TIMER_INV =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE |
|
|
PERF_DELTA_COUNTER | PERF_MULTI_COUNTER | PERF_TIMER_TICK |
|
|
PERF_INVERSE_COUNTER | PERF_DISPLAY_PERCENT);
|
|
|
|
// Number of instances to which the preceding _MULTI_..._INV counter
|
|
// applies. Used as a factor to get the percentage.
|
|
public const int PERF_COUNTER_MULTI_BASE =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_BASE |
|
|
PERF_MULTI_COUNTER | PERF_DISPLAY_NOSHOW);
|
|
|
|
// 64-bit Timer In 100 nsec units. Display delta divided by delta time.
|
|
// Display suffix: "%" Timer for multiple instances, so result can exceed 100%.
|
|
public const int PERF_100NSEC_MULTI_TIMER =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_DELTA_COUNTER |
|
|
PERF_COUNTER_RATE | PERF_TIMER_100NS | PERF_MULTI_COUNTER |
|
|
PERF_DISPLAY_PERCENT);
|
|
|
|
// 64-bit Timer inverse (e.g., idle is measured, but display busy %)
|
|
// Display 100 * _MULTI_BASE - delta divided by delta time.
|
|
// Display suffix: "%" Timer for multiple instances, so result
|
|
// can exceed 100%. Followed by a counter of type _MULTI_BASE.
|
|
public const int PERF_100NSEC_MULTI_TIMER_INV =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_DELTA_COUNTER |
|
|
PERF_COUNTER_RATE | PERF_TIMER_100NS | PERF_MULTI_COUNTER |
|
|
PERF_INVERSE_COUNTER | PERF_DISPLAY_PERCENT);
|
|
|
|
// Indicates the data is a fraction of the following counter which
|
|
// should not be time averaged on display (such as free space over
|
|
// total space.) Display as is. Display the quotient as "%".
|
|
public const int PERF_RAW_FRACTION =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION |
|
|
PERF_DISPLAY_PERCENT);
|
|
|
|
public const int PERF_LARGE_RAW_FRACTION =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION |
|
|
PERF_DISPLAY_PERCENT);
|
|
|
|
// Indicates the data is a base for the preceding counter which should
|
|
// not be time averaged on display (such as free space over total space.)
|
|
public const int PERF_RAW_BASE =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_BASE |
|
|
PERF_DISPLAY_NOSHOW |
|
|
0x00000003); // for compatibility with pre-beta versions
|
|
|
|
public const int PERF_LARGE_RAW_BASE =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_BASE |
|
|
PERF_DISPLAY_NOSHOW );
|
|
|
|
// The data collected In this counter is actually the start time of the
|
|
// item being measured. For display, this data is subtracted from the
|
|
// sample time to yield the elapsed time as the difference between the two.
|
|
// In the definition below, the PerfTime field of the Object contains
|
|
// the sample time as indicated by the PERF_OBJECT_TIMER bit and the
|
|
// difference is scaled by the PerfFreq of the Object to convert the time
|
|
// units into seconds.
|
|
public const int PERF_ELAPSED_TIME =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_ELAPSED |
|
|
PERF_OBJECT_TIMER | PERF_DISPLAY_SECONDS);
|
|
|
|
//
|
|
// The following counter type can be used with the preceding types to
|
|
// define a range of values to be displayed In a histogram.
|
|
//
|
|
|
|
//
|
|
// This counter is used to display the difference from one sample
|
|
// to the next. The counter value is a constantly increasing number
|
|
// and the value displayed is the difference between the current
|
|
// value and the previous value. Negative numbers are not allowed
|
|
// which shouldn't be a problem as long as the counter value is
|
|
// increasing or unchanged.
|
|
//
|
|
public const int PERF_COUNTER_DELTA =
|
|
(PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_VALUE |
|
|
PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
public const int PERF_COUNTER_LARGE_DELTA =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_VALUE |
|
|
PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX);
|
|
|
|
// The timer used has the same frequency as the System Performance Timer
|
|
public const int PERF_PRECISION_SYSTEM_TIMER =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_PRECISION |
|
|
PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT );
|
|
|
|
//
|
|
// The timer used has the same frequency as the 100 NanoSecond Timer
|
|
public const int PERF_PRECISION_100NS_TIMER =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_PRECISION |
|
|
PERF_TIMER_100NS | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT );
|
|
//
|
|
// The timer used is of the frequency specified in the Object header's
|
|
// PerfFreq field (PerfTime is ignored)
|
|
public const int PERF_PRECISION_OBJECT_TIMER =
|
|
(PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_PRECISION |
|
|
PERF_OBJECT_TIMER | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT );
|
|
|
|
public const uint PDH_FMT_DOUBLE = 0x00000200;
|
|
public const uint PDH_FMT_NOSCALE = 0x00001000;
|
|
public const uint PDH_FMT_NOCAP100 = 0x00008000;
|
|
|
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public class PDH_RAW_COUNTER {
|
|
public int CStatus = 0;
|
|
public long TimeStamp = 0;
|
|
public long FirstValue = 0;
|
|
public long SecondValue = 0;
|
|
public int MultiCount = 0;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public class PDH_FMT_COUNTERVALUE {
|
|
public int CStatus = 0;
|
|
public double data = 0;
|
|
}
|
|
|
|
//
|
|
// The following are used to determine the level of detail associated
|
|
// with the counter. The user will be setting the level of detail
|
|
// that should be displayed at any given time.
|
|
//
|
|
public const int PERF_DETAIL_NOVICE = 100; // The uninformed can understand it
|
|
public const int PERF_DETAIL_ADVANCED = 200; // For the advanced user
|
|
public const int PERF_DETAIL_EXPERT = 300; // For the expert user
|
|
public const int PERF_DETAIL_WIZARD = 400; // For the system designer
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class PERF_COUNTER_BLOCK {
|
|
public int ByteLength = 0;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class PERF_COUNTER_DEFINITION {
|
|
public int ByteLength = 0;
|
|
public int CounterNameTitleIndex = 0;
|
|
|
|
// this one is kind of weird. It is defined as in SDK:
|
|
// #ifdef _WIN64
|
|
// DWORD CounterNameTitle;
|
|
// #else
|
|
// LPWSTR CounterNameTitle;
|
|
// #endif
|
|
// so we can't use IntPtr here.
|
|
|
|
public int CounterNameTitlePtr = 0;
|
|
public int CounterHelpTitleIndex = 0;
|
|
public int CounterHelpTitlePtr = 0;
|
|
public int DefaultScale = 0;
|
|
public int DetailLevel = 0;
|
|
public int CounterType = 0;
|
|
public int CounterSize = 0;
|
|
public int CounterOffset = 0;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class PERF_DATA_BLOCK {
|
|
public int Signature1 = 0;
|
|
public int Signature2 = 0;
|
|
public int LittleEndian = 0;
|
|
public int Version = 0;
|
|
public int Revision = 0;
|
|
public int TotalByteLength = 0;
|
|
public int HeaderLength = 0;
|
|
public int NumObjectTypes = 0;
|
|
public int DefaultObject = 0;
|
|
public SYSTEMTIME SystemTime = null;
|
|
public int pad1 = 0; // Need to pad the struct to get quadword alignment for the 'long' after SystemTime
|
|
public long PerfTime = 0;
|
|
public long PerfFreq = 0;
|
|
public long PerfTime100nSec = 0;
|
|
public int SystemNameLength = 0;
|
|
public int SystemNameOffset = 0;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class PERF_INSTANCE_DEFINITION {
|
|
public int ByteLength = 0;
|
|
public int ParentObjectTitleIndex = 0;
|
|
public int ParentObjectInstance = 0;
|
|
public int UniqueID = 0;
|
|
public int NameOffset = 0;
|
|
public int NameLength = 0;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class PERF_OBJECT_TYPE {
|
|
public int TotalByteLength = 0;
|
|
public int DefinitionLength = 0;
|
|
public int HeaderLength = 0;
|
|
public int ObjectNameTitleIndex = 0;
|
|
public int ObjectNameTitlePtr = 0;
|
|
public int ObjectHelpTitleIndex = 0;
|
|
public int ObjectHelpTitlePtr = 0;
|
|
public int DetailLevel = 0;
|
|
public int NumCounters = 0;
|
|
public int DefaultCounter = 0;
|
|
public int NumInstances = 0;
|
|
public int CodePage = 0;
|
|
public long PerfTime = 0;
|
|
public long PerfFreq = 0;
|
|
}
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
internal static extern SafeFileMappingHandle CreateFileMapping(IntPtr hFile, NativeMethods.SECURITY_ATTRIBUTES lpFileMappingAttributes, int flProtect, int dwMaximumSizeHigh, int dwMaximumSizeLow, string lpName);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=CharSet.Auto, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
internal static extern SafeFileMappingHandle OpenFileMapping(int dwDesiredAccess, bool bInheritHandle, string lpName);
|
|
|
|
#endif // !FEATURE_PAL
|
|
#endif // !SILVERLIGHT
|
|
|
|
// copied from winbase.h
|
|
public const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
|
|
public const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
|
|
public const int FORMAT_MESSAGE_FROM_STRING = 0x00000400;
|
|
public const int FORMAT_MESSAGE_FROM_HMODULE = 0x00000800;
|
|
public const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
|
|
public const int FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000;
|
|
public const int FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF;
|
|
|
|
#if !SILVERLIGHT
|
|
#if !FEATURE_PAL
|
|
public const int LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008;
|
|
public const int LOAD_LIBRARY_AS_DATAFILE = 0x00000002;
|
|
|
|
public const int SEEK_READ = 0x2;
|
|
public const int FORWARDS_READ = 0x4;
|
|
public const int BACKWARDS_READ = 0x8;
|
|
public const int ERROR_EVENTLOG_FILE_CHANGED = 1503;
|
|
|
|
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern int WaitForInputIdle(SafeProcessHandle handle, int milliseconds);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern SafeProcessHandle OpenProcess(int access, bool inherit, int processId);
|
|
|
|
[DllImport(ExternDll.Psapi, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool EnumProcessModules(SafeProcessHandle handle, IntPtr modules, int size, ref int needed);
|
|
|
|
[DllImport(ExternDll.Psapi, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern bool EnumProcesses(int[] processIds, int size, out int needed);
|
|
|
|
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
|
[DllImport(ExternDll.Psapi, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern int GetModuleFileNameEx(HandleRef processHandle, HandleRef moduleHandle, StringBuilder baseName, int size);
|
|
|
|
[DllImport(ExternDll.Psapi, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern bool GetModuleInformation(SafeProcessHandle processHandle, HandleRef moduleHandle, NtModuleInfo ntModuleInfo, int size);
|
|
[DllImport(ExternDll.Psapi, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern int GetModuleBaseName(SafeProcessHandle processHandle, HandleRef moduleHandle, StringBuilder baseName, int size);
|
|
[DllImport(ExternDll.Psapi, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern int GetModuleFileNameEx(SafeProcessHandle processHandle, HandleRef moduleHandle, StringBuilder baseName, int size);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern bool SetProcessWorkingSetSize(SafeProcessHandle handle, IntPtr min, IntPtr max);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool GetProcessWorkingSetSize(SafeProcessHandle handle, out IntPtr min, out IntPtr max);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern bool SetProcessAffinityMask(SafeProcessHandle handle, IntPtr mask);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool GetProcessAffinityMask(SafeProcessHandle handle, out IntPtr processMask, out IntPtr systemMask);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool GetThreadPriorityBoost(SafeThreadHandle handle, out bool disabled);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool SetThreadPriorityBoost(SafeThreadHandle handle, bool disabled);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool GetProcessPriorityBoost(SafeProcessHandle handle, out bool disabled);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool SetProcessPriorityBoost(SafeProcessHandle handle, bool disabled);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern SafeThreadHandle OpenThread(int access, bool inherit, int threadId);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern bool SetThreadPriority(SafeThreadHandle handle, int priority);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern int GetThreadPriority(SafeThreadHandle handle);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern IntPtr SetThreadAffinityMask(SafeThreadHandle handle, HandleRef mask);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern int SetThreadIdealProcessor(SafeThreadHandle handle, int processor);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern IntPtr CreateToolhelp32Snapshot(int flags, int processId);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool Process32First(HandleRef handle, IntPtr entry);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool Process32Next(HandleRef handle, IntPtr entry);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool Thread32First(HandleRef handle, WinThreadEntry entry);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool Thread32Next(HandleRef handle, WinThreadEntry entry);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool Module32First(HandleRef handle, IntPtr entry);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool Module32Next(HandleRef handle, IntPtr entry);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern int GetPriorityClass(SafeProcessHandle handle);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern bool SetPriorityClass(SafeProcessHandle handle, int priorityClass);
|
|
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr extraData);
|
|
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern int GetWindowThreadProcessId(HandleRef handle, out int processId);
|
|
[DllImport(ExternDll.Shell32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern bool ShellExecuteEx(ShellExecuteInfo info);
|
|
[DllImport(ExternDll.Ntdll, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern int NtQueryInformationProcess(SafeProcessHandle processHandle, int query, NtProcessBasicInfo info, int size, int[] returnedSize);
|
|
[DllImport(ExternDll.Ntdll, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern int NtQuerySystemInformation(int query, IntPtr dataPtr, int size, out int returnedSize);
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Auto, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern SafeFileHandle CreateFile(string lpFileName,int dwDesiredAccess,int dwShareMode, SECURITY_ATTRIBUTES lpSecurityAttributes, int dwCreationDisposition,int dwFlagsAndAttributes, SafeFileHandle hTemplateFile);
|
|
|
|
|
|
#endif // !FEATURE_PAL
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Ansi, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern bool DuplicateHandle(
|
|
HandleRef hSourceProcessHandle,
|
|
SafeHandle hSourceHandle,
|
|
HandleRef hTargetProcess,
|
|
out SafeFileHandle targetHandle,
|
|
int dwDesiredAccess,
|
|
bool bInheritHandle,
|
|
int dwOptions
|
|
);
|
|
|
|
[DllImport(ExternDll.Kernel32, CharSet=System.Runtime.InteropServices.CharSet.Ansi, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public static extern bool DuplicateHandle(
|
|
HandleRef hSourceProcessHandle,
|
|
SafeHandle hSourceHandle,
|
|
HandleRef hTargetProcess,
|
|
out SafeWaitHandle targetHandle,
|
|
int dwDesiredAccess,
|
|
bool bInheritHandle,
|
|
int dwOptions
|
|
);
|
|
|
|
|
|
#if !FEATURE_PAL
|
|
/* Unused
|
|
[DllImport(ExternDll.Advapi32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern bool LogonUser(
|
|
[MarshalAs(UnmanagedType.LPTStr)]
|
|
string lpszUsername,
|
|
[MarshalAs(UnmanagedType.LPTStr)]
|
|
string lpszDomain,
|
|
[MarshalAs(UnmanagedType.LPTStr)]
|
|
string lpszPassword,
|
|
int dwLogonType,
|
|
int dwLogonProvider,
|
|
out IntPtr phToken
|
|
);
|
|
*/
|
|
[DllImport(ExternDll.Advapi32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern bool OpenProcessToken(HandleRef ProcessHandle, int DesiredAccess, out IntPtr TokenHandle);
|
|
[DllImport(ExternDll.Advapi32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=false)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool LookupPrivilegeValue([MarshalAs(UnmanagedType.LPTStr)] string lpSystemName, [MarshalAs(UnmanagedType.LPTStr)] string lpName, out LUID lpLuid);
|
|
[DllImport(ExternDll.Advapi32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern bool AdjustTokenPrivileges(
|
|
HandleRef TokenHandle,
|
|
bool DisableAllPrivileges,
|
|
TokenPrivileges NewState,
|
|
int BufferLength,
|
|
IntPtr PreviousState,
|
|
IntPtr ReturnLength
|
|
);
|
|
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto, BestFitMapping=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern int GetWindowText(HandleRef hWnd, StringBuilder lpString, int nMaxCount);
|
|
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern int GetWindowTextLength(HandleRef hWnd);
|
|
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern bool IsWindowVisible(HandleRef hWnd);
|
|
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern IntPtr SendMessageTimeout(HandleRef hWnd, int msg, IntPtr wParam, IntPtr lParam, int flags, int timeout, out IntPtr pdwResult);
|
|
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern int GetWindowLong(HandleRef hWnd, int nIndex);
|
|
[DllImport(ExternDll.User32, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern int PostMessage(HandleRef hwnd, int msg, IntPtr wparam, IntPtr lparam);
|
|
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.Process)]
|
|
public static extern IntPtr GetWindow(HandleRef hWnd, int uCmd);
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class NtModuleInfo {
|
|
public IntPtr BaseOfDll = (IntPtr)0;
|
|
public int SizeOfImage = 0;
|
|
public IntPtr EntryPoint = (IntPtr)0;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class WinProcessEntry {
|
|
public int dwSize = 0;
|
|
public int cntUsage = 0;
|
|
public int th32ProcessID = 0;
|
|
public IntPtr th32DefaultHeapID = (IntPtr)0;
|
|
public int th32ModuleID = 0;
|
|
public int cntThreads = 0;
|
|
public int th32ParentProcessID = 0;
|
|
public int pcPriClassBase = 0;
|
|
public int dwFlags = 0;
|
|
//[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
|
|
//public string fileName;
|
|
//byte fileName[260];
|
|
public const int sizeofFileName = 260;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class WinThreadEntry {
|
|
public int dwSize = 0;
|
|
public int cntUsage = 0;
|
|
public int th32ThreadID = 0;
|
|
public int th32OwnerProcessID = 0;
|
|
public int tpBasePri = 0;
|
|
public int tpDeltaPri = 0;
|
|
public int dwFlags = 0;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class WinModuleEntry { // MODULEENTRY32
|
|
public int dwSize = 0;
|
|
public int th32ModuleID = 0;
|
|
public int th32ProcessID = 0;
|
|
public int GlblcntUsage = 0;
|
|
public int ProccntUsage = 0;
|
|
public IntPtr modBaseAddr = (IntPtr)0;
|
|
public int modBaseSize = 0;
|
|
public IntPtr hModule = (IntPtr)0;
|
|
//byte moduleName[256];
|
|
//[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)]
|
|
//public string moduleName;
|
|
//[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
|
|
//public string fileName;
|
|
//byte fileName[260];
|
|
public const int sizeofModuleName = 256;
|
|
public const int sizeofFileName = 260;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class ShellExecuteInfo {
|
|
public int cbSize = 0;
|
|
public int fMask = 0;
|
|
public IntPtr hwnd = (IntPtr)0;
|
|
public IntPtr lpVerb = (IntPtr)0;
|
|
public IntPtr lpFile = (IntPtr)0;
|
|
public IntPtr lpParameters = (IntPtr)0;
|
|
public IntPtr lpDirectory = (IntPtr)0;
|
|
public int nShow = 0;
|
|
public IntPtr hInstApp = (IntPtr)0;
|
|
public IntPtr lpIDList = (IntPtr)0;
|
|
public IntPtr lpClass = (IntPtr)0;
|
|
public IntPtr hkeyClass = (IntPtr)0;
|
|
public int dwHotKey = 0;
|
|
public IntPtr hIcon = (IntPtr)0;
|
|
public IntPtr hProcess = (IntPtr)0;
|
|
|
|
[ResourceExposure(ResourceScope.Machine)]
|
|
public ShellExecuteInfo() {
|
|
cbSize = Marshal.SizeOf(this);
|
|
}
|
|
}
|
|
|
|
// NT definition
|
|
// typedef struct _PROCESS_BASIC_INFORMATION {
|
|
// NTSTATUS ExitStatus; (LONG)
|
|
// PPEB PebBaseAddress;
|
|
// ULONG_PTR AffinityMask;
|
|
// KPRIORITY BasePriority; (LONG)
|
|
// ULONG_PTR UniqueProcessId;
|
|
// ULONG_PTR InheritedFromUniqueProcessId;
|
|
//} PROCESS_BASIC_INFORMATION;
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class NtProcessBasicInfo {
|
|
public int ExitStatus = 0;
|
|
public IntPtr PebBaseAddress = (IntPtr)0;
|
|
public IntPtr AffinityMask = (IntPtr)0;
|
|
public int BasePriority = 0;
|
|
public IntPtr UniqueProcessId = (IntPtr)0;
|
|
public IntPtr InheritedFromUniqueProcessId = (IntPtr)0;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal struct LUID {
|
|
public int LowPart;
|
|
public int HighPart;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class TokenPrivileges {
|
|
public int PrivilegeCount = 1;
|
|
public LUID Luid;
|
|
public int Attributes = 0;
|
|
}
|
|
|
|
internal delegate bool EnumThreadWindowsCallback(IntPtr hWnd, IntPtr lParam);
|
|
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses")]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class SYSTEMTIME {
|
|
public short wYear;
|
|
public short wMonth;
|
|
public short wDayOfWeek;
|
|
public short wDay;
|
|
public short wHour;
|
|
public short wMinute;
|
|
public short wSecond;
|
|
public short wMilliseconds;
|
|
|
|
public override string ToString() {
|
|
return "[SYSTEMTIME: "
|
|
+ wDay.ToString(CultureInfo.CurrentCulture) + "/" + wMonth.ToString(CultureInfo.CurrentCulture) + "/" + wYear.ToString(CultureInfo.CurrentCulture)
|
|
+ " " + wHour.ToString(CultureInfo.CurrentCulture) + ":" + wMinute.ToString(CultureInfo.CurrentCulture) + ":" + wSecond.ToString(CultureInfo.CurrentCulture)
|
|
+ "]";
|
|
}
|
|
}
|
|
|
|
public const int NtPerfCounterSizeDword = 0x00000000;
|
|
public const int NtPerfCounterSizeLarge = 0x00000100;
|
|
|
|
public const int SHGFI_USEFILEATTRIBUTES = 0x000000010; // use passed dwFileAttribute
|
|
public const int SHGFI_TYPENAME = 0x000000400;
|
|
|
|
public const int NtQueryProcessBasicInfo = 0;
|
|
public const int NtQuerySystemProcessInformation = 5;
|
|
|
|
public const int SEE_MASK_CLASSNAME = 0x00000001; // Note CLASSKEY overrides CLASSNAME
|
|
public const int SEE_MASK_CLASSKEY = 0x00000003;
|
|
public const int SEE_MASK_IDLIST = 0x00000004; // Note INVOKEIDLIST overrides IDLIST
|
|
public const int SEE_MASK_INVOKEIDLIST = 0x0000000c;
|
|
public const int SEE_MASK_ICON = 0x00000010;
|
|
public const int SEE_MASK_HOTKEY = 0x00000020;
|
|
public const int SEE_MASK_NOCLOSEPROCESS = 0x00000040;
|
|
public const int SEE_MASK_CONNECTNETDRV = 0x00000080;
|
|
public const int SEE_MASK_FLAG_DDEWAIT = 0x00000100;
|
|
public const int SEE_MASK_DOENVSUBST = 0x00000200;
|
|
public const int SEE_MASK_FLAG_NO_UI = 0x00000400;
|
|
public const int SEE_MASK_UNICODE = 0x00004000;
|
|
public const int SEE_MASK_NO_CONSOLE = 0x00008000;
|
|
public const int SEE_MASK_ASYNCOK = 0x00100000;
|
|
|
|
public const int TH32CS_SNAPHEAPLIST = 0x00000001;
|
|
public const int TH32CS_SNAPPROCESS = 0x00000002;
|
|
public const int TH32CS_SNAPTHREAD = 0x00000004;
|
|
public const int TH32CS_SNAPMODULE = 0x00000008;
|
|
public const int TH32CS_INHERIT = unchecked((int)0x80000000);
|
|
|
|
#endif // !FEATURE_PAL
|
|
|
|
public const int PROCESS_TERMINATE = 0x0001;
|
|
public const int PROCESS_CREATE_THREAD = 0x0002;
|
|
public const int PROCESS_SET_SESSIONID = 0x0004;
|
|
public const int PROCESS_VM_OPERATION = 0x0008;
|
|
public const int PROCESS_VM_READ = 0x0010;
|
|
public const int PROCESS_VM_WRITE = 0x0020;
|
|
public const int PROCESS_DUP_HANDLE = 0x0040;
|
|
public const int PROCESS_CREATE_PROCESS = 0x0080;
|
|
public const int PROCESS_SET_QUOTA = 0x0100;
|
|
public const int PROCESS_SET_INFORMATION = 0x0200;
|
|
public const int PROCESS_QUERY_INFORMATION = 0x0400;
|
|
public const int PROCESS_QUERY_LIMITED_INFORMATION = 0x1000;
|
|
public const int STANDARD_RIGHTS_REQUIRED = 0x000F0000;
|
|
public const int SYNCHRONIZE = 0x00100000;
|
|
public const int PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF;
|
|
|
|
#if !FEATURE_PAL
|
|
|
|
public const int THREAD_TERMINATE = 0x0001;
|
|
public const int THREAD_SUSPEND_RESUME = 0x0002;
|
|
public const int THREAD_GET_CONTEXT = 0x0008;
|
|
public const int THREAD_SET_CONTEXT = 0x0010;
|
|
public const int THREAD_SET_INFORMATION = 0x0020;
|
|
public const int THREAD_QUERY_INFORMATION = 0x0040;
|
|
public const int THREAD_SET_THREAD_TOKEN = 0x0080;
|
|
public const int THREAD_IMPERSONATE = 0x0100;
|
|
public const int THREAD_DIRECT_IMPERSONATION = 0x0200;
|
|
|
|
public static readonly IntPtr HKEY_LOCAL_MACHINE = unchecked((IntPtr)(int)0x80000002);
|
|
public const int REG_BINARY = 3;
|
|
public const int REG_MULTI_SZ = 7;
|
|
|
|
public const int READ_CONTROL = 0x00020000;
|
|
public const int STANDARD_RIGHTS_READ = READ_CONTROL;
|
|
|
|
public const int KEY_QUERY_VALUE = 0x0001;
|
|
public const int KEY_ENUMERATE_SUB_KEYS = 0x0008;
|
|
public const int KEY_NOTIFY = 0x0010;
|
|
|
|
public const int KEY_READ =((STANDARD_RIGHTS_READ |
|
|
KEY_QUERY_VALUE |
|
|
KEY_ENUMERATE_SUB_KEYS |
|
|
KEY_NOTIFY)
|
|
&
|
|
(~SYNCHRONIZE));
|
|
|
|
#endif // !FEATURE_PAL
|
|
#endif // !SILVERLIGHT
|
|
|
|
#if !SILVERLIGHT || FEATURE_NETCORE
|
|
public const int ERROR_BROKEN_PIPE = 109;
|
|
public const int ERROR_NO_DATA = 232;
|
|
public const int ERROR_HANDLE_EOF = 38;
|
|
public const int ERROR_IO_INCOMPLETE = 996;
|
|
public const int ERROR_IO_PENDING = 997;
|
|
public const int ERROR_FILE_EXISTS = 0x50;
|
|
public const int ERROR_FILENAME_EXCED_RANGE = 0xCE; // filename too long.
|
|
public const int ERROR_MORE_DATA = 234;
|
|
public const int ERROR_CANCELLED = 1223;
|
|
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_HANDLE = 6;
|
|
public const int ERROR_NOT_ENOUGH_MEMORY = 8;
|
|
public const int ERROR_BAD_COMMAND = 22;
|
|
public const int ERROR_SHARING_VIOLATION = 32;
|
|
public const int ERROR_OPERATION_ABORTED = 995;
|
|
public const int ERROR_NO_ASSOCIATION = 1155;
|
|
public const int ERROR_DLL_NOT_FOUND = 1157;
|
|
public const int ERROR_DDE_FAIL = 1156;
|
|
public const int ERROR_INVALID_PARAMETER = 87;
|
|
public const int ERROR_PARTIAL_COPY = 299;
|
|
public const int ERROR_SUCCESS = 0;
|
|
public const int ERROR_ALREADY_EXISTS = 183;
|
|
public const int ERROR_COUNTER_TIMEOUT = 1121;
|
|
#endif // !SILVERLIGHT || FEATURE_NETCORE
|
|
|
|
#if !SILVERLIGHT
|
|
public const int DUPLICATE_CLOSE_SOURCE = 1;
|
|
public const int DUPLICATE_SAME_ACCESS = 2;
|
|
|
|
#if !FEATURE_PAL
|
|
public const int RPC_S_SERVER_UNAVAILABLE = 1722;
|
|
public const int RPC_S_CALL_FAILED = 1726;
|
|
|
|
public const int PDH_NO_DATA = unchecked((int) 0x800007D5);
|
|
public const int PDH_CALC_NEGATIVE_DENOMINATOR = unchecked((int) 0x800007D6);
|
|
public const int PDH_CALC_NEGATIVE_VALUE = unchecked((int) 0x800007D8);
|
|
|
|
|
|
public const int SE_ERR_FNF = 2;
|
|
public const int SE_ERR_PNF = 3;
|
|
public const int SE_ERR_ACCESSDENIED = 5;
|
|
public const int SE_ERR_OOM = 8;
|
|
public const int SE_ERR_DLLNOTFOUND = 32;
|
|
public const int SE_ERR_SHARE = 26;
|
|
public const int SE_ERR_ASSOCINCOMPLETE = 27;
|
|
public const int SE_ERR_DDETIMEOUT = 28;
|
|
public const int SE_ERR_DDEFAIL = 29;
|
|
public const int SE_ERR_DDEBUSY = 30;
|
|
public const int SE_ERR_NOASSOC = 31;
|
|
|
|
public const int SE_PRIVILEGE_ENABLED = 2;
|
|
|
|
public const int LOGON32_LOGON_BATCH = 4;
|
|
public const int LOGON32_PROVIDER_DEFAULT = 0;
|
|
public const int LOGON32_LOGON_INTERACTIVE = 2;
|
|
|
|
public const int TOKEN_ADJUST_PRIVILEGES = 0x20;
|
|
public const int TOKEN_QUERY = 0x08;
|
|
|
|
public const int CREATE_NO_WINDOW = 0x08000000;
|
|
public const int CREATE_SUSPENDED = 0x00000004;
|
|
public const int CREATE_UNICODE_ENVIRONMENT = 0x00000400;
|
|
|
|
public const int SMTO_ABORTIFHUNG = 0x0002;
|
|
public const int GWL_STYLE = (-16);
|
|
public const int GCL_WNDPROC = (-24);
|
|
public const int GWL_WNDPROC = (-4);
|
|
public const int WS_DISABLED = 0x08000000;
|
|
public const int WM_NULL = 0x0000;
|
|
public const int WM_CLOSE = 0x0010;
|
|
public const int SW_SHOWNORMAL = 1;
|
|
public const int SW_NORMAL = 1;
|
|
public const int SW_SHOWMINIMIZED = 2;
|
|
public const int SW_SHOWMAXIMIZED = 3;
|
|
public const int SW_MAXIMIZE = 3;
|
|
public const int SW_SHOWNOACTIVATE = 4;
|
|
public const int SW_SHOW = 5;
|
|
public const int SW_MINIMIZE = 6;
|
|
public const int SW_SHOWMINNOACTIVE = 7;
|
|
public const int SW_SHOWNA = 8;
|
|
public const int SW_RESTORE = 9;
|
|
public const int SW_SHOWDEFAULT = 10;
|
|
public const int SW_MAX = 10;
|
|
public const int GW_OWNER = 4;
|
|
public const int WHITENESS = 0x00FF0062;
|
|
|
|
public const int
|
|
VS_FILE_INFO = 16,
|
|
VS_VERSION_INFO = 1,
|
|
VS_USER_DEFINED = 100,
|
|
VS_FFI_SIGNATURE = unchecked((int)0xFEEF04BD),
|
|
VS_FFI_STRUCVERSION = 0x00010000,
|
|
VS_FFI_FILEFLAGSMASK = 0x0000003F,
|
|
VS_FF_DEBUG = 0x00000001,
|
|
VS_FF_PRERELEASE = 0x00000002,
|
|
VS_FF_PATCHED = 0x00000004,
|
|
VS_FF_PRIVATEBUILD = 0x00000008,
|
|
VS_FF_INFOINFERRED = 0x00000010,
|
|
VS_FF_SPECIALBUILD = 0x00000020,
|
|
VFT_UNKNOWN = 0x00000000,
|
|
VFT_APP = 0x00000001,
|
|
VFT_DLL = 0x00000002,
|
|
VFT_DRV = 0x00000003,
|
|
VFT_FONT = 0x00000004,
|
|
VFT_VXD = 0x00000005,
|
|
VFT_STATIC_LIB = 0x00000007,
|
|
VFT2_UNKNOWN = 0x00000000,
|
|
VFT2_DRV_PRINTER = 0x00000001,
|
|
VFT2_DRV_KEYBOARD = 0x00000002,
|
|
VFT2_DRV_LANGUAGE = 0x00000003,
|
|
VFT2_DRV_DISPLAY = 0x00000004,
|
|
VFT2_DRV_MOUSE = 0x00000005,
|
|
VFT2_DRV_NETWORK = 0x00000006,
|
|
VFT2_DRV_SYSTEM = 0x00000007,
|
|
VFT2_DRV_INSTALLABLE = 0x00000008,
|
|
VFT2_DRV_SOUND = 0x00000009,
|
|
VFT2_DRV_COMM = 0x0000000A,
|
|
VFT2_DRV_INPUTMETHOD = 0x0000000B,
|
|
VFT2_FONT_RASTER = 0x00000001,
|
|
VFT2_FONT_VECTOR = 0x00000002,
|
|
VFT2_FONT_TRUETYPE = 0x00000003;
|
|
|
|
// from Windows Forms nativemethods.cs
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class VS_FIXEDFILEINFO {
|
|
public int dwSignature = 0;
|
|
public int dwStructVersion = 0;
|
|
public int dwFileVersionMS = 0;
|
|
public int dwFileVersionLS = 0;
|
|
public int dwProductVersionMS = 0;
|
|
public int dwProductVersionLS = 0;
|
|
public int dwFileFlagsMask = 0;
|
|
public int dwFileFlags = 0;
|
|
public int dwFileOS = 0;
|
|
public int dwFileType = 0;
|
|
public int dwFileSubtype = 0;
|
|
public int dwFileDateMS = 0;
|
|
public int dwFileDateLS = 0;
|
|
}
|
|
|
|
public const int
|
|
GMEM_FIXED = 0x0000,
|
|
GMEM_MOVEABLE = 0x0002,
|
|
GMEM_NOCOMPACT = 0x0010,
|
|
GMEM_NODISCARD = 0x0020,
|
|
GMEM_ZEROINIT = 0x0040,
|
|
GMEM_MODIFY = 0x0080,
|
|
GMEM_DISCARDABLE = 0x0100,
|
|
GMEM_NOT_BANKED = 0x1000,
|
|
GMEM_SHARE = 0x2000,
|
|
GMEM_DDESHARE = 0x2000,
|
|
GMEM_NOTIFY = 0x4000,
|
|
GMEM_LOWER = 0x1000,
|
|
GMEM_VALID_FLAGS = 0x7F72,
|
|
GMEM_INVALID_HANDLE = unchecked((int)0x8000),
|
|
GHND = (0x0002|0x0040),
|
|
GPTR = (0x0000|0x0040),
|
|
GMEM_DISCARDED = 0x4000,
|
|
GMEM_LOCKCOUNT = 0x00FF;
|
|
|
|
public const int UOI_NAME = 2;
|
|
public const int UOI_TYPE = 3;
|
|
public const int UOI_USER_SID = 4;
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class USEROBJECTFLAGS {
|
|
public int fInherit = 0;
|
|
public int fReserved = 0;
|
|
public int dwFlags = 0;
|
|
}
|
|
|
|
public const int VER_PLATFORM_WIN32_NT = 2;
|
|
|
|
internal static class Util {
|
|
public static int HIWORD(int n) {
|
|
return (n >> 16) & 0xffff;
|
|
}
|
|
|
|
public static int LOWORD(int n) {
|
|
return n & 0xffff;
|
|
}
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal struct MEMORY_BASIC_INFORMATION {
|
|
internal IntPtr BaseAddress;
|
|
internal IntPtr AllocationBase;
|
|
internal uint AllocationProtect;
|
|
internal UIntPtr RegionSize;
|
|
internal uint State;
|
|
internal uint Protect;
|
|
internal uint Type;
|
|
}
|
|
|
|
[DllImport(ExternDll.Kernel32, SetLastError=true)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
unsafe internal static extern IntPtr VirtualQuery(SafeFileMapViewHandle address, ref MEMORY_BASIC_INFORMATION buffer, IntPtr sizeOfBuffer);
|
|
|
|
#endif // !FEATURE_PAL
|
|
#endif // !SILVERLIGHT
|
|
|
|
}
|
|
|
|
}
|