DEcf什么时候关关站

-> 关闭计算机就这几招
本类阅读TOP10
分类导航
关闭计算机就这几招
:月光软件站
加入时间
:2005-2-28 月光软件站 关闭计算机就这几招
注:完全翻译整理自
。非常简单
ShutDown
Windows
系统的一种基本服务。功能上有“关闭系统”,“注销用户”,“锁定工作站”
中操作。
中提供了几个函数,来对此服务进行调用。
“关闭系统”功能使计算机可以被安全的关闭。所有在文件系统里缓冲的内容都被强制写入磁盘。然后,显示相应的对话框,提示用户计算机将被关闭或者已经准备好被关闭。可选的情况一般是计算机在关闭后重起,而不是直接切断电源。
如果一个进程调用“注销”功能函数,则该进程所在的安全环境范围内的所有进程都被终止,使当前的用户退出系统。一个登陆对话框被显示,期待新用户的登陆。
“锁定工作站”功能使你可以在离开计算机的时候,保护计算机屏幕不被未授权的用户看到。要解除锁定,必须用管理员或着授权用户的帐号和密码重新登陆。
如何关闭系统:
程序可以用两种方式关闭本地或远程计算机
直接关闭系统
关闭系统并重启
Windows NT/2000
及后续版本
程序必须拥有
SE_SHUTDOWN_NAME
权限才能成功调用关闭函数。
ExitWindowsEx
函数可以用来关闭系统。如函数成功调用,系统对每个窗口发送
WM_QUERYENDSESSION
消息,询问窗口所属的程序是否可以被终止。收到此消息的程序应该进行响应,清除环境释放资源,然后返回
表示自己可以被终止。然而调用
ExitWindowEx
的时候如果指定了
EXW_FORCE
,则系统强行终止相关的进程并关闭,这样可能导致数据的丢失。
这是一段在
NT/2000
ExitWindowEx
关闭系统的程序(强制关闭所有程序)。
windows95/98/me
中直接调用
ExitWindowEx
------------------------------------------------------------------------------------------------------------
HANDLE hToke TOKEN_PRIVILEGES tk // Get a token for this proce .
if (!OpenProce Token(GetCurrentProce (),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &am hToken))
error("OpenProce Token");
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&am tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this proce .
AdjustTokenPrivileges(hToken, FALSE, &am tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
// Ca ot test the return value of AdjustTokenPrivileges.
if (GetLastError() != ERROR_SUCCESS)
error("AdjustTokenPrivileges");
// Shut down the system and force all a licatio 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 hToke // handle to proce token
TOKEN_PRIVILEGES tk // pointer to token structure
BOOL fResult; // system shutdown flag
// Get the current proce token handle so we can get shutdown
// privilege.
if (!OpenProce Token(GetCurrentProce (),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &am hToken))
ErrorHandler("OpenProce Token failed.");
// Get the LUID for shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&am tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get shutdown privilege for this proce .
AdjustTokenPrivileges(hToken, FALSE, &am tkp, 0,
(PTOKEN_PRIVILEGES) NULL, 0);
// Ca ot test the return value of AdjustTokenPrivileges.
if (GetLastError() != ERROR_SUCCESS)
ErrorHandler("AdjustTokenPrivileges enable failed.");
// Di lay the shutdown dialog box and start the time-out countdown.
fResult = InitiateSystemShutdown(
NULL, // shut down local computer
"Click on the main window and pre \
the Escape key to cancel shutdown.", // me age to user
20, // time-out period FALSE, // ask user to close a TRUE); // reboot after shutdown
if (!fResult)
ErrorHandler("InitiateSystemShutdown failed.");
// Disable shutdown privilege.
tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &am tkp, 0,
(PTOKEN_PRIVILEGES) NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
ErrorHandler("AdjustTokenPrivileges disable failed.");
-----------------------------------------------------------------
AbortSystemShutoown
InitialSystemShutdown
操作的代码如下(记住要在延时结束前执行才能起作用)
// Get the current proce token handle so we can get shutdown
// privilege.
if (!OpenProce Token(GetCurrentProce (),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &am hToken))
ErrorHandler("OpenProce Token failed.");
// Get the LUID for shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&am tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get shutdown privilege for this proce .
AdjustTokenPrivileges(hToken, FALSE, &am tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
// Ca ot 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, &am tkp, 0,
(PTOKEN_PRIVILEGES) NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
ErrorHandler("AdjustTokenPrivileges disable failed.");
关于用户权限(
Privileges
)的详细信息,可以参见
如何注销当前用户
可以使用
ExitWindows
ExitWindowsEx
函数注销当前用户。
在默认的情况下,当程序调用
ExitWindows
ExitWindowsEx
注销的时候,
WM_QUERYENDSESSION
消息也被发送到系统内的每个窗口。窗口所属的程序响应此消息并且返回
表示可以被关闭,如果任意一个程序返回
,注销操作将被取消。
Windows NT/2000
以及后续版本
当一个程序响应
WM_QUERYENDSESSION
那么它就会立刻接受到
WM_ENDSESSION
消息并马上结束,而不管其他的程序是怎么样回应
WM_QUERYENDSESSION
消息的。
Windows 95/98/Me
只有当系统内所有的程序都对
WM_QUERYENDSESSION
消息回应
之后,他们才会一起接受到
WM_ENDSESSION
消息,然后结束。
如果要强制关闭所有的程序,使用
ExitWindowsEx
函数,指定
EXW_FORCE
标志。如果这样做,系统不发送
WM_QUERYENDSESSION
消息,而直接终止正在运行的程序。
在注销的时候,系统还向每一个进程发送
CTRL_LOGOFF_EVENT
控制码。控制台程序可以注册一个
HandlerRoutine
例程来处理这个控制码(使用
SetCo oleCtrlHandler
函数)。
(更多的关于控制台的控制码,参见MSDN里“HandlerRoutine”有关章节)
综上所述:只有所有的程序都允许退出,注销操作才能成功。如果某一个程序响应
WM_QUERYENDSESSION
FALSE ,
用户则不能被注销。这样就可以写出防止用户注销或关闭的程序(非强制情况)。
这是注销当前用户的代码
ExitWindows(0, 0);
WM_QUERYENDSESSION
消息,如果在弹出消息框里选择
则取消注销。
case WM_QUERYENDSESSION:
r = Me ageBox(NULL, "Shut down?","WM_QUERYENDSESSION", MB_YESNO);
// Return TRUE to allow shutdown, FALSE to stop.
return r == IDYES;
如何锁定工作站
LockWorkStation
函数即可锁定工作站。系统会显示一个锁定对话框,告诉用户此工作站正在使用并且已经被锁定,可以被执行锁定的用户或管理员解锁,解锁的方式是按下
CTRL_ALT_DEL
并用正确的帐号和密码登陆。
LockWorkStation
函数成功调用的条件是:
调用者必须是运行在系统交互桌面上的一般进程。
必须已经有用户登陆到系统
工作站未被锁定。
接受关闭通知
拥有正常窗口和消息队列的程序通过
WM_QUERYENDSESSION
WM_ENDSESSION
消息获得关闭通知。
控制台则是在其控制流程(
Handle Routines
)里接受关闭通知。要注册一个控制台控制流程
应该使用
SetCo oleCtrlHandler
服务程序在其控制流程里接受退出通知。要注册一个服务控制流程,应该使用
RegisterServiceCtrlHandlerEx
关闭系统函数列表
函数功能描述
AbortSystemShutdown
InitSystemShutdown
引起的系统关闭操作
ExitWindows
注销当前用户
ExitWindowsEx
注销用户,关闭计算机,关闭计算机并且重启
InitiateSystemShutdown
发起关闭系统操作,可以选择关闭后重启
InitiateSystemShutdownEx
InitiateSystemShutdown
,扩展的功能是可以在系统事件日志(事件号
)中写入一个用户指定的双字节码
LockWorkStation
锁定工作站
系统关闭消息
WM_ENDSESSION
表示是否要终止程序。如果是
指令该程序终止,否则是
表示用户注销还是系统被关闭。如果此参数包含
ENDSESSION_LOGOFF
在这里是按位取值的)位,则表示是用户注销
Windows 2000
以及后续版本
lParam ==0
,则表示系统被关闭。
程序收到此消息,如果
在完成消息处理后,程序随时都有可能被关闭。所以在此消息的处理过程里,应该尽量完成程序销毁前所需要进行的工作。
WM_QUERYENDSESSION
保留,未使用
WM_ENDSESSION;
DefWindowProc
默认返回:
相关文章
相关软件公告:承诺:永久稳定无信任域!。2G电信带宽保障,高速无缓冲,求片快速响应!欢迎采集.
技术(非站长勿入)QQ群三:105092015,
江城学院的同学请单独加
:158321695,群二:42376816(满), 群64201803(已满)
全站搜索
欢迎来到久久影音资源站
当前位置:
>> 智勇大冲关
智勇大冲关
主要演员:李锐 曹颖 杨乐乐 YOYO 金小鱼
                  
导演: 不详
所属分类:综艺片
影片语言:国语
影片地区:大陆
影片状态:20100930
加入时间:2010-10-1 15:38:0
无法观看请***最优版本
,看的人越多越流畅!
智勇大冲关:剧情介绍
      《智勇大冲关》是一档全民体验竞技节目。节目极大的将参与者的潜能举行无限的掘客,颠末“智”、“勇”的磨练,使他们逾越自我,效果空想。 来源:久久影音
全选 主题精选
友情连接
本站只提供影片播放测试,如果您喜欢请购买正版.本站不承担任何法律责任.如有纠纷请联系管理员信箱:x u hine@gmail.com。
Copyright © 2009
All Rights Reserved.
青豆工作组旗下网站

参考资料