青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

關閉計算機就這幾招

注:完全翻譯整理自MSDN。非常簡單. .

系統ShutDown”屬于Windows系統的一種基本服務。功能上有關閉系統注銷用戶鎖定工作站”3中操作。SDK中提供了幾個函數,來對此服務進行調用。

關閉系統功能使計算機可以被安全的關閉。所有在文件系統里緩沖的內容都被強制寫入磁盤。然后,顯示相應的對話框,提示用戶計算機將被關閉或者已經準備好被關閉。可選的情況一般是計算機在關閉后重起,而不是直接切斷電源。

如果一個進程調用注銷功能函數,則該進程所在的安全環境范圍內的所有進程都被終止,使當前的用戶退出系統。一個登陸對話框被顯示,期待新用戶的登陸。

鎖定工作站功能使你可以在離開計算機的時候,保護計算機屏幕不被未授權的用戶看到。要解除鎖定,必須用管理員或著授權用戶的帳號和密碼重新登陸。

如何關閉系統:

程序可以用兩種方式關閉本地或遠程計算機
直接關閉系統
關閉系統并重啟
Windows NT/2000
及后續版本: 程序必須擁有SE_SHUTDOWN_NAME權限才能成功調用關閉函數。


ExitWindowsEx
函數可以用來關閉系統。如函數成功調用,系統對每個窗口發送WM_QUERYENDSESSION 消息,詢問窗口所屬的程序是否可以被終止。收到此消息的程序應該進行響應,清除環境釋放資源,然后返回TRUE表示自己可以被終止。然而調用ExitWindowEx的時候如果指定了EXW_FORCE,則系統強行終止相關的進程并關閉,這樣可能導致數據的丟失。

這是一段在NT/2000中調用ExitWindowEx關閉系統的程序(強制關閉所有程序)。

windows95/98/me中直接調用ExitWindowEx即可。
-----------------------------------------------------------------------------------------------------------


HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(),

TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))


Error("OpenProcessToken");

// Get the LUID for the shutdown privilege.

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

tkp.PrivilegeCount = 1; // one privilege to set

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,

(PTOKEN_PRIVILEGES)NULL, 0);

// Cannot test the return value of AdjustTokenPrivileges.

if (GetLastError() != ERROR_SUCCESS)

error("AdjustTokenPrivileges");

// Shut down the system and force all applications to close.

if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))

error("ExitWindowsEx");

-----------------------------------------------------------------------------------------------------------

Windows NT/2000
以及后續版本:

InitiateSystemShutdown
函數可以指定一段延時,在進行延時計數的時候,在將被關閉的目標計算機上顯示一個對話框,提示用戶盡快注銷。一旦計數結束,系統則立刻被關閉。在此之前,可以調用AbortSystemShutdown函數停止計數,取消相應的關閉操作。InitiateSystemShutdown也可以指定讓系統重啟。


InitiateSystemShutdown
有一個參數LPTSTR lpMachineName,可以指定為網絡上的計算機名字,也就是說,可以關閉網絡上的他計算機(如果你的用戶在該計算機上有足夠的權限的話)。


以下這個例子調用InitiateSystemShutdown函數關閉用戶已經登陸的本地計算機(要關閉遠程計算機將InitSystemShutdown第一個參數由NULL改為正確的計算機名字或)。同樣的,也需要先獲得SE_SHUTDOWN_NAME權限。


---------------------------------------------------------------------------------------------------------

HANDLE hToken; // handle to process token

TOKEN_PRIVILEGES tkp; // pointer to token structure

BOOL fResult; // system shutdown flag

// Get the current process token handle so we can get shutdown

// privilege.

if (!OpenProcessToken(GetCurrentProcess(),

TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))

ErrorHandler("OpenProcessToken failed.");

// Get the LUID for shutdown privilege.

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

tkp.PrivilegeCount = 1; // one privilege to set

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,



(PTOKEN_PRIVILEGES) NULL, 0);

// Cannot test the return value of AdjustTokenPrivileges.

if (GetLastError() != ERROR_SUCCESS)

ErrorHandler("AdjustTokenPrivileges enable failed.");

// Display the shutdown dialog box and start the time-out countdown.

fResult = InitiateSystemShutdown( NULL, // shut down local computer

"Click on the main window and press \

the Escape key to cancel shutdown.", // message to user

20, // time-out period

FALSE, // ask user to close apps

TRUE); // reboot after shutdown


if (!fResult)


{

ErrorHandler("InitiateSystemShutdown failed.");

}
// Disable shutdown privilege.


tkp.Privileges[0].Attributes = 0;


AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,


(PTOKEN_PRIVILEGES) NULL, 0);


if (GetLastError() != ERROR_SUCCESS)


{

ErrorHandler("AdjustTokenPrivileges disable failed.");

}

---------------------------------------------------------------------------------------------
而使用AbortSystemShutoown取消InitialSystemShutdown操作的代碼如下(記住要在延時結束前執行才能起作用


// Get the current process token handle so we can get shutdown

// privilege.


if (!OpenProcessToken(GetCurrentProcess(),

TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))

{

ErrorHandler("OpenProcessToken failed.");

}


// Get the LUID for shutdown privilege.


LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,

&tkp.Privileges[0].Luid);


tk
p.PrivilegeCount = 1; // one privilege to set


tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;


// Get shutdown privilege for this process.


AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,

(PTOKEN_PRIVILEGES)NULL, 0);


// Cannot test the return value of AdjustTokenPrivileges.


if (GetLastError() != ERROR_SUCCESS)


{

ErrorHandler("AdjustTokenPrivileges enable failed.");

}

// Prevent the system from shutting down.

fResult = AbortSystemShutdown(NULL);

if (!fResult)

{

ErrorHandler("AbortSystemShutdown failed.");

}

// Disable shutdown privilege.

tkp.Privileges[0].Attributes = 0;

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,

(PTOKEN_PRIVILEGES) NULL, 0);

if (GetLastError() != ERROR_SUCCESS)

{

ErrorHandler("AdjustTokenPrivileges disable failed.");

}

break;

關于用戶權限(Privileges)的詳細信息,可以參見MSDN

如何注銷當前用戶


可以使用ExitWindowsExitWindowsEx函數注銷當前用戶。

在默認的情況下,當程序調用ExitWindowsExitWindowsEx注銷的時候,WM_QUERYENDSESSION消息也被發送到系統內的每個窗口。窗口所屬的程序響應此消息并且返回TRUE表示可以被關閉,如果任意一個程序返回FALSE,注銷操作將被取消。

Windows NT/2000
以及后續版本:

當一個程序響應WM_QUERYENDSESSION并返回TRUE,那么它就會立刻接受到WM_ENDSESSION消息并馬上結束,而不管其他的程序是怎么樣回應WM_QUERYENDSESSION消息的。

Windows 95/98/Me:
只有當系統內所有的程序都對WM_QUERYENDSESSION消息回應TRUE之后,他們才會一起接受到WM_ENDSESSION 消息,然后結束。

如果要強制關閉所有的程序,使用ExitWindowsEx函數,指定EXW_FORCE標志。如果這樣做,系統不發送WM_QUERYENDSESSION 消息,而直接終止正在運行的程序。

在注銷的時候,系統還向每一個進程發送CTRL_LOGOFF_EVENT 控制碼。控制臺程序可以注冊一個HandlerRoutine例程來處理這個控制碼(使用SetConsoleCtrlHandler函數)。(更多的關于控制臺的控制碼,參見MSDN“HandlerRoutine”有關章節)

綜上所述:只有所有的程序都允許退出,注銷操作才能成功。如果某一個程序響應WM_QUERYENDSESSION并返回FALSE ,用戶則不能被注銷。這樣就可以寫出防止用戶注銷或關閉的程序(非強制情況)。

//
這是注銷當前用戶的代碼

ExitWindows(0, 0);

//
響應WM_QUERYENDSESSION消息,如果在彈出消息框里選擇NO,則取消注銷。

case WM_QUERYENDSESSION:

{

int r;

r = MessageBox(NULL, "Shut down?","WM_QUERYENDSESSION", MB_YESNO);

// Return TRUE to allow shutdown, FALSE to stop.

return r == IDYES;

break;

}

如何鎖定工作站

使用LockWorkStation函數即可鎖定工作站。系統會顯示一個鎖定對話框,告訴用戶此工作站正在使用并且已經被鎖定,可以被執行鎖定的用戶或管理員解鎖,解鎖的方式是按下CTRL_ALT_DEL并用正確的帳號和密碼登陸。

LockWorkStation
函數成功調用的條件是:

調用者必須是運行在系統交互桌面上的一般進程。

必須已經有用戶登陸到系統

工作站未被鎖定。

擁有正常窗口和消息隊列的程序通過WM_QUERYENDSESSIONWM_ENDSESSION消息獲得關閉通知。

控制臺則是在其控制流程(Handle Routines)里接受關閉通知。要注冊一個控制臺控制流程,應該使用SetConsoleCtrlHandler函數

服務程序在其控制流程里接受退出通知。要注冊一個服務控制流程,應該使用RegisterServiceCtrlHandlerEx函數。

關閉系統函數列表

函數名                函數功能描述

AbortSystemShutdown
          取消由InitSystemShutdown引起的系統關閉操作

ExitWindows
              注銷當前用戶

ExitWindowsEx
             注銷用戶,關閉計算機,關閉計算機并且重啟

InitiateSystemShutdown
         發起關閉系統操作,可以選擇關閉后重啟

InitiateSystemShutdownEx
        同InitiateSystemShutdown,擴展的功能是可以在系統
                    事件日志(事件號6006)中寫入一個用戶指定的雙字節碼

LockWorkStation
            鎖定工作站


系統關閉消息

WM_ENDSESSION

wParam

表示是否要終止程序。如果是TRUE,指令該程序終止,否則是FALSE

lParam

表示用戶注銷還是系統被關閉。如果此參數包含ENDSESSION_LOGOFFlParam在這里是按位取值的)位,則表示是用戶注銷

Windows 2000
以及后續版本:如果lParam ==0,則表示系統被關閉。

程序收到此消息,如果wParamTRUE,在完成消息處理后,程序隨時都有可能被關閉。所以在此消息的處理過程里,應該盡量完成程序銷毀前所需要進行的工作。

WM_QUERYENDSESSION

wParam

保留,未使用

lParam

WM_ENDSESSION;

DefWindowProc
默認返回:TRUE

 

posted on 2008-10-12 16:00 肥仔 閱讀(384) 評論(0)  編輯 收藏 引用 所屬分類: Windows開發

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品蜜臀在线观看| 日韩视频中午一区| 亚洲人成在线播放| 在线日韩欧美视频| 亚洲二区视频在线| 亚洲国产精品黑人久久久| 在线观看国产精品网站| 亚洲日本成人网| 一区二区三区四区五区在线| 中文日韩在线视频| 欧美影院视频| 蜜桃精品久久久久久久免费影院| 免费久久精品视频| 亚洲精品一区在线观看| 亚洲一区二区三区高清 | 国产精品免费视频观看| 国产欧美日韩免费看aⅴ视频| 国产综合色产在线精品| 亚洲黄页视频免费观看| 一本色道久久加勒比精品| 亚洲综合国产| 久久久噜噜噜久久中文字免| 欧美国产日韩视频| 一区二区动漫| 久久先锋资源| 欧美日韩亚洲一区二区| 国产在线不卡| 一本一本久久| 免费精品视频| 亚洲免费网站| 欧美国产综合一区二区| 国产日本欧洲亚洲| 99精品99| 理论片一区二区在线| 一本久道久久综合婷婷鲸鱼| 久久久久久国产精品mv| 国产精品国产三级国产aⅴ浪潮 | 91久久精品国产91久久| 亚洲一区二区三区中文字幕 | 国产精品腿扒开做爽爽爽挤奶网站| 激情亚洲网站| 亚洲欧美另类在线观看| 欧美激情小视频| 亚洲精品乱码久久久久| 一本色道久久综合亚洲精品不| 欧美在线黄色| 亚洲区一区二区三区| 久久久久久久久久码影片| 欧美视频在线免费看| 亚洲国产日韩欧美在线动漫| 久久精品国产99国产精品| 99精品国产在热久久婷婷| 欧美ed2k| 亚洲激情在线观看视频免费| 久久婷婷亚洲| 欧美一级在线亚洲天堂| 国产精品红桃| 亚洲综合色婷婷| 国产主播一区二区三区四区| 中文国产成人精品久久一| 91久久午夜| 欧美激情在线| 一区二区不卡在线视频 午夜欧美不卡在 | 久久成人18免费网站| 亚洲丝袜av一区| 国产精品久久久| 亚洲欧美国产精品va在线观看| 一区二区国产日产| 国产精品久久一级| 久久大香伊蕉在人线观看热2| 亚洲一区二区伦理| 国产在线欧美日韩| 女人色偷偷aa久久天堂| 欧美国产激情| 亚洲视频欧美视频| 亚洲午夜一区| 国产综合激情| 欧美激情国产日韩| 欧美精品日韩三级| 亚洲影音一区| 欧美一区高清| 亚洲缚视频在线观看| 亚洲黄色在线观看| 国产精品v日韩精品| 久久99伊人| 老司机免费视频久久| 一本久久a久久免费精品不卡| 一区二区三区视频在线 | 国产一级一区二区| 蜜臀99久久精品久久久久久软件| 老鸭窝亚洲一区二区三区| 99国内精品久久| 亚洲欧美国产高清| 亚洲国产精品女人久久久| 99精品免费网| 国产综合欧美| 亚洲毛片在线观看| 国内精品久久久久久久97牛牛| 最新国产精品拍自在线播放| 国产精品色网| 亚洲成色777777在线观看影院| 亚洲全部视频| 亚洲综合色视频| 91久久久久久久久久久久久| 99国产精品视频免费观看| 国模叶桐国产精品一区| 亚洲精品字幕| 曰韩精品一区二区| 一区二区日韩精品| 亚洲国产另类久久久精品极度| 亚洲特色特黄| a91a精品视频在线观看| 久久精品国产精品亚洲| 亚洲香蕉在线观看| 免费高清在线一区| 久久精品国产精品亚洲精品| 欧美日韩免费观看一区| 亚洲第一黄网| 一区二区三区在线看| 亚洲午夜一区二区| 日韩一级大片在线| 免费观看欧美在线视频的网站| 久久久亚洲午夜电影| 国产精品日韩久久久| 99精品国产福利在线观看免费 | 亚洲午夜精品| 欧美插天视频在线播放| 久久人人97超碰精品888| 国产精品亚洲片夜色在线| 99视频有精品| 一二三区精品福利视频| 欧美激情综合网| 亚洲高清在线精品| 亚洲电影免费在线观看| 久久久国产午夜精品| 久久免费视频这里只有精品| 国产一区二区丝袜高跟鞋图片| 一区二区三区视频在线 | 欧美一区二区三区久久精品茉莉花| 欧美二区视频| 亚洲国产裸拍裸体视频在线观看乱了| 狠狠久久婷婷| 久久香蕉精品| 亚洲第一网站| 亚洲国产精品专区久久| 老司机午夜精品| 亚洲日本成人| 亚洲综合国产| 国内偷自视频区视频综合| 久久精品30| 欧美激情精品久久久久久大尺度| 在线观看日产精品| 免费亚洲电影在线观看| 亚洲缚视频在线观看| 亚洲精品影视| 欧美性淫爽ww久久久久无| 亚洲免费视频在线观看| 另类天堂av| 99在线精品观看| 国产伦一区二区三区色一情| 久久电影一区| 欧美国产亚洲精品久久久8v| 艳妇臀荡乳欲伦亚洲一区| 国产精品私房写真福利视频| 尤物在线精品| 欧美国产精品中文字幕| 日韩一级大片| 久久精品一区二区三区四区 | 一本综合久久| 国产午夜精品在线观看| 老牛国产精品一区的观看方式| 99国产精品自拍| 久久久久国产精品厨房| 最新中文字幕一区二区三区| 欧美午夜www高清视频| 欧美专区福利在线| 亚洲日本国产| 久久视频精品在线| a4yy欧美一区二区三区| 国产亚洲一区二区三区在线播放 | 狠狠色丁香婷综合久久| 欧美日韩成人在线| 欧美在线观看一区二区三区| 亚洲韩日在线| 久久福利资源站| 日韩一区二区高清| 狠狠色丁香婷婷综合影院| 欧美三日本三级少妇三2023| 久久av红桃一区二区小说| 一本色道久久99精品综合| 免费一级欧美在线大片| 欧美一区二区在线观看| 亚洲免费观看视频| 精东粉嫩av免费一区二区三区| 欧美视频福利| 欧美精品导航| 欧美成人一区在线| 久久亚洲精品一区二区| 午夜精品福利电影| 亚洲性感激情|