正文

InitiateSystemShutdown:

BOOL InitiateSystemShutdown(lpszMachineName,lpszMessage,dwTimeout,fForce App

sClosed,fReboot)

說明:InitiateSystemShutdown函數(shù)激活指定的一次關(guān)機和重啟動。

參數(shù):lpszMachineName

指定以MULL終止的用來指定要關(guān)機的網(wǎng)絡名稱的字符串。如果lpszMachineName為NULL,

或指向一個空串,則該函數(shù)關(guān)掉本地計算機。

LpszMessage

指向一個以MULL終止的指定要顯示在關(guān)機對話框中的消息的字符串。如果不需要消息,

該參數(shù)可以為NULL。

DwTimeout

指定對話框應該顯示的時間(按秒計)。在此對話框顯示期間,可通過調(diào)用AbortSyste

mShutdown函數(shù)將關(guān)機停止。

如果DwTimeout不為零,則InitiateSystemShutdown在指定的計算機上顯示的一個對

話框。該對話框顯示調(diào)用此函數(shù)的用戶名,顯示由lpszMessage參數(shù)指定的消息,并提示

用戶退出系統(tǒng)。當對話框被創(chuàng)建時發(fā)出嘟嘟聲,并保持位于系統(tǒng)中其它窗口的上面。此

對話框可以被移動,但不能被關(guān)閉。定時器倒記在強制關(guān)機之前剩余的時間。如果用戶

退出系統(tǒng),系統(tǒng)立即關(guān)閉。否則,當定時器到時間計算機才關(guān)機。

如果DwTimeout為零時,計算機關(guān)機,但不顯示此對話框,并且不能用AbortSystem

Shutdown函數(shù)來停止關(guān)機。

fForce AppsClosed

指定對變化未做保存的應用程序是否被強制關(guān)閉。如果這個參數(shù)為TRUE,則這樣的

應用程序被關(guān)閉。如果這個參數(shù)為FALSE,則顯示一個對話框以提示用戶關(guān)閉這些應用程

序。

FReboot

指定計算機關(guān)機之后是否立即重啟。如果這個參數(shù)為TRUE,則計算機重啟。如果這

個參數(shù)為FALSE,則系統(tǒng)將所有高速緩存刷新到磁盤上,清除屏幕,并且顯示一條消息,

指示關(guān)掉電源是安全的。

返回值:如果函數(shù)成功,則返回值為TRUE;否則,返回值為FALSE。要獲得擴展錯誤信息

,可使用GetLastError函數(shù)。

注釋:要關(guān)掉本地計算機,調(diào)用進程必須具有SE_SHUTDOWN_NAME特權(quán)。要關(guān)掉一臺遠程

計算機,調(diào)用進程必須對此遠程計算機具有的SE_REMOTE_SHUTDOWN_NAME特權(quán)。缺省情況

下,用戶具有對他們所有登錄計算機的SE_SHUTDOWN_NAME特權(quán),管理員具有對遠程計算

機的SE_REMOTE_SHUTDOWN_NAME特權(quán)。

例子:

HANDLE hToken;

TOKEN_PRIVILEGEStkp;

//得到進程權(quán)標

if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES && TOKEN_QUERY,&hToken))

return;

//得到關(guān)機的特權(quán)的LUID

LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1;//設(shè)置一個特權(quán)

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

//得到進程關(guān)機的特權(quán)

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);

::InitiateSystemShutdown(NULL,"關(guān)機進行中!",100,true,true);