| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Принудительная переинициализация ADSI |
| Автор: mihryak 6.1.2010, 01:17 | ||
Если в приложении начать использовать ADSI, вызвав ADsOpenObject (или ADsGetObject), то после установки нового ADSI-провайдера (IIS в моём случае), работа с ним будет невозможна до перезапуска самого приложения
столкнулся с этим в .нет приложении, доковырялся до плюсов, думаю, что если удастся найти плюсовое решение, то и в .нете его сумею как-нибудь прикрутить вот моя тема в .нетовом разделе, там побольше информации о порядке вызовов и самой проблеме - http://forum.vingrad.ru/forum/topic-286010/anchor-entry2064405/0.html |
| Автор: jonie 6.1.2010, 01:50 | ||
Я очень далек от ldap, но поставил себе ADAM для тестов и попробывал такой код выполнить, всё ок:
или как-нибудь на ADAM можно симитировать проблему? кстати, число 193 непонятно откуда... Добавлено через 3 минуты и 9 секунд кстати и с "IIS://localhost" тоже нет проблем (у меня стоит iis ессно) |
| Автор: mihryak 6.1.2010, 02:01 |
| на начало выполнения кода ИИСа не должно быть в системе, нужно его удалить через компоненты системы, например (через роли дольше получается) после прохождения первого вызова AdsOpenObject нужно повисеть на бряке, устанавливая в это время ИИС, как установится - продолжить работу 193 - это комбинация значений http://msdn.microsoft.com/en-us/library/aa772247%28VS.85%29.aspx, опытным дебажным путём получена во время изучения кода SystemDirectoryServices (с этим значением вызывается) сейчас перепроверил 193 с этим значением получается домен (Domain.GetCurrentDomain()), оно равно AuthenticationTypes.Sealing | AuthenticationTypes.Signing | AuthenticationTypes.Secure для простой DirectoryEntry там просто ADS_SECURE_AUTHENTICATION = 0x1, но это роли не играет, проблема воспроизводится как с 1, так и с 193 |
| Автор: jonie 6.1.2010, 11:28 |
| в общем внутри ADsOpenObject вызывается http://msdn.microsoft.com/en-us/library/aa366938%28VS.85%29.aspx... http://msdn.microsoft.com/en-us/library/ms806997.aspx вот пишут что надо флаг указывать ADS_SERVER_BIND, если указывается явно сервер (как я понимаю у вас указывается). Кстати, можно взять сниффер и посмотреть какие запросы идут (ониж идут по ldap один фиг).... и поразмыслить. Ну, на крайний случай, можно, наверняка, вызвать CoUninitialize + CoInitialize .... Добавлено через 1 минуту и 34 секунды кстати, http://msdn.microsoft.com/en-us/library/aa366119%28VS.85%29.aspx должна быть интересна... |
| Автор: mihryak 6.1.2010, 11:49 |
уже попробовал, не помогло а с остальным - спасибо, буду ковыряться |
| Автор: mihryak 10.1.2010, 02:08 |
| прошу прощения за паузу, отложил на время вопрос LdapGetLastError упорно возрвращает 0 (LDAP_ADMIN_LIMIT_EXCEEDED), даже если её вызвать в самой первой строчке ковыряния с ldap_init и флагами тоже ничего не дали, к сожалению есть подозрение, что работа с ИИСом вообще к ldap не относится (http://msdn.microsoft.com/en-us/library/aa772235%28VS.85%29.aspx) наверное, буду пытаться решить задачу каким-нибудь совершенно иным способом, вот только придумать бы его |