windows关机API
来源:互联网 发布:tp非法数据对象 编辑:程序博客网 时间:2024/05/29 12:32
NT系统的关机API函数实现过程
前计算机系统多为Windows 2000和Windows XP。Windows 98系统下的关机比较容易,只需要直接调用关闭计算机函数ExitWindowEx就可以了,而在Windows 2000系统下的调用这个函数只能“注销”而不能实现系统关机。在Windows 2000系统实现关机操作得到SHUTDOWN许可,得到SHUTDOWN许可需要调用相应的API函数,具体过程如下:
(1)首先得到当前程序的进程句柄;(2)使用这个进程句柄得到当前程序的访问标记;(3)生成TOKEN_PRIVILEGES结构;(4)有了TOKEN_PRIVILEGES结构后再获得SHUTDOWN权限;(5)最后使用ExitWindowEx函数进行相关操作。1) 相关的API函数 获得当前进程伪句柄函数GetCurrentProcess,函数声明如下: Private Declare Function GetCurrentProcess Lib "kernel32" () As Long 取得程序访问标记函数OpenProcessToken,函数声明如下: Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long 查找进程权限函数LookupPrivilegeValue,函数声明如下: Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long 获得关机权限函数AdjustTokenPrivileges,函数声明如下: Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
关机函数ExitWindowEx
Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
用于关机操作的一些常数如表2所示常数值字符标识作用&H20TOKEN_ADJUST_PRIVILEGES关机权限标识&H8TOKEN_QUERY标识查询&H2SE_PRIVILEGE_ENABLED私有进程有效0EWX_LOGOFF终止进程系统注销1EWS_SHUTDOWN关闭系统电源2EWS_REBOOT重新启动4EWS_FORCE强行终止没有响应的进程
前计算机系统多为Windows 2000和Windows XP。Windows 98系统下的关机比较容易,只需要直接调用关闭计算机函数ExitWindowEx就可以了,而在Windows 2000系统下的调用这个函数只能“注销”而不能实现系统关机。在Windows 2000系统实现关机操作得到SHUTDOWN许可,得到SHUTDOWN许可需要调用相应的API函数,具体过程如下:
(1)首先得到当前程序的进程句柄;
(2)使用这个进程句柄得到当前程序的访问标记;
(3)生成TOKEN_PRIVILEGES结构;
(4)有了TOKEN_PRIVILEGES结构后再获得SHUTDOWN权限;
(5)最后使用ExitWindowEx函数进行相关操作。
1) 相关的API函数
获得当前进程伪句柄函数GetCurrentProcess,函数声明如下:
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
取得程序访问标记函数OpenProcessToken,函数声明如下:
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
查找进程权限函数LookupPrivilegeValue,函数声明如下:
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
获得关机权限函数AdjustTokenPrivileges,函数声明如下:
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
关机函数ExitWindowEx
Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
关机函数ExitWindowEx
Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
用于关机操作的一些常数如表2所示
常数值
字符标识
作用
&H20
TOKEN_ADJUST_PRIVILEGES
关机权限标识
&H8
TOKEN_QUERY
标识查询
&H2
SE_PRIVILEGE_ENABLED
私有进程有效
0
EWX_LOGOFF
终止进程系统注销
1
EWS_SHUTDOWN
关闭系统电源
2
EWS_REBOOT
重新启动
4
EWS_FORCE
强行终止没有响应的进程
[C/C++]代码
01
//关闭计算机
02
BOOL
MySystemShutdown()
03
{
04
HANDLE
hToken;
05
TOKEN_PRIVILEGES tkp;
06
07
// Get a token for this process.
08
09
if
(!OpenProcessToken(GetCurrentProcess(),
10
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
11
return
( FALSE );
12
13
// Get the LUID for the shutdown privilege.
14
15
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
16
&tkp.Privileges[0].Luid);
17
18
tkp.PrivilegeCount = 1;
// one privilege to set
19
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
20
21
// Get the shutdown privilege for this process.
22
23
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
24
(PTOKEN_PRIVILEGES)NULL, 0);
25
26
if
(GetLastError() != ERROR_SUCCESS)
27
return
FALSE;
28
29
// Shut down the system and force all applications to close.
30
31
if
(!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
32
SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
33
SHTDN_REASON_MINOR_UPGRADE |
34
SHTDN_REASON_FLAG_PLANNED))
35
return
FALSE;
36
37
return
TRUE;
38
}
- windows关机API
- windows api 关机代码
- 调用Windows API实现关机
- QT 调用Windows API实现关机
- c#调用api控制windows关机示例
- QT 调用Windows API实现关机
- windows api实现计算机空闲关机
- Windows API 函数学习(11)---一个关机程序的源代码
- golang 调用win32 api 实现windows注销、重启、关机
- API函数ExitWindowsEx关机
- C++远程关机API
- WIN32 API 关机
- 整理出来的一个windows关机、锁定、重启、注销 API调用
- 整理出来的一个windows关机、锁定、重启、注销 API调用
- 整理出来的一个windows关机、锁定、重启、注销 API调用 .
- 定时关机程序(恶搞版)---通过VC6.0+C语言+windows API实现
- 整理出来的一个windows关机、锁定、重启、注销 API调用
- Windows关机技巧谈
- js的clone方法
- JQuery 实现Selct 多分类从左到右的操作
- OpenGL日记——3ds文件结构
- C# 中 List 用法
- 虚幻脚本预处理器 (UPP)
- windows关机API
- 开发管理 CheckLists(12) -敏捷开发-编写故事
- java中string和int互相转化
- Devexpress使用之:GridControl控件
- android的WebView
- 件读写相关类——相当精要
- u-boot-1.3.4移植到s3c2440之nand驱动
- 权限需要注意的问题
- excel数据导入sqlserver