Minor Quality improvements
This commit is contained in:
parent
01abd93de8
commit
c8db67a695
187
W32/Hooks.cs
187
W32/Hooks.cs
|
@ -1,187 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Drawing;
|
||||
|
||||
namespace CC_Functions.W32
|
||||
{
|
||||
public sealed class KeyboardHookEventArgs : EventArgs
|
||||
{
|
||||
public KeyboardHookEventArgs(Keys key)
|
||||
{
|
||||
Key = key;
|
||||
}
|
||||
|
||||
public Keys Key { get; }
|
||||
public override string ToString() => Key.ToString();
|
||||
}
|
||||
|
||||
public sealed class KeyboardHook : IDisposable
|
||||
{
|
||||
public void Dispose()
|
||||
{
|
||||
instances.Remove(this);
|
||||
if (instances.Count == 0)
|
||||
UnhookWindowsHookEx(_hookID);
|
||||
}
|
||||
|
||||
private static List<KeyboardHook> instances = new List<KeyboardHook>();
|
||||
private const int WH_KEYBOARD_LL = 13;
|
||||
private const int WM_KEYDOWN = 0x0100;
|
||||
private static LowLevelKeyboardProc _proc = HookCallback;
|
||||
private static IntPtr _hookID = IntPtr.Zero;
|
||||
public delegate void keyPress(KeyboardHookEventArgs _args);
|
||||
public event keyPress OnKeyPress;
|
||||
|
||||
public KeyboardHook()
|
||||
{
|
||||
if (instances.Count == 0)
|
||||
_hookID = SetHook(_proc);
|
||||
instances.Add(this);
|
||||
}
|
||||
|
||||
private IntPtr SetHook(LowLevelKeyboardProc proc)
|
||||
{
|
||||
using (Process curProcess = Process.GetCurrentProcess())
|
||||
using (ProcessModule curModule = curProcess.MainModule)
|
||||
{
|
||||
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
|
||||
}
|
||||
}
|
||||
|
||||
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
|
||||
{
|
||||
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
|
||||
{
|
||||
int vkCode = Marshal.ReadInt32(lParam);
|
||||
for (int i = 0; i < instances.Count; i++)
|
||||
{
|
||||
instances[i].OnKeyPress?.Invoke(new KeyboardHookEventArgs((Keys)vkCode));
|
||||
}
|
||||
}
|
||||
return CallNextHookEx(_hookID, nCode, wParam, lParam);
|
||||
}
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr GetModuleHandle(string lpModuleName);
|
||||
}
|
||||
|
||||
public class MouseHookEventArgs : EventArgs {
|
||||
public MouseHookEventArgs(Point point, MouseHook.MouseMessages message)
|
||||
{
|
||||
Point = point;
|
||||
Message = message;
|
||||
}
|
||||
|
||||
public Point Point { get; }
|
||||
public MouseHook.MouseMessages Message { get; }
|
||||
public override string ToString()
|
||||
{
|
||||
return Message.ToString() + "; " + Point.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public class MouseHook : IDisposable
|
||||
{
|
||||
public void Dispose()
|
||||
{
|
||||
instances.Remove(this);
|
||||
if (instances.Count == 0)
|
||||
UnhookWindowsHookEx(_hookID);
|
||||
}
|
||||
|
||||
private static List<MouseHook> instances = new List<MouseHook>();
|
||||
private static LowLevelMouseProc _proc = HookCallback;
|
||||
private static IntPtr _hookID = IntPtr.Zero;
|
||||
public delegate void mouseEvent(MouseHookEventArgs _args);
|
||||
public event mouseEvent OnMouse;
|
||||
|
||||
public MouseHook()
|
||||
{
|
||||
if (instances.Count == 0)
|
||||
_hookID = SetHook(_proc);
|
||||
instances.Add(this);
|
||||
}
|
||||
|
||||
private static IntPtr SetHook(LowLevelMouseProc proc)
|
||||
{
|
||||
using (Process curProcess = Process.GetCurrentProcess())
|
||||
using (ProcessModule curModule = curProcess.MainModule)
|
||||
{
|
||||
return SetWindowsHookEx(WH_MOUSE_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
|
||||
}
|
||||
}
|
||||
|
||||
private delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam);
|
||||
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
|
||||
{
|
||||
if (nCode >= 0)
|
||||
{
|
||||
MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
|
||||
for (int i = 0; i < instances.Count; i++)
|
||||
{
|
||||
instances[i].OnMouse?.Invoke(new MouseHookEventArgs(new Point(hookStruct.pt.x, hookStruct.pt.y), (MouseMessages)wParam));
|
||||
}
|
||||
}
|
||||
return CallNextHookEx(_hookID, nCode, wParam, lParam);
|
||||
}
|
||||
|
||||
private const int WH_MOUSE_LL = 14;
|
||||
public enum MouseMessages
|
||||
{
|
||||
WM_LBUTTONDOWN = 0x0201,
|
||||
WM_LBUTTONUP = 0x0202,
|
||||
WM_MOUSEMOVE = 0x0200,
|
||||
WM_MOUSEWHEEL = 0x020A,
|
||||
WM_RBUTTONDOWN = 0x0204,
|
||||
WM_RBUTTONUP = 0x0205
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct POINT
|
||||
{
|
||||
public int x;
|
||||
public int y;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct MSLLHOOKSTRUCT
|
||||
{
|
||||
public POINT pt;
|
||||
public uint mouseData;
|
||||
public uint flags;
|
||||
public uint time;
|
||||
public IntPtr dwExtraInfo;
|
||||
}
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr GetModuleHandle(string lpModuleName);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace CC_Functions.W32
|
||||
{
|
||||
public sealed class KeyboardHook : IDisposable
|
||||
{
|
||||
public void Dispose()
|
||||
{
|
||||
instances.Remove(this);
|
||||
if (instances.Count == 0)
|
||||
UnhookWindowsHookEx(_hookID);
|
||||
}
|
||||
|
||||
private static List<KeyboardHook> instances = new List<KeyboardHook>();
|
||||
private const int WH_KEYBOARD_LL = 13;
|
||||
private const int WM_KEYDOWN = 0x0100;
|
||||
private static LowLevelKeyboardProc _proc = HookCallback;
|
||||
private static IntPtr _hookID = IntPtr.Zero;
|
||||
public delegate void keyPress(KeyboardHookEventArgs _args);
|
||||
public event keyPress OnKeyPress;
|
||||
|
||||
public KeyboardHook()
|
||||
{
|
||||
if (instances.Count == 0)
|
||||
_hookID = SetHook(_proc);
|
||||
instances.Add(this);
|
||||
}
|
||||
|
||||
private IntPtr SetHook(LowLevelKeyboardProc proc)
|
||||
{
|
||||
using (Process curProcess = Process.GetCurrentProcess())
|
||||
using (ProcessModule curModule = curProcess.MainModule)
|
||||
{
|
||||
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
|
||||
}
|
||||
}
|
||||
|
||||
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
|
||||
{
|
||||
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
|
||||
{
|
||||
int vkCode = Marshal.ReadInt32(lParam);
|
||||
for (int i = 0; i < instances.Count; i++)
|
||||
{
|
||||
instances[i].OnKeyPress?.Invoke(new KeyboardHookEventArgs((Keys)vkCode));
|
||||
}
|
||||
}
|
||||
return CallNextHookEx(_hookID, nCode, wParam, lParam);
|
||||
}
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
private static extern IntPtr GetModuleHandle(string lpModuleName);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace CC_Functions.W32
|
||||
{
|
||||
public sealed class KeyboardHookEventArgs : EventArgs
|
||||
{
|
||||
public KeyboardHookEventArgs(Keys key)
|
||||
{
|
||||
Key = key;
|
||||
}
|
||||
|
||||
public Keys Key { get; }
|
||||
public override string ToString() => Key.ToString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Drawing;
|
||||
|
||||
namespace CC_Functions.W32
|
||||
{
|
||||
|
||||
public sealed class MouseHook : IDisposable
|
||||
{
|
||||
public void Dispose()
|
||||
{
|
||||
instances.Remove(this);
|
||||
if (instances.Count == 0)
|
||||
UnhookWindowsHookEx(_hookID);
|
||||
}
|
||||
|
||||
private static List<MouseHook> instances = new List<MouseHook>();
|
||||
private static LowLevelMouseProc _proc = HookCallback;
|
||||
private static IntPtr _hookID = IntPtr.Zero;
|
||||
public delegate void mouseEvent(MouseHookEventArgs _args);
|
||||
public event mouseEvent OnMouse;
|
||||
|
||||
public MouseHook()
|
||||
{
|
||||
if (instances.Count == 0)
|
||||
_hookID = SetHook(_proc);
|
||||
instances.Add(this);
|
||||
}
|
||||
|
||||
private static IntPtr SetHook(LowLevelMouseProc proc)
|
||||
{
|
||||
using (Process curProcess = Process.GetCurrentProcess())
|
||||
using (ProcessModule curModule = curProcess.MainModule)
|
||||
{
|
||||
return SetWindowsHookEx(WH_MOUSE_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
|
||||
}
|
||||
}
|
||||
|
||||
private delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam);
|
||||
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
|
||||
{
|
||||
if (nCode >= 0)
|
||||
{
|
||||
MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
|
||||
for (int i = 0; i < instances.Count; i++)
|
||||
{
|
||||
instances[i].OnMouse?.Invoke(new MouseHookEventArgs(new Point(hookStruct.pt.x, hookStruct.pt.y), (MouseMessages)wParam));
|
||||
}
|
||||
}
|
||||
return CallNextHookEx(_hookID, nCode, wParam, lParam);
|
||||
}
|
||||
|
||||
private const int WH_MOUSE_LL = 14;
|
||||
public enum MouseMessages
|
||||
{
|
||||
WM_LBUTTONDOWN = 0x0201,
|
||||
WM_LBUTTONUP = 0x0202,
|
||||
WM_MOUSEMOVE = 0x0200,
|
||||
WM_MOUSEWHEEL = 0x020A,
|
||||
WM_RBUTTONDOWN = 0x0204,
|
||||
WM_RBUTTONUP = 0x0205
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct POINT
|
||||
{
|
||||
public int x;
|
||||
public int y;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct MSLLHOOKSTRUCT
|
||||
{
|
||||
public POINT pt;
|
||||
public uint mouseData;
|
||||
public uint flags;
|
||||
public uint time;
|
||||
public IntPtr dwExtraInfo;
|
||||
}
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
private static extern IntPtr GetModuleHandle(string lpModuleName);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Drawing;
|
||||
|
||||
namespace CC_Functions.W32
|
||||
{
|
||||
public class MouseHookEventArgs : EventArgs {
|
||||
public MouseHookEventArgs(Point point, MouseHook.MouseMessages message)
|
||||
{
|
||||
Point = point;
|
||||
Message = message;
|
||||
}
|
||||
|
||||
public Point Point { get; }
|
||||
public MouseHook.MouseMessages Message { get; }
|
||||
public override string ToString()
|
||||
{
|
||||
return Message.ToString() + "; " + Point.ToString();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -22,7 +22,7 @@ namespace CC_Functions.W32
|
|||
state |= 1;
|
||||
if ((retVal & 1) == 1)
|
||||
state |= 2;
|
||||
return 1 == (state & 1);
|
||||
return (state & 1) == 1;
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
|
|
@ -15,51 +15,39 @@ namespace CC_Functions.W32
|
|||
{
|
||||
if (!Enum.IsDefined(typeof(SecurityEntity), securityEntity))
|
||||
throw new InvalidEnumArgumentException("securityEntity", (int)securityEntity, typeof(SecurityEntity));
|
||||
|
||||
var securityEntityValue = GetSecurityEntityValue(securityEntity);
|
||||
try
|
||||
{
|
||||
var locallyUniqueIdentifier = new NativeMethods.LUID();
|
||||
|
||||
if (NativeMethods.LookupPrivilegeValue(null, securityEntityValue, ref locallyUniqueIdentifier))
|
||||
{
|
||||
var TOKEN_PRIVILEGES = new NativeMethods.TOKEN_PRIVILEGES();
|
||||
TOKEN_PRIVILEGES.PrivilegeCount = 1;
|
||||
TOKEN_PRIVILEGES.Attributes = NativeMethods.SE_PRIVILEGE_ENABLED;
|
||||
TOKEN_PRIVILEGES.Luid = locallyUniqueIdentifier;
|
||||
|
||||
var TOKEN_PRIVILEGES = new NativeMethods.TOKEN_PRIVILEGES
|
||||
{
|
||||
PrivilegeCount = 1,
|
||||
Attributes = NativeMethods.SE_PRIVILEGE_ENABLED,
|
||||
Luid = locallyUniqueIdentifier
|
||||
};
|
||||
var tokenHandle = IntPtr.Zero;
|
||||
try
|
||||
{
|
||||
var currentProcess = NativeMethods.GetCurrentProcess();
|
||||
if (NativeMethods.OpenProcessToken(currentProcess, NativeMethods.TOKEN_ADJUST_PRIVILEGES | NativeMethods.TOKEN_QUERY, out tokenHandle))
|
||||
{
|
||||
if (NativeMethods.AdjustTokenPrivileges(tokenHandle, false,
|
||||
ref TOKEN_PRIVILEGES,
|
||||
1024, IntPtr.Zero, IntPtr.Zero))
|
||||
if (NativeMethods.AdjustTokenPrivileges(tokenHandle, false, ref TOKEN_PRIVILEGES, 1024, IntPtr.Zero, IntPtr.Zero))
|
||||
{
|
||||
var lastError = Marshal.GetLastWin32Error();
|
||||
if (lastError == NativeMethods.ERROR_NOT_ALL_ASSIGNED)
|
||||
if (Marshal.GetLastWin32Error() == NativeMethods.ERROR_NOT_ALL_ASSIGNED)
|
||||
{
|
||||
var win32Exception = new Win32Exception();
|
||||
throw new InvalidOperationException("AdjustTokenPrivileges failed.", win32Exception);
|
||||
throw new InvalidOperationException("AdjustTokenPrivileges failed.", new Win32Exception());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var win32Exception = new Win32Exception();
|
||||
throw new InvalidOperationException("AdjustTokenPrivileges failed.", win32Exception);
|
||||
throw new InvalidOperationException("AdjustTokenPrivileges failed.", new Win32Exception());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var win32Exception = new Win32Exception();
|
||||
|
||||
var exceptionMessage = string.Format(CultureInfo.InvariantCulture,
|
||||
"OpenProcessToken failed. CurrentProcess: {0}",
|
||||
currentProcess.ToInt32());
|
||||
|
||||
throw new InvalidOperationException(exceptionMessage, win32Exception);
|
||||
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "OpenProcessToken failed. CurrentProcess: {0}", currentProcess.ToInt32()), new Win32Exception());
|
||||
}
|
||||
}
|
||||
finally
|
||||
|
@ -70,22 +58,12 @@ namespace CC_Functions.W32
|
|||
}
|
||||
else
|
||||
{
|
||||
var win32Exception = new Win32Exception();
|
||||
|
||||
var exceptionMessage = string.Format(CultureInfo.InvariantCulture,
|
||||
"LookupPrivilegeValue failed. SecurityEntityValue: {0}",
|
||||
securityEntityValue);
|
||||
|
||||
throw new InvalidOperationException(exceptionMessage, win32Exception);
|
||||
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "LookupPrivilegeValue failed. SecurityEntityValue: {0}", securityEntityValue), new Win32Exception());
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
var exceptionMessage = string.Format(CultureInfo.InvariantCulture,
|
||||
"GrandPrivilege failed. SecurityEntity: {0}",
|
||||
securityEntityValue);
|
||||
|
||||
throw new InvalidOperationException(exceptionMessage, e);
|
||||
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "GrantPrivilege failed. SecurityEntity: {0}", securityEntityValue), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -169,113 +147,101 @@ namespace CC_Functions.W32
|
|||
throw new ArgumentOutOfRangeException(typeof(SecurityEntity).Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum SecurityEntity
|
||||
{
|
||||
SE_CREATE_TOKEN_NAME,
|
||||
SE_ASSIGNPRIMARYTOKEN_NAME,
|
||||
SE_LOCK_MEMORY_NAME,
|
||||
SE_INCREASE_QUOTA_NAME,
|
||||
SE_UNSOLICITED_INPUT_NAME,
|
||||
SE_MACHINE_ACCOUNT_NAME,
|
||||
SE_TCB_NAME,
|
||||
SE_SECURITY_NAME,
|
||||
SE_TAKE_OWNERSHIP_NAME,
|
||||
SE_LOAD_DRIVER_NAME,
|
||||
SE_SYSTEM_PROFILE_NAME,
|
||||
SE_SYSTEMTIME_NAME,
|
||||
SE_PROF_SINGLE_PROCESS_NAME,
|
||||
SE_INC_BASE_PRIORITY_NAME,
|
||||
SE_CREATE_PAGEFILE_NAME,
|
||||
SE_CREATE_PERMANENT_NAME,
|
||||
SE_BACKUP_NAME,
|
||||
SE_RESTORE_NAME,
|
||||
SE_SHUTDOWN_NAME,
|
||||
SE_DEBUG_NAME,
|
||||
SE_AUDIT_NAME,
|
||||
SE_SYSTEM_ENVIRONMENT_NAME,
|
||||
SE_CHANGE_NOTIFY_NAME,
|
||||
SE_REMOTE_SHUTDOWN_NAME,
|
||||
SE_UNDOCK_NAME,
|
||||
SE_SYNC_AGENT_NAME,
|
||||
SE_ENABLE_DELEGATION_NAME,
|
||||
SE_MANAGE_VOLUME_NAME,
|
||||
SE_IMPERSONATE_NAME,
|
||||
SE_CREATE_GLOBAL_NAME,
|
||||
SE_CREATE_SYMBOLIC_LINK_NAME,
|
||||
SE_INC_WORKING_SET_NAME,
|
||||
SE_RELABEL_NAME,
|
||||
SE_TIME_ZONE_NAME,
|
||||
SE_TRUSTED_CREDMAN_ACCESS_NAME
|
||||
}
|
||||
|
||||
internal static class NativeMethods
|
||||
{
|
||||
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern bool LookupPrivilegeValue(string lpsystemname, string lpname, [MarshalAs(UnmanagedType.Struct)] ref LUID lpLuid);
|
||||
|
||||
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern bool AdjustTokenPrivileges(IntPtr tokenhandle,
|
||||
[MarshalAs(UnmanagedType.Bool)] bool disableAllPrivileges,
|
||||
[MarshalAs(UnmanagedType.Struct)]ref TOKEN_PRIVILEGES newstate,
|
||||
uint bufferlength, IntPtr previousState, IntPtr returnlength);
|
||||
|
||||
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
|
||||
|
||||
internal const int ERROR_NOT_ALL_ASSIGNED = 1300;
|
||||
|
||||
internal const UInt32 STANDARD_RIGHTS_REQUIRED = 0x000F0000;
|
||||
internal const UInt32 STANDARD_RIGHTS_READ = 0x00020000;
|
||||
internal const UInt32 TOKEN_ASSIGN_PRIMARY = 0x0001;
|
||||
internal const UInt32 TOKEN_DUPLICATE = 0x0002;
|
||||
internal const UInt32 TOKEN_IMPERSONATE = 0x0004;
|
||||
internal const UInt32 TOKEN_QUERY = 0x0008;
|
||||
internal const UInt32 TOKEN_QUERY_SOURCE = 0x0010;
|
||||
internal const UInt32 TOKEN_ADJUST_PRIVILEGES = 0x0020;
|
||||
internal const UInt32 TOKEN_ADJUST_GROUPS = 0x0040;
|
||||
internal const UInt32 TOKEN_ADJUST_DEFAULT = 0x0080;
|
||||
internal const UInt32 TOKEN_ADJUST_SESSIONID = 0x0100;
|
||||
internal const UInt32 TOKEN_READ = (STANDARD_RIGHTS_READ | TOKEN_QUERY);
|
||||
internal const UInt32 TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |
|
||||
TOKEN_ASSIGN_PRIMARY |
|
||||
TOKEN_DUPLICATE |
|
||||
TOKEN_IMPERSONATE |
|
||||
TOKEN_QUERY |
|
||||
TOKEN_QUERY_SOURCE |
|
||||
TOKEN_ADJUST_PRIVILEGES |
|
||||
TOKEN_ADJUST_GROUPS |
|
||||
TOKEN_ADJUST_DEFAULT |
|
||||
TOKEN_ADJUST_SESSIONID);
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
internal static extern IntPtr GetCurrentProcess();
|
||||
|
||||
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern bool OpenProcessToken(IntPtr processHandle,
|
||||
uint desiredAccesss,
|
||||
out IntPtr tokenHandle);
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern Boolean CloseHandle(IntPtr hObject);
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct LUID
|
||||
public enum SecurityEntity
|
||||
{
|
||||
internal Int32 LowPart;
|
||||
internal UInt32 HighPart;
|
||||
SE_CREATE_TOKEN_NAME,
|
||||
SE_ASSIGNPRIMARYTOKEN_NAME,
|
||||
SE_LOCK_MEMORY_NAME,
|
||||
SE_INCREASE_QUOTA_NAME,
|
||||
SE_UNSOLICITED_INPUT_NAME,
|
||||
SE_MACHINE_ACCOUNT_NAME,
|
||||
SE_TCB_NAME,
|
||||
SE_SECURITY_NAME,
|
||||
SE_TAKE_OWNERSHIP_NAME,
|
||||
SE_LOAD_DRIVER_NAME,
|
||||
SE_SYSTEM_PROFILE_NAME,
|
||||
SE_SYSTEMTIME_NAME,
|
||||
SE_PROF_SINGLE_PROCESS_NAME,
|
||||
SE_INC_BASE_PRIORITY_NAME,
|
||||
SE_CREATE_PAGEFILE_NAME,
|
||||
SE_CREATE_PERMANENT_NAME,
|
||||
SE_BACKUP_NAME,
|
||||
SE_RESTORE_NAME,
|
||||
SE_SHUTDOWN_NAME,
|
||||
SE_DEBUG_NAME,
|
||||
SE_AUDIT_NAME,
|
||||
SE_SYSTEM_ENVIRONMENT_NAME,
|
||||
SE_CHANGE_NOTIFY_NAME,
|
||||
SE_REMOTE_SHUTDOWN_NAME,
|
||||
SE_UNDOCK_NAME,
|
||||
SE_SYNC_AGENT_NAME,
|
||||
SE_ENABLE_DELEGATION_NAME,
|
||||
SE_MANAGE_VOLUME_NAME,
|
||||
SE_IMPERSONATE_NAME,
|
||||
SE_CREATE_GLOBAL_NAME,
|
||||
SE_CREATE_SYMBOLIC_LINK_NAME,
|
||||
SE_INC_WORKING_SET_NAME,
|
||||
SE_RELABEL_NAME,
|
||||
SE_TIME_ZONE_NAME,
|
||||
SE_TRUSTED_CREDMAN_ACCESS_NAME
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct TOKEN_PRIVILEGES
|
||||
internal static class NativeMethods
|
||||
{
|
||||
internal Int32 PrivilegeCount;
|
||||
internal LUID Luid;
|
||||
internal Int32 Attributes;
|
||||
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern bool LookupPrivilegeValue(string lpsystemname, string lpname, [MarshalAs(UnmanagedType.Struct)] ref LUID lpLuid);
|
||||
|
||||
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern bool AdjustTokenPrivileges(IntPtr tokenhandle, [MarshalAs(UnmanagedType.Bool)] bool disableAllPrivileges,
|
||||
[MarshalAs(UnmanagedType.Struct)]ref TOKEN_PRIVILEGES newstate, uint bufferlength, IntPtr previousState, IntPtr returnlength);
|
||||
|
||||
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
|
||||
|
||||
internal const int ERROR_NOT_ALL_ASSIGNED = 1300;
|
||||
|
||||
internal const uint STANDARD_RIGHTS_REQUIRED = 0x000F0000;
|
||||
internal const uint STANDARD_RIGHTS_READ = 0x00020000;
|
||||
internal const uint TOKEN_ASSIGN_PRIMARY = 0x0001;
|
||||
internal const uint TOKEN_DUPLICATE = 0x0002;
|
||||
internal const uint TOKEN_IMPERSONATE = 0x0004;
|
||||
internal const uint TOKEN_QUERY = 0x0008;
|
||||
internal const uint TOKEN_QUERY_SOURCE = 0x0010;
|
||||
internal const uint TOKEN_ADJUST_PRIVILEGES = 0x0020;
|
||||
internal const uint TOKEN_ADJUST_GROUPS = 0x0040;
|
||||
internal const uint TOKEN_ADJUST_DEFAULT = 0x0080;
|
||||
internal const uint TOKEN_ADJUST_SESSIONID = 0x0100;
|
||||
internal const uint TOKEN_READ = (STANDARD_RIGHTS_READ | TOKEN_QUERY);
|
||||
internal const uint TOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY
|
||||
| TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT | TOKEN_ADJUST_SESSIONID;
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
internal static extern IntPtr GetCurrentProcess();
|
||||
|
||||
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern bool OpenProcessToken(IntPtr processHandle, uint desiredAccesss, out IntPtr tokenHandle);
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern bool CloseHandle(IntPtr hObject);
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct LUID
|
||||
{
|
||||
internal int LowPart;
|
||||
internal uint HighPart;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct TOKEN_PRIVILEGES
|
||||
{
|
||||
internal int PrivilegeCount;
|
||||
internal LUID Luid;
|
||||
internal int Attributes;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,8 +45,11 @@
|
|||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Hooks.cs" />
|
||||
<Compile Include="Hooks\MouseHook.cs" />
|
||||
<Compile Include="Hooks\KeyboardHook.cs" />
|
||||
<Compile Include="Hooks\KeyboardHookEventArgs.cs" />
|
||||
<Compile Include="KeyboardReader.cs" />
|
||||
<Compile Include="Hooks\MouseHookEventArgs.cs" />
|
||||
<Compile Include="Power.cs" />
|
||||
<Compile Include="Privileges.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
|
|
Reference in New Issue