Форум: "Сети";
Текущий архив: 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.006 c