Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

конвертация ad path...? [D7]


guest ©   (2012-06-12 12:00:00) 

есть функция выбора пользователей windows, которая возвращает путь к юзеру в формате AD:

в случае раб.группы возвращает:
WinNT://WORKGROUP/XPVIRTUAL/VMAdmin

в случае домена возвращает:
GC://mydomain.ru:3268/CN=Andrew Popov,CN=Users,DC=mydomain,DC=ru

при том, что данный юзер вообще состоит в домене corpmsk и его логин apopov

т.е. нам нужен короткий путь вида domain\user для доменов либо computer\user для рабочих групп

код обработчика работы диалога выбора пользователей:


function ProcessSelectedObjects(DatObj: IDataObject): HRESULT;
var
 StgMed: TStgMedium;
 FmtEtc: TFormatEtc;
 SelLst: PDSSelectionList;
 Index: ULONG;  
 Text: string;
begin

if nil = DatObj then
   Result := E_INVALIDARG
 else
 begin
   with FmtEtc do
   begin

     cfFormat := RegisterClipboardFormat(CFSTR_DSOP_DS_SELECTION_LIST);
     ptd      := nil;
     dwAspect := DVASPECT_CONTENT;
     lindex   := -1;
     tymed    := TYMED_HGLOBAL;
   end;
   Result := DatObj.GetData(FmtEtc, StgMed);
   if Succeeded(Result) then
   begin

     SelLst := PDsSelectionList(GlobalLock(StgMed.hGlobal));

     if SelLst <> nil then
     try
       Text := '';
       for Index := 0 to SelLst.cItems - 1 do
       begin
         Text := Text + Format(
           'Object : %u'#13#10 +
           '  Name : %s'#13#10 +
           '  Class: %s'#13#10 +
           '  Path : %s'#13#10 +
           '  UPN  : %s'#13#10, [
           Index,
           WideCharToString(SelLst.aDsSelection[Index].pwzName),
           WideCharToString(SelLst.aDsSelection[Index].pwzClass),
           WideCharToString(SelLst.aDsSelection[Index].pwzADsPath),
           WideCharToString(SelLst.aDsSelection[Index].pwzUPN)]);
       end;
       ShowMessage(Text);
     finally
       GlobalUnlock(StgMed.hGlobal);
     end
     else
       Result := E_POINTER;

     ReleaseStgMedium(StgMed);
   end;
 end;
end;


как же правильно вытащить из объекта пользователя короткий путь?


guest   (2012-06-12 15:34:00) [1]

с IADsNameTranslate всё получилось, всем спасибо)


guest   (2012-06-12 12:34:00) [2]

нашел такую штуку как ActiveDs_TLB для конвертации адшных имен.. а для раб. групп просто парсить строку... -  это оптимальный путь?


guest   (2012-06-12 12:10:00) [3]

покурил мсдн...

в общем, надо User Principal Name конвертить в Down-Level Logon Name (NT Name)...


Наверх

Титульная страница Поиск, карта сайта Написать письмо