Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.02.19;
Скачать: CL | DM;

Вниз

Как узнать полное имя домена?   Найти похожие ветки 

 
-=Le][=-   (2008-08-24 16:52) [0]

С помощью функций WNetOpenEnum и WNetEnumResource возможно получить список доменов, точнее список их псевдонимов. А как узнать полное имя домена? Тоесть вместо mydomian нужно получить mydomian.com.ru (в моем случае mydomian.local).


 
-=Le][=-   (2008-08-25 18:49) [1]

Есть у меня сеть (на которой прогу тестю) с двух доменов.
Вобщем с помощью функций WNetOpenEnum и WNetEnumResource получаю список псевдонимов: MyDomian1, MyDomian2.
А с помощью функции NetUserEnum можно получить список пользователей, в первый параметр передав имя домена. Но не того что возвращают функции WNetOpenEnum и WNetEnumResource, а полное имя: domian1.com.ru, domian2.local.
Хотя юзвери и пишутся как MyDomian1\UserName но все они принадлежат домену domian1.com.ru, а MyDomian2\UserName соответственно domian2.local.
Немогу найти функции для преобразования псевдонима в полное имя.


 
clickmaker ©   (2008-08-26 13:02) [2]

gethostbyaddr()?


 
-=Le][=-   (2008-08-26 15:52) [3]


> gethostbyaddr()?

1) Не пошло! Говорит ерорр 10093.
2) Это ж winsock! А у меня WinAPI!

У меня не инет, а локалка! Два контроллера домена и машины в доменах!
Задача:
1) Показать список доменов (сделал)
2) По указанному имени домена вывести список пользователей (вывести список могу но не по указанному, так как в пункте 1 получаю псевдонимы (сокращенные названия домена, то что видим в сетевом окружении), а нужно полное имя).
Так что имя машины с DC здесь не причем. Может через Active Directory чтото можно достать?


 
Вариант   (2008-08-27 06:33) [4]


> -=Le][=-   (26.08.08 15:52) [3]

Вызови сперва WSAStartup, а потом уже что-либо из Winsock.
И кстати, если в google поискать по твоему вопросу - тоже будет куча варинатов.


 
-=Le][=-   (2008-08-27 11:48) [5]


> И кстати, если в google поискать по твоему вопросу - тоже
> будет куча варинатов.

Ага! Если упомянешь в запросе слово домен выдает кучу ссылок на купи/продай домен!

> а потом уже что-либо из Winsock.

А без Winsock никак нельзя?


 
Вариант   (2008-08-27 12:32) [6]


> -=Le][=-   (27.08.08 11:48) [5]

http://forum.sources.ru/index.php?showtopic=84259

Обрати внимание на функцию DsGetDcName.....


 
Сергей М. ©   (2008-08-27 13:02) [7]


> У меня не инет, а локалка


А какая разница ?
Или ты хочешь сказать, что на TCP/IP в твоей "локалке" наложено табу ?


 
McFly   (2009-08-26 07:30) [8]

Пацаны, я себе делал, выложу сюда :

function TMainForm.GetCurrentUserAndDomain(var AUser,ADomain:String):Boolean;
type
 _TOKEN_USER = record
  User:TSIDAndAttributes;
  end;
 TTokenUser = _TOKEN_USER;
 TOKEN_USER = _TOKEN_USER;
 PTokenUser = ^TTokenUser;

var hToken:THandle; ptiUser:PTokenUser; cbti:Dword; snu:SID_NAME_USE;
pcchUser,pcchDomain:Dword;
szUser,szDomain:PChar;
begin

result:=false;
hToken:=0;
ptiUser:=nil;
szUser:=nil;
szDomain:=nil;
cbti:=0;
try
// Получаем маркёр доступа вызывающего потока.
if (not OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE, hToken)) then
 begin
 if (GetLastError() <> ERROR_NO_TOKEN) then
  begin
  MainDt.HaveError("Ошибка открытия токена.",0,true);
  exit;
  end;
 end;
// Если маркёра потока не существует, то запрашиваем маркёр процесса.
if (not OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, hToken)) then
 begin
 MainDt.HaveError("Ошибка открытия токена.",0,true);
 exit;
 end;
// Получаем размер информации о пользователе в маркёре.
if (GetTokenInformation(hToken, TokenUser, nil, 0, cbti)) then exit
else
 begin
 // Если длина буфера равна нулю, то ошибка.
 if (GetLastError()<>ERROR_INSUFFICIENT_BUFFER) then exit;
 // Распределяем буфер для информации о пользователе в маркёре.
 ptiUser:=PTokenUser(HeapAlloc(GetProcessHeap(), 0, cbti));
 if (ptiUser=nil) then exit;

 // Получаем информацию о пользователе из маркёра.
 if (not GetTokenInformation(hToken, TokenUser, ptiUser, cbti, cbti)) then exit;
 // Получаем имя пользователя и имя домена по пользовательскому SID.
 pcchUser:=1024;
 szUser:=PChar(AllocMem(pcchUser));
 pcchDomain:=1024;
 szDomain:=PChar(AllocMem(pcchDomain));
 if (not LookupAccountSid(nil, ptiUser.User.Sid, szUser, pcchUser, szDomain, pcchDomain,snu)) then
  begin
  FreeMem(szUser);FreeMem(szDomain);
  exit;
  end;
 AUSer:=StrPas(szUser);
 ADomain:=StrPas(szDomain);
 result:=true;
 end;
except on E:Exception do
begin
MainDt.HaveError(E.Message,0); exit;
end; end;
// Освобождаем ресурсы.
if (hToken<>0) then CloseHandle(hToken);
if (ptiUser<>nil) then HeapFree(GetProcessHeap(), 0, ptiUser);
if szDomain<>nil then FreeMem(szDomain);
if szUser<>nil then FreeMem(szUser);
end;

По существу : Вместо MainDt.HaveError воткните MessageBox.
Ну и - кому надо, тот разберется.



Страницы: 1 вся ветка

Текущий архив: 2012.02.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
2-1320337446
Ant_
2011-11-03 19:24
2012.02.19
Runtime error 216 и процедура DBGridEhSelectionChanged


6-1251739894
bodun
2009-08-31 21:31
2012.02.19
WinSock - UDP протокол: подскажите статейку или пример!


15-1319778083
prestig
2011-10-28 09:01
2012.02.19
файл hosts


2-1320867267
vegarulez
2011-11-09 23:34
2012.02.19
Проверка наличия поля в таблице.


15-1320265804
Юрий
2011-11-02 23:30
2012.02.19
С днем рождения ! 3 ноября 2011 четверг