var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2007年04月27日

    C#关机

    分类:

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Runtime.InteropServices;

     

    namespace chkipsrv

    {

        public class Shudown

        {

            [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 DoFlag, 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 DoFlag)

            {

                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(DoFlag, 0);

            }

     

            public static void Reboot()

            {

                DoExitWin(EWX_FORCE | EWX_REBOOT);

            }

     

            public static void PowerOff()

            {

                DoExitWin(EWX_FORCE | EWX_POWEROFF);

            }

     

            public static void LogOff()

            {

                DoExitWin(EWX_FORCE | EWX_LOGOFF);

            }

        }

    }

    分享到:

    历史上的今天:

    虚拟机 2009年04月27日
    正则表达式学习(2) 2007年04月27日
    正则表达式学习(1) 2007年04月27日