Remote OpenSCManager fails with access denied
我试图使用以下代码控制远程计算机上的服务:
1 2 3 4 5 6 7 8 9 10 11 | // 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); |
从本地域中的计算机运行并在同一域中将计算机定位到目标计算机时,无论使用当前登录用户的凭据还是使用其他凭据,此方法都可以正常工作。
但是,当我尝试定位不在任何域上的计算机时,如果我将
用户/密码用于目标计算机上的管理员组的成员,因此帐户权限应该没有问题。
我已经使用
我还测试了使用具有相同症状的psexec,即在域计算机之间可以正常工作,但在定位非域计算机时却不能。
我还测试了在目标计算机上禁用RPC over TCP并重新启动它,因为这被描述为访问被拒绝错误的可能原因,但这似乎无济于事。我还测试了禁用目标计算机上的Windows防火墙,但没有任何更改。
为了使服务的远程配置生效,是否需要启用某些设置?
看来这是由Windows Vista及更高版本的新安全功能引起的。 默认情况下,Windows不会授予远程连接用户完整的管理员权限,除非在域中进行。 因此,为使此功能正常运行,需要关闭"用户帐户控制远程限制",但这当然也会降低计算机的安全性。
感谢Hans Passant建议检查在serverfault.com上发布的类似问题。