当前位置: 技术问答>java相关
为什么ExitWindowsEx()不能正常工作呢?
来源: 互联网 发布时间:2017-04-09
本文导语: ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,5000);//关机 WM_QUERYENDSESSION ExitWindowsEx(EWX_REBOOT|EWX_FORCE,1000);//重新启动 WM_QUERYENDSESSION ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,1);//注销 WM_QUERYENDSESSION ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,1000);//等待 WM_QUERYENDSES...
ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,5000);//关机 WM_QUERYENDSESSION
ExitWindowsEx(EWX_REBOOT|EWX_FORCE,1000);//重新启动 WM_QUERYENDSESSION
ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,1);//注销 WM_QUERYENDSESSION
ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,1000);//等待 WM_QUERYENDSESSION
以上只有『ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,1);//注销』函数能正常工作
请问:其他三个为什么不能正常工作呢;我使用的系统是WindowNT 2000
ExitWindowsEx(EWX_REBOOT|EWX_FORCE,1000);//重新启动 WM_QUERYENDSESSION
ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,1);//注销 WM_QUERYENDSESSION
ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,1000);//等待 WM_QUERYENDSESSION
以上只有『ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,1);//注销』函数能正常工作
请问:其他三个为什么不能正常工作呢;我使用的系统是WindowNT 2000
|
关机:
TOKEN_PRIVILEGES tp,tpnewbutignored;
HANDLE hdltokenhandle;
LUID tmpluid;
DWORD lbufferneeded;
HANDLE hdlprocesshandle = GetCurrentProcess();
...........
OpenProcessToken(hdlprocesshandle,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hdltokenhandle);
...........
LookupPrivilegeValue("","SeShutdownPrivilege", &tmpluid);
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = tmpluid;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
...........
AdjustTokenPrivileges(hdltokenhandle,FALSE,&tkp,sizeof(tpnewbutignored),&tkpnewbutignored, &lbufferneeded);
ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE, 0);
OR(或)
ExitWindowsEx(EWX_SHUTDOWN,0);
注:这样做可能不太是好的关机的方法;还需要有版本信息(作为判断使用)和关机的权利
TOKEN_PRIVILEGES tp,tpnewbutignored;
HANDLE hdltokenhandle;
LUID tmpluid;
DWORD lbufferneeded;
HANDLE hdlprocesshandle = GetCurrentProcess();
...........
OpenProcessToken(hdlprocesshandle,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hdltokenhandle);
...........
LookupPrivilegeValue("","SeShutdownPrivilege", &tmpluid);
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = tmpluid;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
...........
AdjustTokenPrivileges(hdltokenhandle,FALSE,&tkp,sizeof(tpnewbutignored),&tkpnewbutignored, &lbufferneeded);
ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE, 0);
OR(或)
ExitWindowsEx(EWX_SHUTDOWN,0);
注:这样做可能不太是好的关机的方法;还需要有版本信息(作为判断使用)和关机的权利
|
以下文章中演示了在Windows NT 4.0/Windows 2000上调用ExitWindowsEx API的方法,并且包含了如何获得SE_SHUTDOWN_NAME权限的方法,您可以参考:
PRB: ExitWindowsEx API Does Not Reboot Windows NT
http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;Q176695
在WindowsNT/2000/XP中,您无法直接通过ExitWindowsEx关闭计算机,而必须先调用AdjustTokenPrivileges 函数使得SE_SHUTDOWN_NAME的privilege为有效,请参考以下文章,他说明了如何关闭Windows NT/2000/XP:
PRB: ExitWindowsEx API Does Not Reboot Windows NT (Q176695)
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q176695
PRB: ExitWindowsEx API Does Not Reboot Windows NT
http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;Q176695
在WindowsNT/2000/XP中,您无法直接通过ExitWindowsEx关闭计算机,而必须先调用AdjustTokenPrivileges 函数使得SE_SHUTDOWN_NAME的privilege为有效,请参考以下文章,他说明了如何关闭Windows NT/2000/XP:
PRB: ExitWindowsEx API Does Not Reboot Windows NT (Q176695)
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q176695
|
这个函数不能完成你要的功能,,
我已经试过了。。
你如果可以,,请告知。。
谢谢!
我用的是别的函数。
你要我可以给你
我已经试过了。。
你如果可以,,请告知。。
谢谢!
我用的是别的函数。
你要我可以给你
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。