-
С помощью функций WNetOpenEnum и WNetEnumResource возможно получить список доменов, точнее список их псевдонимов. А как узнать полное имя домена? Тоесть вместо mydomian нужно получить mydomian.com.ru (в моем случае mydomian.local).
-
Есть у меня сеть (на которой прогу тестю) с двух доменов. Вобщем с помощью функций WNetOpenEnum и WNetEnumResource получаю список псевдонимов: MyDomian1, MyDomian2. А с помощью функции NetUserEnum можно получить список пользователей, в первый параметр передав имя домена. Но не того что возвращают функции WNetOpenEnum и WNetEnumResource, а полное имя: domian1.com.ru, domian2.local. Хотя юзвери и пишутся как MyDomian1\UserName но все они принадлежат домену domian1.com.ru, а MyDomian2\UserName соответственно domian2.local. Немогу найти функции для преобразования псевдонима в полное имя.
-
gethostbyaddr()?
-
> gethostbyaddr()?
1) Не пошло! Говорит ерорр 10093. 2) Это ж winsock! А у меня WinAPI!
У меня не инет, а локалка! Два контроллера домена и машины в доменах! Задача: 1) Показать список доменов (сделал) 2) По указанному имени домена вывести список пользователей (вывести список могу но не по указанному, так как в пункте 1 получаю псевдонимы (сокращенные названия домена, то что видим в сетевом окружении), а нужно полное имя). Так что имя машины с DC здесь не причем. Может через Active Directory чтото можно достать?
-
> -=Le][=- (26.08.08 15:52) [3]
Вызови сперва WSAStartup, а потом уже что-либо из Winsock. И кстати, если в google поискать по твоему вопросу - тоже будет куча варинатов.
-
> И кстати, если в google поискать по твоему вопросу - тоже > будет куча варинатов.
Ага! Если упомянешь в запросе слово домен выдает кучу ссылок на купи/продай домен!
> а потом уже что-либо из Winsock.
А без Winsock никак нельзя?
-
-
> У меня не инет, а локалка
А какая разница ? Или ты хочешь сказать, что на TCP/IP в твоей "локалке" наложено табу ?
-
Пацаны, я себе делал, выложу сюда :
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. Ну и - кому надо, тот разберется.
|