DCOM: CoCreateInstanceEx возвращает E_ACCESSDENIED

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

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

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

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

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

21.08.2008 19:13:00
5 ОТВЕТОВ

Три вещи, чтобы проверить:

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

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

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

РЕДАКТИРОВАТЬ:

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

EDIT2:

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

1
21.08.2008 19:38:37

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

РЕДАКТИРОВАТЬ:

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

2
21.08.2008 19:59:32
@Shaun Austin II: для глобального уровня проверки подлинности по умолчанию установлено значение Connect, а для уровня олицетворения по умолчанию установлено значение Identify. Обновление: ... и я попытался перезагрузиться, и проблема остается. Спасибо за все ваши советы, но я все еще что-то упускаю.
Isaac Moses 21.08.2008 19:59:31

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

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

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

0
14.01.2009 21:33:22

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

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

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

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

  3. Откройте сервисы MMC (запустите dcomcnfg).

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

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

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

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

0
1.02.2010 15:45:06

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

2
18.05.2010 07:37:29