C# 强制关机
来源:互联网 发布:混合矩阵切换器 编辑:程序博客网 时间:2024/04/29 16:25
public enum ExitWindows : uint
{
EWX_LOGOFF = 0x00,
EWX_SHUTDOWN = 0x01,
EWX_REBOOT = 0x02,
EWX_POWEROFF = 0x08,
EWX_RESTARTAPPS = 0x40,
EWX_FORCE = 0x04,
EWX_FORCEIFHUNG = 0x10,
}
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
public static extern bool ExitWindowsEx(ExitWindows uFlags,
int dwReason);
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern IntPtr GetCurrentProcess();
[System.Runtime.InteropServices.DllImport("advapi32.dll", SetLastError = true)]
private static extern bool OpenProcessToken(IntPtr ProcessHandle,
uint DesiredAccess,
out IntPtr TokenHandle);
[System.Runtime.InteropServices.DllImport("advapi32.dll", SetLastError = true,
CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern bool LookupPrivilegeValue(string lpSystemName,
string lpName,
out long lpLuid);
[System.Runtime.InteropServices.StructLayout(
System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 1)]
private struct TOKEN_PRIVILEGES
{
public int PrivilegeCount;
public long Luid;
public int Attributes;
}
[System.Runtime.InteropServices.DllImport("advapi32.dll", SetLastError = true)]
private static extern bool AdjustTokenPrivileges(IntPtr TokenHandle,
bool DisableAllPrivileges,
ref TOKEN_PRIVILEGES NewState,
int BufferLength,
IntPtr PreviousState,
IntPtr ReturnLength);
//为了关闭系统设定安全权限
public void AdjustToken()
{
const uint TOKEN_ADJUST_PRIVILEGES = 0x20;
const uint TOKEN_QUERY = 0x8;
const int SE_PRIVILEGE_ENABLED = 0x2;
const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
if (Environment.OSVersion.Platform != PlatformID.Win32NT)
return;
IntPtr procHandle = GetCurrentProcess();
//取得令牌
IntPtr tokenHandle;
OpenProcessToken(procHandle,
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out tokenHandle);
//取得LUID
TOKEN_PRIVILEGES tp = new TOKEN_PRIVILEGES();
tp.Attributes = SE_PRIVILEGE_ENABLED;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, out tp.Luid);
//设定权限
AdjustTokenPrivileges(
tokenHandle, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
}
//调用方法
//设定关机
// AdjustToken();
// ExitWindowsEx(ExitWindows.EWX_POWEROFF, 0);
//设定强制关机
// AdjustToken();
// ExitWindowsEx(ExitWindows.EWX_POWEROFF | ExitWindows.EWX_FORCE, 0);
- C# 强制关机
- C#强制关机、重启以及注销计算机
- 强制关机函数
- iPhone强制关机
- iphone4s 如何强制关机
- oracle 强制关机后再开时连不上
- iPhone、iPad强制关机
- 取消电脑关机提示是否强制关机
- C#关机
- c#关机
- 强制关机出现故障解决方案
- 强制关机/重启/注销
- 如何取消电脑关机提示是否强制关机
- Mongodb 断电或者强制关机之后
- 内核里强制关机和重启
- 强制关机带来的软件无法打开
- 虚拟机强制关机后打不开怎么破
- ubuntu 强制关机后 mysql无法启动
- 利用hook IE保存网页为mht的一个方法
- 在 Ubuntu 上安装 Kscope
- 入口函数main
- 关闭thickbox弹出层的脚本
- Linux/Unix环境下的make命令详解
- C# 强制关机
- OOP面向对象编程——C++
- 提交到百度汉字乱码的解决办法
- 手机mac地址
- TIBCO中国研发中心职位(Offshore)
- BOSS(运营支撑)领域程序员的六层能力阶梯
- 使用 Web Service 上传文件至 SPS Document Library 的问题及解决: SPWeb.AllowUnsafeUpdates = true
- jdk 环境配量配置
- Silverlight中使用XmlReader递归读取xml文件