函式介紹
NtShutdownSystem()函式用於關閉、重啟系統。
正常關機時,當系統已關閉所有程式,顯示正在關閉系統。SMSS.EXE將會調用該函式進行最後的掃尾工作,然後系統將重啟或關閉。
參數
ShutdownAction
指定關閉的類型。
shutdown 關機
restart 重啟動
poweroff 待機
使用方法
VB
Declare Function NtShutdownSystem& Lib "ntdll" (ByVal ShutdownAction&)
Const shutdown& = 0
Const RESTART& = 1
Const POWEROFF& = 2
VC
const int SE_SHUTDOWN_PRIVILEGE = 0x13;
typedef int (__stdcall *PFN_RtlAdjustPrivilege)( INT, BOOL, BOOL, INT*);
typedef int (__stdcall *PFN_ZwShutdownSystem)(INT);
HMODULE hModule = ::LoadLibrary(_T("ntdll.dll"));
if( hModule != NULL)
{ PFN_RtlAdjustPrivilege pfnRtl = (PFN_RtlAdjustPrivilege)GetProcAddress( hModule, "RtlAdjustPrivilege"); PFN_ZwShutdownSystem pfnShutdown = (PFN_ZwShutdownSystem)GetProcAddress( hModule,"ZwShutdownSystem");
if( pfnRtl != NULL & pfnShutdown != NULL )
{
int en = 0;
int nRet= pfnRtl( SE_SHUTDOWN_PRIVILEGE, TRUE, TRUE, &en);
if( nRet == 0x0C000007C ) nRet = pfnRtl(SE_SHUTDOWN_PRIVILEGE, TRUE, FALSE, &en); //SH_SHUTDOWN = 0; //SH_RESTART = 1; //SH_POWEROFF = 2;
const int SH_POWEROFF = 2; nRet = pfnShutdown(POWEROFF);
}
}
備註
使用此函式需要程式有一定許可權!
調用NtShutdownSystem()函式後將立即重啟或關機,未保存的數據將丟失。
由於NtShutdownSystem()是瞬間關機的。為了系統與硬體的安全,應使用ExitWindowsEx()進行正常關機。