Привет всем!
Вопрос такой:
На сервере (W2K) зарегистрирован DCOM, клиент установлен на W98. Клиент должен обрабатывать события с сервера. Для этого в DCOMCNFG надо дать разрешение на доступ к DCOM клиента. !!! Открываю DCOMCNFG, на там на вкладке Default Permissions кнопка Edit default НЕДОСТУПНА (серая то есть

). Как быть?
Здравствуйте, shilnik, Вы писали:
S>Привет всем!
S>Вопрос такой:
S>На сервере (W2K) зарегистрирован DCOM, клиент установлен на W98. Клиент должен обрабатывать события с сервера. Для этого в DCOMCNFG надо дать разрешение на доступ к DCOM клиента. !!! Открываю DCOMCNFG, на там на вкладке Default Permissions кнопка Edit default НЕДОСТУПНА (серая то есть
). Как быть?
Нет под рукой Win 9x, но что-то мне подсказывает, что так оно и должно быть — не умеет 9x рулить правами. Если я не ошибаюсь, то туда даже лазить не надо, я решал в точности такую же задачу некоторое время назад. И решал её следующим способом:
1) через CoInitializeSecurity на клиенте убирал всю секьюрность — CoInitializeSecurity( 0, -1, 0, 0, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE, 0 );
2) на сервере перед вызовом через CoSetProxyBlanket изменял настройки безопасности прокси клиентского объекта — отключал всю секьюрность для него к чёртовой бабушке: CoSetProxyBlanket( eventObj, RPC_C_AUTHN_NONE, RPC_C_AUTHZ_NONE, 0, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, 0, EOAC_NONE );
А вот глобальные настройки DCOM`а на клиентской машине (там вообще Win95 стояла), кажись были выставлены по-умолчанию...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, Mr. None, Вы писали:
MN>Нет под рукой Win 9x, но что-то мне подсказывает, что так оно и должно быть — не умеет 9x рулить правами. Если я не ошибаюсь, то туда даже лазить не надо, я решал в точности такую же задачу некоторое время назад. И решал её следующим способом:
MN>1) через CoInitializeSecurity на клиенте убирал всю секьюрность — CoInitializeSecurity( 0, -1, 0, 0, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE, 0 );
MN>2) на сервере перед вызовом через CoSetProxyBlanket изменял настройки безопасности прокси клиентского объекта — отключал всю секьюрность для него к чёртовой бабушке: CoSetProxyBlanket( eventObj, RPC_C_AUTHN_NONE, RPC_C_AUTHZ_NONE, 0, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, 0, EOAC_NONE );
MN>А вот глобальные настройки DCOM`а на клиентской машине (там вообще Win95 стояла), кажись были выставлены по-умолчанию...
А можно поподробнее, желательно с примерами. Где конкретно эти функции вызывать. У меня серверная часть написана на VB6, клиентская на Delphi 7. Объект из клиента вызывается так:
ITBLoader:=CoclsTBLoad.CreateRemote(mConf.ServerName);
oTBLoader:=TclsTBLoad.Create(Application);
oTBLoader.ConnectTo(ITBLoader);
oTBLoader.OnChangeState:=onChangeState;
nRet:=oTBLoader.Load();
Здравствуйте, shilnik, Вы писали:
S>Здравствуйте, Mr. None, Вы писали:
S>А можно поподробнее, желательно с примерами. Где конкретно эти функции вызывать. У меня серверная часть написана на VB6, клиентская на Delphi 7. Объект из клиента вызывается так:
Клиент (C++ Builder 6.0):
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
CoInitializeEx(NULL, COINIT_MULTITHREADED);
CoInitializeSecurity( 0, -1, 0, 0, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE, 0 );
Application->Initialize();
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->Run();
}
catch(Exception &exception)
{
Application->ShowException(&exception);
}
}
Сервер (M$VC 7.0):
void CEvents::FireOnSomeEvent()
{
// Интерфейс клиентский обработчика
IClientEvents *eventObj = 0;
// Указатель на прокси клиента у меня храниться в GIT`е
m_spEvents.CopyTo(&eventObj);
HRESULT hRes = CoSetProxyBlanket( eventObj,
RPC_C_AUTHN_NONE,
RPC_C_AUTHZ_NONE,
0,
RPC_C_AUTHN_LEVEL_NONE,
RPC_C_IMP_LEVEL_IDENTIFY,
0,
EOAC_NONE );
hRes = eventObj->OnSomeEvent();
eventObj->Release();
}
FireOnAsyncOpen() вызывается на сервере, когда необходимо отправить клиенту сообщение
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.