• API实现的 重启、关机、注销 .net类


    namespace System {
    /*
    参考://https://www.cnblogs.com/banhua/archive/2012/07/13/2590920.html

    */
        using System.Collections.Generic;
        using System.Text;
        using System.Runtime.InteropServices;
    
        class SystemUtil {
            [StructLayout(LayoutKind.Sequential,Pack = 1)]
            struct TokPriv1Luid {
                public int Count;
                public long Luid;
                public int Attr;
            }
    
            [DllImport("kernel32.dll",ExactSpelling = true)]
            static extern IntPtr GetCurrentProcess();
    
            [DllImport("advapi32.dll",ExactSpelling = true,SetLastError = true)]
            static extern bool OpenProcessToken(IntPtr h,int acc,ref IntPtr phtok);
    
            [DllImport("advapi32.dll",SetLastError = true)]
            static extern bool LookupPrivilegeValue(string host,string name,ref long pluid);
    
            [DllImport("advapi32.dll",ExactSpelling = true,SetLastError = true)]
            static extern bool AdjustTokenPrivileges(IntPtr htok,bool disall,ref TokPriv1Luid newst,int len,IntPtr prev,IntPtr relen);
    
            [DllImport("user32.dll",ExactSpelling = true,SetLastError = true)]
            static extern bool ExitWindowsEx(int flg,int rea);
    
            const int SE_PRIVILEGE_ENABLED = 0x00000002;
            const int TOKEN_QUERY = 0x00000008;
            const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
            const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
            const int EWX_LOGOFF = 0x00000000;
            const int EWX_SHUTDOWN = 0x00000001;
            const int EWX_REBOOT = 0x00000002;
            const int EWX_FORCE = 0x00000004;
            const int EWX_POWEROFF = 0x00000008;
            const int EWX_FORCEIFHUNG = 0x00000010;
    
            private static void DoExitWin(int flg) {
                bool b;
                TokPriv1Luid tp;
                IntPtr hproc = GetCurrentProcess();
                IntPtr htok = IntPtr.Zero;
                b = OpenProcessToken(hproc,TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,ref htok);
                tp.Count = 1;
                tp.Luid = 0;
                tp.Attr = SE_PRIVILEGE_ENABLED;
                b = LookupPrivilegeValue(null,SE_SHUTDOWN_NAME,ref tp.Luid);
                b = AdjustTokenPrivileges(htok,false,ref tp,0,IntPtr.Zero,IntPtr.Zero);
                b = ExitWindowsEx(flg,0);
            }
    
            public static void Reboot() {
                DoExitWin(EWX_FORCE | EWX_REBOOT); //重启
            }
    
            public static void PowerOff() {
                DoExitWin(EWX_FORCE | EWX_POWEROFF);    //关机
            }
    
            public static void LogoOff() {
                DoExitWin(EWX_FORCE | EWX_LOGOFF);      //注销
            }
    
        }
    
    }
    
  • 相关阅读:
    ros学习之消息和服务
    linux软件安装
    ros使用QT插件开发
    使用客户端对象模型读取SharePoint列表数据
    使用服务器端对象模型,编写程序管理SharePoint列表
    Visual Studio创建简单的Event Receiver
    在SharePoint中使用LINQ
    使用Visual Stuidio 2010 创建网站列
    使用Visual Studio 创建新的Web Part项目
    在SharePoint页面嵌入简单的Silverlight程序
  • 原文地址:https://www.cnblogs.com/xe2011/p/12896563.html
Copyright © 2020-2023  润新知