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

.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

[转帖]echo 输出不换行-e \c

http://www.my889.com/i/1952 在shell中,echo输出会自动换行。有时候在循环中不希望echo输出换行。代码实现如下: 1 echo -e " \c" # -e 表示开启转义, \c表示不换行 脚本: 1 2 3 4 5 6 7 8 9 #!/bin/bash i=1

使用c#实现23种常见的设计模式

# 使用c#实现23种常见的设计模式 设计模式通常分为三个主要类别: - 创建型模式 - 结构型模式 - 行为型模式。 这些模式是用于解决常见的对象导向设计问题的最佳实践。 以下是23种常见的设计模式并且提供`c#代码案例`: ## 创建型模式: ### 1. 单例模式(Singleton) ```

万物皆可集成系列:低代码对接Web Service接口

我们知道活字格支持不写代码实现双向API绑定,那么没那么主流的Web Service接口(SOAP协议+XML交互格式)呢?其实对接的思路没有那么复杂,得用C#编码来对接的。 作为一款企业级低代码开发平台,活字格可以和许多第三方软硬件进行集成,灵活、高效使它不可忽视的优势。在之前的内容中我们已经介绍

实现一个简单的在浏览器运行Dotnet编辑器

之前已经实现过Blazor在线编译了,现在我们 实现一个简单的在浏览器运行的编辑器,并且让他可以编译我们的C#代码, 技术栈: Roslyn 用于编译c#代码 [monaco](microsoft/monaco-editor: A browser based code editor (github.

如何将c#在线编辑器嵌入自己项目

如何将c#在线编辑器嵌入自己项目 首先我们需要介绍一下这个在线编辑器,当前的在线编辑器支持c#的代码编译运行,并且无需后台服务,基于WebAssembly实现的在浏览器端去执行我们的c#代码,基于Roslyn提供的Api封装一套简单的编译,并且封装了js的支持,让嵌入的方式更简单。 使用现有项目嵌入

C#判断字符串是否是有效的XML格式数据

说明 在try-catch语句块中,创建XmlDocument对象,并使用LoadXml方法加载xml字符串。如果没有异常,则说明xml字符串是有效的,返回true,反之为false。 代码实现 /// /// Xml字符串格式验证 /// ///