DCOM: CoCreateInstanceEx возвращает E_ACCESSDENIED - PullRequest
5 голосов
/ 21 августа 2008

Я работаю над приложением DCOM с сервером и клиентом на двух машинах, на обоих из которых запущен WinXP с пакетом обновления 2. На обеих машинах я вошел в систему с одинаковыми именем пользователя и паролем.

Когда клиент на одном компьютере вызывает CoCreateInstanceEx, запрашивая на другом компьютере запустить приложение сервера, он возвращает E_ACCESSDENIED.

Я попытался войти в свойства компонентов серверного приложения в dcomcnfg и дать всем полное разрешение на все, но это не помогло.

Что мне нужно сделать, чтобы этот вызов был успешным?

Обновление: Когда серверное приложение работает на компьютере под управлением Windows 2000, я не получаю эту ошибку; CoCreateInstanceEx возвращает S_OK.

Ответы [ 5 ]

2 голосов
/ 18 мая 2010

Если ПК не являются членами одного и того же домена, вам также необходимо предоставить права на запуск и доступ к «ANONYMOUS LOGON». «Все» не включают это.

2 голосов
/ 21 августа 2008

Правильно, поэтому, если ваш уровень аутентификации установлен по умолчанию. Какой уровень аутентификации установлен в настройках по умолчанию? Просто из интереса. (хотя тот факт, что он работает с блоком 2000, вероятно, делает это избыточным)

EDIT:

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

1 голос
/ 21 августа 2008

Три вещи для проверки:

1) Вернитесь к dcomcnfg и попробуйте убедиться, что не только безопасность доступа, но и раздел «разрешения на запуск» содержат соответствующих пользователей или группы безопасности.

2) Убедитесь, что для уровня аутентификации установлено значение, отличное от «Нет»

3) Также убедитесь, что местоположение на диске, на котором расположен компонент, действительно доступно для учетной записи, настроенной в заданных вами разрешениях безопасности.

EDIT:

Еще один: Вы тоже сначала вызываете CoInitialiseSecurity ()? Это звонит в колокол!

EDIT2:

На основе вашего обновления: попробуйте полностью сбросить брандмауэры на обеих машинах с XP и посмотрите, будет ли это иметь значение. Возможно, вам придется пропустить DCOM явно.

0 голосов
/ 01 февраля 2010

У меня была точно такая же проблема. Проблема возникает на компьютерах с ОС XP SP2 + или более поздней.

Я решил, используя следующие шаги:

  1. Убедитесь, что и клиентский, и серверный компьютеры находятся в одном домене.

  2. Вам нужно использовать одного и того же пользователя на обоих компьютерах, или, если вы хотите использовать разных пользователей на клиенте и сервере, вы должны убедиться, что и у клиента, и у сервера есть права доступа на обоих компьютерах (в частности - убедитесь, что они являются членами группы пользователей распределенного COM.

  3. открыть MMC служб Componenet (запустить dcomcnfg).

  4. Перейдите в раздел «Мой компьютер» -> «Свойства» -> «Свойства по умолчанию» и убедитесь, что «Уровень имперсации по умолчанию» «Определить»

  5. Перейдите на вкладку «Безопасность COM», в разделе «Права доступа» и «Разрешения на запуск и активацию» перейдите к «Изменить ограничения» и добавьте разрешения «Локальный» и «Удаленный» для клиентов и пользователей сервера вашего приложения COM

  6. Убедитесь, что у вас есть исключение брандмауэра в порту 135 для вашего приложения ...

Надеюсь, это вам поможет!

0 голосов
/ 15 января 2009

Какой вкус у вашей Windows 2000, кстати? Professional, Server, Adv Server ...

Кроме того, существует ли разница между членством в домене между двумя (один в домене, другой нет, в разных доменах и т. Д ...?)

Еще одна вещь - в журнале системных событий время от времени появляются ошибки DCOM - особенно при создании объектов - вы проверяли там подсказки?

...