zoukankan      html  css  js  c++  java
  • C#实现注销、重启和关机代码

    首先要导入对命名空间

    using System.Runtime.InteropServices;

    的引用

    [StructLayout(LayoutKind.Sequential, Pack = 1)]

            internal struct TokPriv1Luid

            {

                public int Count;

                public long Luid;

                public int Attr;

            }

            [DllImport("kernel32.dll", ExactSpelling = true)]

            internal static extern IntPtr GetCurrentProcess();

            [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]

            internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);

            [DllImport("advapi32.dll", SetLastError = true)]

            internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);

            [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]

            internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,

         ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);

            [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]

            internal static extern bool ExitWindowsEx(int flg, int rea);

            internal const int SE_PRIVILEGE_ENABLED = 0x00000002;

            internal const int TOKEN_QUERY = 0x00000008;

            internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;

            internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";

            internal const int EWX_LOGOFF = 0x00000000;

            internal const int EWX_SHUTDOWN = 0x00000001;

            internal const int EWX_REBOOT = 0x00000002;

            internal const int EWX_FORCE = 0x00000004;

            internal const int EWX_POWEROFF = 0x00000008;

            internal const int EWX_FORCEIFHUNG = 0x00000010;

    private static void DoExitWin(int flg)

            {

                bool ok;

                TokPriv1Luid tp;

                IntPtr hproc = GetCurrentProcess();

                IntPtr htok = IntPtr.Zero;

                ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);

                tp.Count = 1;

                tp.Luid = 0;

                tp.Attr = SE_PRIVILEGE_ENABLED;

                ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);

                ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);

                ok = ExitWindowsEx(flg, 0);

            }

            private void button2_Click(object sender, EventArgs e)

            {

                //此代码实现重启功能

                DoExitWin(EWX_REBOOT);

            }

            private void button3_Click(object sender, EventArgs e)

            {

                 //此代码实现注销功能

                DoExitWin(EWX_LOGOFF);

            }

            private void button1_Click_1(object sender, EventArgs e)

            {

                 //此代码实现关机功能

                DoExitWin(EWX_SHUTDOWN);

            }

     文章转自:http://essay.iteye.com/blog/342173

     
  • 相关阅读:
    快排笔记C++
    security+redis+jwt 一个登陆注册查询的例子
    centeros 配置好环境虚拟机下载(java git mysql maven nginx Python redis nodejs tomcat )
    ZwQueryInformationProcess 反调试代码
    c++ 创建进程设置窗口标题模拟键盘鼠标例子
    求一个数二进制中包含多少个1
    憨批是我
    憨批是我
    问卷星实现自动填表刷问卷(问卷星分析post协议实现 安卓版)
    前端面试题 -- 综合
  • 原文地址:https://www.cnblogs.com/swxj/p/2957080.html
Copyright © 2011-2022 走看看