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

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

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

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

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

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


person Isaac Moses    schedule 21.08.2008    source источник


Ответы (5)


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

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

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

person Shaun Austin    schedule 21.08.2008
comment
@Shaun Austin II: Глобальный уровень аутентификации по умолчанию установлен на Connect, а уровень олицетворения по умолчанию установлен на Identify. Обновление: ... и я попытался перезагрузиться, но проблема осталась. Спасибо за все ваши советы, но я все еще что-то упускаю. - person Isaac Moses; 21.08.2008

Если оба ПК не являются членами одного домена, вам также необходимо предоставить разрешения на запуск и доступ для «АНОНИМНОГО ВХОДА». «Все» это не включает.

person Taneli Waltari    schedule 18.05.2010

Три вещи, которые нужно проверить:

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

2) Убедитесь, что для уровня аутентификации установлено другое значение, кроме "None".

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

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

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

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

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

person Shaun Austin    schedule 21.08.2008

Кстати, какой вкус у вашей коробки с Windows 2000? Профессиональный, Серверный, Расширенный Сервер ...

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

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

person Eli    schedule 14.01.2009

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

Я решил это, выполнив следующие шаги:

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

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

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

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

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

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

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

person Rubinsh    schedule 01.02.2010