简单实现windows系统普通或强制关机重启注销的功能
2012-08-03 09:42
746 查看
简单实现windows系统普通或强制关机重启注销的功能
#ifndef __H_SHUTDOWN_H__#define __H_SHUTDOWN_H__
typedef enum _SHUTDOWN_ACTION
{
ShutdownNoReboot,
ShutdownReboot,
ShutdownPowerOff
} SHUTDOWN_ACTION;
typedef DWORD (WINAPI* lpNtShutdownSystem)(SHUTDOWN_ACTION Action);
typedef DWORD (WINAPI* lpNtSetSystemPowerState)(IN POWER_ACTION SystemAction,
IN SYSTEM_POWER_STATE MinSystemState,
IN ULONG Flags);
class KsSystemDown
{
protected:
HMODULE hNtdll;
TOKEN_PRIVILEGES tkp;
HANDLE hToken;
lpNtShutdownSystem NtShutdownSystem;
lpNtSetSystemPowerState NtSetSystemPowerState;
public:
BOOL SystemShutdown(SHUTDOWN_ACTION action)
{
if (!NtShutdownSystem)
return FALSE;
DWORD dwRet = NtShutdownSystem(action);
if (dwRet == 0)
return TRUE;
else
return FALSE;
}
BOOL SystemPowerdown(IN POWER_ACTION SystemAction,IN SYSTEM_POWER_STATE MinSystemState,IN ULONG Flags)
{
if (!NtSetSystemPowerState)
return FALSE;
DWORD dwRet = NtSetSystemPowerState(SystemAction,MinSystemState,Flags);
if (dwRet == 0)
return TRUE;
else
return FALSE;
}
BOOL CommonLogoff()
{
return Shutdown(EWX_LOGOFF);
}
BOOL CommonShutdown()
{
return Shutdown((EWX_POWEROFF|EWX_SHUTDOWN));
}
BOOL CommonReBoot()
{
return Shutdown(EWX_REBOOT);
}
BOOL FastLogoff()
{
return Shutdown(EWX_LOGOFF|EWX_FORCE);
}
BOOL FastShutdown()
{
return Shutdown(EWX_POWEROFF|EWX_SHUTDOWN|EWX_FORCE);
}
BOOL FastReboot()
{
return Shutdown(EWX_REBOOT|EWX_FORCE);
}
BOOL Shutdown(DWORD dwValue)
{
return ExitWindowsEx(dwValue,0);
}
BOOL SuperShutdown()
{
if (NtShutdownSystem != NULL)
return NtShutdownSystem(ShutdownNoReboot);
else
return FALSE;
}
BOOL SuperReboot()
{
if (NtShutdownSystem != NULL)
return NtShutdownSystem(ShutdownReboot);
else
return FALSE;
}
public:
KsSystemDown():
NtShutdownSystem(NULL),NtSetSystemPowerState(NULL)
{
OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,&hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0);
CloseHandle(hToken);
hNtdll = GetModuleHandle("ntdll.dll");
if (hNtdll)
{
NtShutdownSystem = (lpNtShutdownSystem)GetProcAddress(hNtdll,"NtShutdownSystem");
NtSetSystemPowerState = (lpNtSetSystemPowerState)GetProcAddress(hNtdll,"NtSetSystemPowerState");
}
}
~KsSystemDown()
{
tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0);
}
};
#endif
相关文章推荐
- C#实现控制Windows系统关机、重启和注销的方法:
- C#实现控制Windows系统关机、重启和注销的方法
- DELPHI中调用API函数ExitWindowsEX可以实现系统的关机,注销,和重启
- XP系统中关机、注销、重启功能
- C# 实现系统关机、注销、重启、休眠、挂起
- 编程实现Windows关机、重启、注销
- 补昨日博客-使用putty登录Windows实现虚拟机中的系统的开机、关机、重启
- C# 实现系统关机、注销、重启、休眠、挂起
- 让Android程序获得系统的权限,实现关机重启,静默安装等功能
- C++ 实现系统注销,重启,关机的方法
- 让Android程序获得系统的权限,实现关机重启,静默安装等功能
- 让Android程序获得系统权限,实现关机重启,静默安装等功能
- Qt5实现系统关机和重启的功能
- windows C++实现注销、重启、关机 logoff reboot shutdown
- 编程实现Windows关机、重启、注销
- C++ 实现系统注销,重启,关机的方法
- C#实现关机、重启、注销功能 2009-2-20
- 如何用VC实现系统关机、重启、注销
- 在linux系统下,简单实现类似windows的_splitpath函数的功能
- 让Android程序获得系统的权限,实现关机重启,静默安装等功能