2

我正在尝试使用以下代码控制远程机器上的服务:

// 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);

当从我们本地域中的计算机运行并针对同一域中的计算机时,这可以正常工作,无论是使用当前登录用户的凭据还是使用其他凭据时。

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

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

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

我还测试过使用psexec,它具有相同的症状,即在域计算机之间可以正常工作,但在针对非域计算机时却不行。

我还测试了在目标机器上禁用 RPC over TCP 并重新启动它,因为这被描述为访问被拒绝错误的可能原因,但这似乎没有帮助。我还测试了在目标机器上禁用 Windows 防火墙,但没有改变。

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

4

1 回答 1

6

这似乎是由 Windows Vista 及更高版本的新安全功能引起的。默认情况下,Windows 不会授予远程连接用户完整的管理员权限,除非它是在域内完成的。因此,为了使其正常工作,需要关闭用户帐户控制远程限制,但这当然也会降低您计算机的安全性。

感谢 Hans Passant 建议检查serverfault.com 上发布的类似问题

于 2011-12-12T09:23:58.653 回答