Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2012.02.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
-=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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1320748521
bam
2011-11-08 13:35
2012.02.19
Файл уже открыт 107


15-1319888631
flur
2011-10-29 15:43
2012.02.19
comport


13-1127735614
MeF Dei Corvi
2005-09-26 15:53
2012.02.19
Получение информации о системе


2-1320915674
alex-2011h
2011-11-10 13:01
2012.02.19
Секционированный DbGrid


1-1286340346
aha
2010-10-06 08:45
2012.02.19
вывод данных в XLS виде. Есть необходимость вывода данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский