当前位置: 代码迷 >> .NET新技术 >> 请各位帮帮忙啊!给100分!多谢了!只是解释一下这段代码
  详细解决方案

请各位帮帮忙啊!给100分!多谢了!只是解释一下这段代码

热度:115   发布时间:2016-04-25 01:49:51.0
请各位帮帮忙啊!!!!给100分!谢谢了!只是解释一下这段代码
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Threading;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace mywinlab
{
  public partial class Form1 : Form
  {
  DateTime dateTime;
  public int a = 1;
  public Form1()
  {
  InitializeComponent();

  }

  [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 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 Form1_Load(object sender, EventArgs e)
  {
  this.ShowInTaskbar = true;
  }

  private void timer1_Tick(object sender, EventArgs e)
  {
  dateTime = DateTime.Now;
  string time = dateTime.ToString("HH:mm:ss:ff");  
  label1.Text = "现在时间:"+time;
  }

  private void button1_Click(object sender, EventArgs e)
  相关解决方案