我正在尝试使用以下代码控制远程机器上的服务:
// 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 防火墙,但没有改变。
是否需要启用某些设置才能使服务的远程配置正常工作?