Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ActiveDirectory и VB 6.0 
:(
    Опции темы
Kverter
  Дата 7.11.2013, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.11.2013
Где: г. Зеленоград

Репутация: нет
Всего: нет



Здравствуйте!!!Возник такой вопрос: есть сервер с AD,есть клиент написанный на VB с возможностью подключения dll. Стоит задача написать dll которая возвращает свойства некого объекта из AD.
Такое возможно сделать на VB 6.0? Просто я написал библиотеку на С# но ее ни как не подключить к проекту на VB. 
PM MAIL   Вверх
Akina
Дата 7.11.2013, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



А зачем под такую фигню DLL клепать? эту информацию ты можешь прямо в проекте получать, либо дёрнув за соотв. API-функцию, либо за что-нить более высокое - скажем, через WMI...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Kverter
Дата 7.11.2013, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.11.2013
Где: г. Зеленоград

Репутация: нет
Всего: нет



Затем что уже есть приложуха написанная, к ней нужно дописать dll, вообщем вот что я пока надумал 

Код

Private Sub Command1_Click()
    '
    'Declare Variables
    Dim objUser, objRootDSE
    Dim strDomainDN, strDomain
 
    Set objRootDSE = GetObject("LDAP://CN=xxx,CN=xx,DC=xxxx,DC=xxx,DC=ru")
    strDomainDN = objRootDSE.Get("sAMAccountName")
    strDomain = objRootDSE.Get("userPrincipalName")
    Text2.Text = strDomain
    Text1.Text = strDomainDN
  
End Sub
это все выводит, проблема теперь вывести все группы безопасности в которых состоит пользователь в c# использовал функцию GetAuthorizationGroups().

PM MAIL   Вверх
Akina
Дата 7.11.2013, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



А попробуй покопаться в WMI-класссах... в том же Win32_Groups, к примеру... ну а коли совсем не получится - дёрни тот же фреймворк, ne же функцию, но из VB. Или ещё проще - на VB.Net, для него это занятие так и вовсе родное - с фреймворком общаться.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Kverter
Дата 7.11.2013, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.11.2013
Где: г. Зеленоград

Репутация: нет
Всего: нет



Появился другой вопрос еще,как вернуть имя текущего доменного пользователя? 
PM MAIL   Вверх
Akina
Дата 7.11.2013, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



НА самом деле вопрос-то неоднозначный. Сеанс может быть подключен сразу к нескольким сервисам каталога, причём с разными именами учётных записей.
Думаю, хотя и не убеждён, что нужно будет шерстить пространство имён LDAP:

Добавлено через 19 секунд
PS. Проверить не могу - у меня eDir.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Kverter
Дата 7.11.2013, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.11.2013
Где: г. Зеленоград

Репутация: нет
Всего: нет



Получил полное имя пользователя с помощью след. функции:
Код

Function WMI_UserFullName() As String
    login$ = CreateObject("WScript.Network").UserName   

    Set objWMIService = GetObject("winmgmts://./root/CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", , 48)
    For Each objItem In colItems  
       If objItem.Name = login$ Then WMI_UserFullName = objItem.FullName
    Next
End Function

только долговато,пока все записи переберет,теперь другой вопрос у меня есть имя пользователя в AD(CN=.....),могу ли я вернуть полный путь?
PM MAIL   Вверх
Akina
Дата 7.11.2013, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



А зачем перебор всех аккаунтов? кто мешает сразу получить нужную запись?

Код

WMI_UserFullName =  GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & CreateObject("WScript.Network").UserName & "'", , 48)(0).FullName



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Kverter
Дата 12.11.2013, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.11.2013
Где: г. Зеленоград

Репутация: нет
Всего: нет



Вывыливается ошибка, не могу понять почему, вроде все логично
PM MAIL   Вверх
Akina
Дата 12.11.2013, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



А собирай не всё сразу, а по одному шажку. Я в принципе не убеждён до конца в GetObject.ExecQuery(0)...
Да и текст ошибки мог бы показать.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Kverter
Дата 12.11.2013, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.11.2013
Где: г. Зеленоград

Репутация: нет
Всего: нет



Заработало вот так:
Код

Function WMI_UserFullName() As String
    login$ = CreateObject("WScript.Network").UserName
    'WMI_UserFullName = GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & login$ & "'", , 48)(0).FullName

   Set objWMIService = GetObject("winmgmts://./root/CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & login$ & "'", , 48)
    For Each objItem In colItems
       If objItem.Name = login$ Then WMI_UserFullName = objItem.FullName
    Next
End Function

Можешь помочь еще в поиске пользователя в AD, вот функция получения домена
Код

Public Function Domain() As Variant
    Set objRoot = GetObject("LDAP://rootDSE")
    DomainRoot = objRoot.Get("defaultNamingContext")
    Domain = DomainRoot
    End Function

нужно найти пользователя в этом домене. Имя пользователя возвращает функция WMI_UserFullName.
PM MAIL   Вверх
Kverter
Дата 12.11.2013, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.11.2013
Где: г. Зеленоград

Репутация: нет
Всего: нет



можно обойтись без "winmgmts"??  Вроде как эта штука не работает в windows 2000(а нужно)

Это сообщение отредактировал(а) Kverter - 12.11.2013, 10:07
PM MAIL   Вверх
Kverter
Дата 12.11.2013, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.11.2013
Где: г. Зеленоград

Репутация: нет
Всего: нет



Вроде все сделал, теперь когда закомпилил в exe на моей машине все норм, на другой Run-time error ‘429’ Activex component can't create object.
как я понимаю каких то библиотек не хватает,как узнать каких?
PM MAIL   Вверх
Kverter
Дата 14.11.2013, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.11.2013
Где: г. Зеленоград

Репутация: нет
Всего: нет



Доброго времени суток!!!!Вроде все дописал, все работает, но не на всех машинах. На некоторых возникает 429 при использовании любой из написанных функций. вот пример одной из них:
Код

Public Function GetsAMAccountName() As Variant
On Error GoTo ErrorHandler
Set objRootDSE = GetObject("LDAP://CN=xxx,CN=xxx,DC=xxx,DC=xxxx,DC=ru")
'On Error GoTo ErrorHandler
    strDomainDN = objRootDSE.Get("sAMAccountName")
    GetsAMAccountName = strDomainDN
    GoTo Ends:
ErrorHandler:
MsgBox Err 
   Resume Next
Ends:
End Function


я так понимаю он не создает объект,вопрос почему????
PM MAIL   Вверх
Akina
Дата 14.11.2013, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Неплохо бы указывать, на какой строке код валится. На GetObject? на .Get? Опять же посмотри повнимательнее на http://msdn.microsoft.com/en-us/library/ms...using_good_ldap, запроси расширенный код ошибки...
Кстати, а нафига промежуточная переменная? да ещё не определённая на уровне функции?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1133 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.