读书人

局域网内远程关机的有关问题

发布时间: 2011-12-31 23:50:30 作者: rapoo

局域网内远程关机的问题
void CShutDownComputerDlg::OnBtnShutdown()
{
// TODO: Add your control notification handler code here
HANDLE hToken = NULL;
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
MessageBox("OpenProcessToken failed!");
}

TOKEN_PRIVILEGES tkp = {0};
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); //调整获得的权限

if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("AdjustTokenPrivileges enable failed!");
}

CString strBuf("由于系统不稳定,WINDOWS将在上的时间面内关机,请做好保存工作!");

//这里第一个参数设置成"局域网\\远程机器名"但是还是关机不成功,为什么啊????
BOOL bResult =InitiateSystemShutdown(NULL, strBuf, 10, TRUE, TRUE);
if(!bResult)
{
MessageBox("InitiateSystemShutdown failed.");
}

tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("AdjustTokenPrivileges disable failed.");
}

ExitWindowsEx(EWX_REBOOT,0);
}

我现在可以关闭我自己的电脑成功,但是关闭局域网的其他电脑就不行,为什么啊???
大家帮我看看这个程序到底哪里出了错???不胜感激!!!




[解决办法]
权限

http://vip.6to23.com/NowCan1/tech/netshutd.htm

读书人网 >VC/MFC

热点推荐