C# 代码实现关机

c#,代码,实现,关机 · 浏览次数 : 63

小编点评

**代码解析:** ```csharp // 获取系统安全令牌 var t = AdvApi32.SafeHTOKEN.FromThread(Kernel32.SafeHTHREAD.Current, AdvApi32.TokenAccess.TOKEN_ADJUST_PRIVILEGES | AdvApi32.TokenAccess.TOKEN_QUERY); // 创建一个TOKEN_PRIVILEGES结构,指定安全令牌 var ptp = new AdvApi32.TOKEN_PRIVILEGES( luid: lpLuid, AdvApi32.PrivilegeAttributes.SE_PRIVILEGE_ENABLED ); // 应用特权调整函数,设置SE_PRIVILEGE_ENABLED权限 AdvApi32.AdjustTokenPrivileges(t, false, ptp, out var old); // 关闭窗口 User32.ExitWindowsEx( User32.ExitWindowsFlags.EWX_POWEROFF | User32.ExitWindowsFlags.EWX_FORCE, SystemShutDownReason.SHTDN_REASON_MAJOR_NONE ); ``` **说明:** * `Vanara.PInvoke.Kernel32Vanara.PInvoke.User32Vanara.PInvoke` 是一个第三方库,需要在 nuget 上下载。 * `lpLuid` 是一个安全令牌的唯一ID。 * `SE_PRIVILEGE_ENABLED` 是一个安全权限,表示允许执行特定操作的权限。

正文

AdvApi32.LookupPrivilegeValue(null, "SeShutdownPrivilege", out var lpLuid);

using var t = AdvApi32.SafeHTOKEN.FromThread(Kernel32.SafeHTHREAD.Current,
AdvApi32.TokenAccess.TOKEN_ADJUST_PRIVILEGES | AdvApi32.TokenAccess.TOKEN_QUERY);

var ptp = new AdvApi32.TOKEN_PRIVILEGES(luid:lpLuid, AdvApi32.PrivilegeAttributes.SE_PRIVILEGE_ENABLED);

AdvApi32.AdjustTokenPrivileges(t,false,ptp,out var old);
User32.ExitWindowsEx(User32.ExitWindowsFlags.EWX_POWEROFF | User32.ExitWindowsFlags.EWX_FORCE,
          SystemShutDownReason.SHTDN_REASON_MAJOR_NONE);

需要在nuget上下载:
Vanara.PInvoke.Kernel32
Vanara.PInvoke.User32
Vanara.PInvoke.Security

与C# 代码实现关机相似的内容:

C# 代码实现关机

``` AdvApi32.LookupPrivilegeValue(null, "SeShutdownPrivilege", out var lpLuid); using var t = AdvApi32.SafeHTOKEN.FromThread(Kernel32.SafeHTHREAD.Curr

多线程知识:三个线程如何交替打印ABC循环100次

本文博主给大家讲解一道网上非常经典的多线程面试题目。关于三个线程如何交替打印ABC循环100次的问题。 > 下文实现代码都基于Java代码在单个JVM内实现。 ## 问题描述 给定三个线程,分别命名为A、B、C,要求这三个线程按照顺序交替打印ABC,每个字母打印100次,最终输出结果为: ``` A

CUDA C编程权威指南:2.1-CUDA编程模型

本文主要通过例子介绍了CUDA异构编程模型,需要说明的是Grid、Block和Thread都是逻辑结构,不是物理结构。实现例子代码参考文献[2],只需要把相应章节对应的CMakeLists.txt文件拷贝到CMake项目根目录下面即可运行。 1.Grid、Block和Thread间的关系 GPU中最

C#的关于窗体的类库方案 - 开源研究系列文章

这次想到了以前编写的关于应用的那个类库,不过当时的只是定义了显示接口,然后调用窗体显示。现在想到要把这个关于窗体的类库进行集合,统一调用,于是就把原来的代码进行了修改完善,终于得到了这次这个例子。 这个例子主要实现了4种关于窗体的形式。第1种为普通的显示文件的信息(即程序集信息里的那些信息);第2种

C++面向对象

1. C++语言基础 1.1 函数 C++新增:多态 函数重载( overload ) 函数重写(覆写,overrride) 编译器会根据实参的类型来⾃动确定调⽤哪个重载函数 C++新增:内联函数 修饰关键字:inline 作用:编译时直接将函数替换为一堆代码,减少函数调用带来的开销。 比#defi

知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - CQL - 太极拳传承谱系表

目录创建节点删除节点查询节点创建关系新节点无属性关系删除关系案例 -- 太极拳传承谱系表创建传承人创建师徒关系创建第N代传承人案例 -- 批量执行 看到后面的案例再实操作 删除数据库中以往的图 MATCH (n) DETACH DELETE n 创建节点 CREATE命令语法 Neo4j CQL“C

.NET Core 允许跨域的两种方式实现(IIS 配置、C# 代码实现)

本文例举了通过 IIS 配置和 C# 代码实现后端允许跨域配置,并介绍了代码实现相关的配置项。最后简单介绍了一下预检请求 Options。

[转帖]Linux系统top命令中的io使用率,很多人都误解了它的具体含义

https://baijiahao.baidu.com/s?id=1641356547223820839&wfr=spider&for=pc 最近在做连续数据流的缓冲系统,C语言代码实现后,粗略测试了下,功能上应该没有问题。那么,接下来就该测试性能了。输入 top 命令,的确可以看到一系列 cpu

多线程合集(三)---异步的那些事之自定义AsyncTaskMethodBuilder

引言 之前在上一篇文章中多线程合集(二) 异步的那些事,async和await原理抛析,我们从源码去分析了async和await如何运行,以及将编译后的IL代码写成了c#代码,以及实现自定义的Awaiter,自定义异步状态机同时将本系列的第一篇文章的自定义TaskScheduler和自定义的Awai

使用Wesky.Net.Opentools库,一行代码实现自动解析实体类summary注释信息(可用于数据实体文档的快速实现)

使用前,需要对你的项目勾选输出api文档文件。 引用Wesky.Net.OpenTools包,保持1.0.11版本或以上。 为了方便,我直接在昨天的演示基础上,继续给实体类添加注释。 昨天的演示文章可参考: C#/.NET一行代码把实体类类型转换为Json数据字符串 https://mp.weixi