2016-09-13 12 views
0

Клиент запускает одну из наших программ, обычно запускаемую как услугу, в качестве приложения. Клиент получает следующую ошибку: CoRegisterClassObject():CoRegisterClassObject возвращает ошибку (сеанс 0?)

Класс предназначен для использования в качестве идентификатора безопасности, отличного от вызывающего.

Похоже, какой-то тип сеанса 0 ошибка, но почему должно CoRegisterClassObject() заботиться о сеансе 0? COM должен разрешать как сервисы (сеанс 0), так и приложения (сеанс> 0), и не заботятся о том, что регистрирует, не так ли?

Кроме того, мне не нравится тот факт, что он не находится в списке ошибок, возвращаемых CoRegisterClassObject(), в соответствии с веб-страницей Microsoft doc.

+0

Какие рамки вы используете? Возможно, вы должны добавить это как тег к вопросу. – Hayt

ответ

0

Код ошибки CO_E_WRONG_SERVER_IDENTITY (0x80004015).

За эту страницу:

COM security frequently asked questions

Q6 Почему CoRegisterClassObject обратный CO_E_WRONG_SERVER_IDENTITY? При запуске службы сервера ATL 1.1 в виде файла .exe я получаю CO_E_WRONG_SERVER_IDENTITY из CoRegisterClassObject. (Класс настроен на запуск в качестве идентификатора безопасности, отличный от вызывающего.) Кажется, это происходит, если я пропущу CoInitializeSecurity или нет. Он не работает как служба или как .exe-файл.

A. Многие службы отлаживаются путем запуска их в качестве консольных приложений в интерактивном идентификаторе пользователя. Поскольку служба уже зарегистрирована для работы с другим идентификатором (настраивается апплетами панели управления Службы), OLE завершает вызовы CoRegisterClassObject и RunningObjectTable :: Register (ROTFLAGS_ALLOWANYCLIENT), возвращая CO_E_WRONG_SERVER_IDENTITY для обеспечения безопасности и предотвращения вредоносных серверов от подмены сервера , Для отладки, запустив в идентичности интерактивного пользователя, внести следующие изменения в записи реестра сервера, чтобы предотвратить эти неудачи:

• Чтобы предотвратить отказ CoRegisterClassObject, удалите следующие именованные значения:

[HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}] 
"LocalService"="HelloOleServerService" 

• Для того, чтобы предотвратить отказ IRunningObjectTable :: Регистрация (ROTFLAGS_ALLOWANYCLIENT), выполните следующие действия:

  1. Удалите следующие значения имени:

    [HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}] 
    "LocalService"="HelloOleServerService" 
    
  2. Затем добавьте следующее значение имени:

    [HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}] 
    "RunAs"="Interactive User" 
    

Вы muist восстановить измененные записи реестра после отладки.

Я предполагаю, что вместо этого вы должны заменить {0bf52b15-8cab-11cf-8572-00aa00c006cf} фактическим CLSID вашего COM-объекта.

Смежные вопросы