正文

InitiateSystemShutdown:

BOOL InitiateSystemShutdown(lpszMachineName,lpszMessage,dwTimeout,fForce App

sClosed,fReboot)

說(shuō)明:InitiateSystemShutdown函數(shù)激活指定的一次關(guān)機(jī)和重啟動(dòng)。

參數(shù):lpszMachineName

指定以MULL終止的用來(lái)指定要關(guān)機(jī)的網(wǎng)絡(luò)名稱(chēng)的字符串。如果lpszMachineName為NULL,

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

LpszMessage

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

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

DwTimeout

指定對(duì)話框應(yīng)該顯示的時(shí)間(按秒計(jì))。在此對(duì)話框顯示期間,可通過(guò)調(diào)用AbortSyste

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

如果DwTimeout不為零,則InitiateSystemShutdown在指定的計(jì)算機(jī)上顯示的一個(gè)對(duì)

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

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

對(duì)話框可以被移動(dòng),但不能被關(guān)閉。定時(shí)器倒記在強(qiáng)制關(guān)機(jī)之前剩余的時(shí)間。如果用戶

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

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

Shutdown函數(shù)來(lái)停止關(guān)機(jī)。

fForce AppsClosed

指定對(duì)變化未做保存的應(yīng)用程序是否被強(qiáng)制關(guān)閉。如果這個(gè)參數(shù)為T(mén)RUE,則這樣的

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

序。

FReboot

指定計(jì)算機(jī)關(guān)機(jī)之后是否立即重啟。如果這個(gè)參數(shù)為T(mén)RUE,則計(jì)算機(jī)重啟。如果這

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

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

返回值:如果函數(shù)成功,則返回值為T(mén)RUE;否則,返回值為FALSE。要獲得擴(kuò)展錯(cuò)誤信息

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

注釋?zhuān)阂P(guān)掉本地計(jì)算機(jī),調(diào)用進(jìn)程必須具有SE_SHUTDOWN_NAME特權(quán)。要關(guān)掉一臺(tái)遠(yuǎn)程

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

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

機(jī)的SE_REMOTE_SHUTDOWN_NAME特權(quán)。

例子:

HANDLE hToken;

TOKEN_PRIVILEGEStkp;

//得到進(jìn)程權(quán)標(biāo)

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

return;

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

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

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

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

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

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

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