我尝试使用下面的代码来控制远程计算机上的服务:远程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防火墙,但是没有改变。
是否需要启用某些设置才能使服务的远程配置正常工作?
您可能会在serverfault.com获得更好的回复 –
@HansPassant:您可能是对的。我有点希望我会在代码中做错某些事情,这很可能会在这里被某个人发现。 – villintehaspam