2012-03-02 3 views
2

У меня есть COM-сервер, написанный на C++, запущенный на некотором компьютере в сети. Клиенты могут выполнять удаленные вызовы с других компьютеров. Как проверить внутри метода COM-сервера, если данный вызов является локальным (с того же компьютера) или удаленным?Проверьте, является ли вызов COM-метода локальным или удаленным

+0

Вы можете быть лучше спрашивать ваш реальный вопрос. С какой проблемой вы сталкиваетесь, что думаете, что ответ на этот вопрос будет решаться? –

ответ

2

Если вы не используете службу проверки подлинности сертификата на основе, я предлагаю вам взглянуть на QueryBlanket

IServerSecurity::QueryBlanket([out] DWORD *pAuthnSvc..., [out] void** pPrivs, ...) 

В зависимости от фактической службы аутентификации, pPrivs может представлять собой указатель на объект типа SEC_WINNT_AUTH_IDENTITY , Эта структура содержит имя домена клиента. Таким образом, вы можете легко проверить, соответствует ли он серверу.

Чтобы получить экземпляр объекта безопасности сервера можно использовать следующий код:

HRESULT hr; 
CComQIPtr<IServerSecurity> ss; 
if(FAILED(hr = ::CoGetCallContext(__uuidof(IServerSecurity), reinterpret_cast<void**>(&ss)))) 
    throw com_exception(hr, "Unable to retrieve the server security object"); 
Смежные вопросы