Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |
[DCOM] Может кто-то знает... 28.01.02 21:52 Число просмотров: 1016
Автор: + <Mikhail> Статус: Elderman
|
ty dolzhen skohfigurirovat` etot object na servere ispolzui "dcomcnfg.exe"
i posmotri "Identity" tab, pohozhe chto u tebia stoit interactive user to run this object.
|
<programming>
|
[DCOM] Может кто-то знает... 28.01.02 01:32
Автор: Harald Статус: Незарегистрированный пользователь
|
Под Win2k в функции CoInitializeSecurity можно указать дополнительный параметр SOLE_AUTHENTICATION_LIST * pAuthList.
В структуре SEC_WINNT_AUTH_IDENTITY можно указать имя пользователя и пассворд для идентификации пользователя удаленным компонентом.
Таким образом, теоретически, наверное, имелось ввиду, что для запуска удаленного сервера от имени User2\Password2 не обязательно входить в систему на машине клиента под этим пользователем, а можно зайти под пользователем User1\Password1 и просто указать значения User2 и Password2 в структуре SEC_WINNT_AUTH_IDENTITY.
Однако, это не работает... Точнее работает, но не так как нужно. Если даже указать несуществующего пользователя NotExistingUser, которого нет на клиентской машине и нет в ACL удаленного сервера можно создать instance объекта. Просто на самом деле вызов все-таки происходит от имени интерактивного пользователя клиентской машины (User1\Password1), а не от имени User2\Password2. Почему-то игнорируются значения, указанные при инициализации безопасности процесса. Кто-нибудь сталкивался с такой проблемой? Хэлпайте, если поняли что я тут написал :о)
З.Ы. кусок кода примерно такой:
::CoInitialize(NULL);
// Auth Identity structure
SEC_WINNT_AUTH_IDENTITY_W authidentity;
ZeroMemory( &authidentity, sizeof(authidentity) );
WCHAR User[32] = L"NotExistingUser";
WCHAR Domain[32] = L"NotExistingDomain";
WCHAR Password[32] = L"BadPssword";
int UserLength, DomainLength, PasswordLength;
authidentity.User = (unsigned short*)User;
UserLength = wcslen(User);
authidentity.UserLength = UserLength;
authidentity.Domain = (unsigned short*)Domain;
DomainLength = wcslen(Domain);
authidentity.DomainLength = DomainLength;
authidentity.Password = (unsigned short*)Password;
PasswordLength = wcslen(Password);
authidentity.PasswordLength = PasswordLength;
authidentity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
// Auth Info structure
SOLE_AUTHENTICATION_INFO authninfo[2];
ZeroMemory( authninfo, sizeof( authninfo ) );
// NTLM Settings
authninfo[0].dwAuthnSvc = RPC_C_AUTHN_WINNT;
authninfo[0].dwAuthzSvc = RPC_C_AUTHZ_NONE;
authninfo[0].pAuthInfo = &authidentity;
// Kerberos Settings
authninfo[1].dwAuthnSvc = RPC_C_AUTHN_GSS_KERBEROS ;
authninfo[1].dwAuthzSvc = RPC_C_AUTHZ_NONE;
authninfo[1].pAuthInfo = &authidentity;
SOLE_AUTHENTICATION_LIST authentlist;
authentlist.cAuthInfo = 2;
authentlist.aAuthInfo = authninfo;
HRESULT result = CoInitializeSecurity... далее не интересно...
|
 |
[DCOM] Может кто-то знает... 28.01.02 21:52
Автор: + <Mikhail> Статус: Elderman
|
ty dolzhen skohfigurirovat` etot object na servere ispolzui "dcomcnfg.exe"
i posmotri "Identity" tab, pohozhe chto u tebia stoit interactive user to run this object.
|
 |
[DCOM] Может кто-то знает... 28.01.02 11:28
Автор: Sandy <Alexander Stepanov> Статус: Elderman
|
CoInitializeSecurity можно вызвать только ОДИН раз, в твоем случае она скорее всего уже вызывалась самой подсистемой СОМ. Посмотри, что она возвращает, скорее всего это будет RPC_E_TOO_LATE, что как раз и говорит о том, что она уже вызывалась.
А здесь можно подробнее про эту функцию почитать...
|
 |  |
Хм... Вот я и говорю, что не понятно. 28.01.02 14:07
Автор: Harald Статус: Незарегистрированный пользователь
|
Проблема в том, что возвращается S_OK. Я был бы рад увидеть какую-нибудь ошибку. Пока я грешу лишь на то, что удаленный сервер это адрес 127.0.0.1. Опробовать на настоящем удаленном сервере пока нет возможности.
|
 |  |  |
Хм... Вот я и говорю, что не понятно. 28.01.02 15:20
Автор: Sandy <Alexander Stepanov> Статус: Elderman
|
> Проблема в том, что возвращается S_OK. Я был бы рад увидеть > какую-нибудь ошибку. Пока я грешу лишь на то, что удаленный > сервер это адрес 127.0.0.1. Опробовать на настоящем > удаленном сервере пока нет возможности.
А на локальном сервере, на мой взгляд, и не должно работать. Ведь ты уже инициализировал один раз секьюрити для своего DCOM (или система инициализировала), она и берет имеющиеся значения юзер/пассворд. А те, что ты ей даешь - игнорирует. А почему удаленный сервер нельзя использовать? Сетки локальной нет, что-ли? Тогда дай своему компу IP адрес какой-нибудь от балды, типа 10.10.10.10 - и пробуй!
|
|
|