InitiateSystemShutdown()函数""远程""关机问题(求助!!!!)
InitiateSystemShutdown在条件许可的时候可以关闭指定的计算机。
要关闭本地机器,调用进程必须具有SE_SHUTDOWN_NAME特权;要关闭远程机器,调用进程必须具有SE_REMOTE_SHUTDOWN_NAME特权。
缺省的,用户可以使他登陆到的对本地机器的SE_SHUTDOWN_NAME特权有效,管理员可以使SE_REMOTE_SHUTDOWN_NAME特权有效。
问题一:如何得到 SE_REMOTE_SHUTDOWN_NAME 特有权限????
在调用InitiateSystemShutdown之前必须先使对应的特权有效,见如下源代码:
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//得到进程权标
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES and TOKEN_QUERY,&hToken))
return;
//得到关机的特权的LUID
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;//设置一个特权
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//得到进程关机的特权
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
//不应该只是测试AdjustTokenPrivileges的返回值
if (GetLastError() != ERROR_SUCCESS)
return;
调用AbortSystemShutdown()也要做一样的准备工作`。
//见这句 LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
也只是得到本机的吧!!!
问题是我想在局域网中远程关闭另一台主机.在那台主机上没有装任何程序.
在网上搜了一下这个.
//登录用户,取得访问令牌
LogonUser( pName, pDomain, pPasswd,LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, &hLogonToken );
// 复制访问令牌
DuplicateTokenEx( hLogonToken, TOKEN_ALL_ACCESS, NULL,
SecurityIdentification, TokenPrimary, &hAdminToken );
ImpersonateLoggedOnUser( hAdminToken );
// 打开关联于线程的访问令牌
OpenThreadToken( GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY, TRUE, &hThreadToken );
// 获得SE_SHUTDOWN_NAME的LUID
LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid );
// 设置访问令牌的属性
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 在此进程中得到关机特权
AdjustTokenPrivileges( hThreadToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0 );
// 执行关机命令
InitiateSystemShutdown( pRemoteName, pMessage, m_timeOut, FALSE, FALSE );
问题二:能否解释一下上述代码?
上述代码得到了SE_REMOTE_SHUTDOWN_NAME 特有权限吗?
不知道哪位高手有实现了远程关机的源码给指教一下?
[解决办法]
Details see MSDN in Platform SDK: Security
不过remote shutdown似乎在xp2下无效哦.
[解决办法]
呵呵,专业做关机,以前旧版本用那个函数,现在不用了,而且也没有太深入了解,不好意思...
============================================================
最新自动计时定时开关机的软件 Timer Explorer 6.0 发布
下载主页: http://www.timeearth.com
============================================================