NtShutdownSystem

NtShutdownSystem()函式用於關閉、重啟系統。正常關機時,當系統已關閉所有程式,顯示正在關閉系統。WinLogon.EXE將會調用該函式進行最後的掃尾工作,然後系統將重啟或關閉。

基本介紹

  • 外文名:NtShutdownSystem
  • 實質:函式名
  • 作用:用於關閉、重啟系統
  • 使用方法:VB,VC
參數,使用方法,備註,

參數

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);
}
}

備註

ntdll中的NtShutdownSystem()與ZwShutdownSystem()效果相同,兩者並無實質上的區別,而ntoskrnl中的NtShutdownSystem()與ZwShutdownSystem()是簡單的跳轉關係
使用此函式需要程式有一定許可權!
調用NtShutdownSystem()函式後,會通知硬體驅動保存核心數據,註冊表和檔案的快取將會刷新到磁碟上,然後將立即重啟或關機,未保存的應用程式數據將丟失。
由於NtShutdownSystem()通知硬體驅動後是瞬間關機的。為了系統與硬體的安全,應使用ExitWindowsEx()進行正常關機。

相關詞條

熱門詞條

聯絡我們