2

Я пытаюсь контролировать службу на удаленном компьютере, используя следующий код:Remote 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); 

Это отлично работает при запуске с компьютера в нашей локальной области и ориентируетесь машину на тот же домен, как при использовании учетных данных от текущего пользователя, так и при использовании других учетных данных.

Однако, когда я пытаюсь настроить таргетинг на машину, которая не находится в каком-либо домене, вызов OpenSCManager завершается с отказом в доступе, если я укажу что-либо, кроме SC_MANAGER_CONNECT, как желаемый доступ. Целевое назначение компьютера домена с компьютера, находящегося за пределами домена, работает (с использованием комбинации user/domain/password для пользователя домена, который является локальным администратором на целевой машине). Целевое задание компьютера за пределами домена с компьютера за пределами домена не работает.

Пользователь/пароль принадлежит к группе администраторов на целевом компьютере, поэтому не должно быть проблем с правами учетной записи.

Я проверил дескриптор безопасности scmanager, используя sc -sdshow scmanager, и он идентичен для компьютера домена и компьютера, не являющегося доменом. Оба устройства работают под управлением Windows 7 64-bit.

Я также тестировал, чтобы использовать psexec, который имеет те же симптомы, то есть отлично работает между компьютерами домена, но не при настройке компьютера, не являющегося доменом.

Я также проверил, чтобы отключить RPC через 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 Manager: 5 Сообщение: доступ запрещен' –