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