Всем привет!
Суть проблемы. Есть приложение, которое запускается под специально созданной локальной учетной записью Windows Z1 в виде службы Windows. Оно при своей работе использует несколько COM-объектов, внутрипроцессных и внепроцессных. В норме внепроцессные запускаются посредством системного DllHost.exe и все прекрасно. Однако, требуется некоторые из них запустить под другой учетной записью, скажем, Z2. Делаю с помощью Wizard-а ATL шаблон сервиса (службы), в нем модифицирую код функции Run():
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
// If you are running on NT 4.0 or higher you can use the following call
// instead to make the EXE free threaded.
// This means that calls come in on a random RPC thread
// HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
_ASSERTE(SUCCEEDED(hr));
// This provides a NULL DACL which will allow access to everyone.
CSecurityDescriptor sd;
sd.InitializeFromThreadToken();
// Мой код, который, если верить статье Владислава Чистякова "Защита в DCOM/COM+", полностью отключает защиту
hr = CoInitializeSecurity(NULL, -1, NULL, NULL,
RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL);
CoUninitialize();
}
В настройках "Службы компонентов\...\Настройка DCOM" даю права на работу с этим сервисом на всех закладках Z1, указываю, что запускаться он будет под Z2. Запускаю сервис с COM-объектом, а потом основной сервис. При попытке получить интерфейс CoCreateInstance возвращает -2147024891 (0x80070005), что оначает "Отказано в доступе".
Что происходит и что делать???
С уважением, Андрей.
Здравствуйте, Андрей Д, Вы писали:
АД>За прошедшее время поискал в Нете в конференциях разработчиков, ничего конкретного не нашел.
Непростое это дело — настройка правка для DCOM
Посмотрите в сторону использования утилиты dcomcnfg.exe
А вообще по поводу безопасности СОМ на rsdn была большая подробная статья. Поищите. Может быть там найдете ответы на свои вопросы
Иногда бывают проблемы с использованием СОМ объектов, у которых нет соответствующих прав на запуск (Launch permission).
При этом права на использование (доступа) к СОМ объекту могут быть выставлены правильно
Налетел на те же проблемы. Есть служба, внутри COM-сервер, надо чтобы все пользователи могли обращаться к объектам.
Статью про DCOM читал, но видать туплю, объясните как надо настроить права чтобы провернуть такое?
Здравствуйте, IRaven, Вы писали:
IR>Здравствуйте, Андрей Д, Вы писали:
IR>Налетел на те же проблемы. Есть служба, внутри COM-сервер, надо чтобы все пользователи могли обращаться к объектам. IR>Статью про DCOM читал, но видать туплю, объясните как надо настроить права чтобы провернуть такое?
Разобрался. Напрямую регестрирую моникер в ROT, притом надо указать оба параметра ROTFLAGS_ALLOWANYCLIENT, ROTFLAGS_REGISTRATIONKEEPSALIVE.
Вопрос 2: как програмно настроить безопасность DCOM?