2

我尝试使用下面的代码来控制远程计算机上的服务:远程OpenSCManager失败

// Error checking omitted for brevity 
HANDLE hToken = NULL; 
// user = username with no domain specification 
// domain = targetmachine when targetting computer outside of domain 
LogonUser(user, domain, password, 
    LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &hToken); 

ImpersonateLoggedOnUser(hToken); 

SC_HANDLE hSc = OpenSCManager(targetmachine, 
        SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS); 

从计算机本地域中运行,并在靶向机器时也能正常工作同一个域,在使用当前登录用户的凭证以及使用其他凭证时都是如此。

但是,当我试图锁定不在任何域的计算机时,如果我指定除SC_MANAGER_CONNECT之外的其他任何内容作为所需的访问权限,则OpenSCManager调用将失败,并且访问被拒绝。从位于域外的计算机运行域计算机(使用用户/域/密码组合作为目标计算机上本地管理员的域用户)。从域外的计算机定位域外的计算机不起作用。

用户/密码是针对目标计算机上管理员组的成员,因此帐户权限不应该存在问题。

我已经使用sc -sdshow scmanager检查了scmanager安全描述符,它对于域计算机和非域计算机是相同的。两者都运行Windows 7 64位。

我也测试过使用psexec,它具有相同的症状,即在域计算机之间正常工作,但在定位非域计算机时无法正常工作。

我也测试过在目标机器上禁用TCP over TCP并重新启动它,因为这是described as a possible cause for access denied errors,但这似乎没有帮助。我也测试过在目标机器上禁用Windows防火墙,但是没有改变。

是否需要启用某些设置才能使服务的远程配置正常工作?

+0

您可能会在serverfault.com获得更好的回复 –

+0

@HansPassant:您可能是对的。我有点希望我会在代码中做错某些事情,这很可能会在这里被某个人发现。 – villintehaspam

回答

6

看来这是由Windows Vista及更高版本的新安全功能引起的。默认情况下,Windows不会授予远程连接用户完全管理员权限,除非在域内完成。所以为了这个工作,User Account Control Remote Restrictions需要关闭,但当然这也会降低您的计算机的安全性。

感谢Hans Passant建议检查similar issues posted on serverfault.com

+0

+1感谢您的提示! – fmuecke

+0

关键字:'无法打开SC管理器错误:5消息:访问被拒绝 –