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

Вниз

Имя домена   Найти похожие ветки 

 
Чапаев ©   (2006-08-25 15:03) [0]

Как получить имя домена, в который в данный момент залогинен пользователь? Как получить список доступных доменов?


 
BiN ©   (2006-08-25 15:18) [1]


> Чапаев ©   (25.08.06 15:03)  
>
> Как получить имя домена, в который в данный момент залогинен
> пользователь? Как получить список доступных доменов?


1) Проще всего через GetUserNameEx, а также можно через маркеры безопасности.
2) С грехом пополам через WNetEnumResource или же IDsBrowseDomainTree.


 
Тфьу   (2006-08-25 15:22) [2]

Еще можно через ADO. Раньше так писал. К сожалению, сейчас не вспомню синтаксис.


 
clickmaker ©   (2006-08-25 16:02) [3]

HKEY_CURRENT_USER\Volatile Environment - USERDNSDOMAIN


 
Чапаев ©   (2006-08-25 16:21) [4]

> Проще всего через GetUserNameEx

Точно, работает. Я просто с ней малость неправильно работал вначале, в результате психанул и задал вопрос в форум. :-)


> HKEY_CURRENT_USER\Volatile Environment - USERDNSDOMAIN

Спасибо, тоже хороший вариант.

А насчёт перечисления доступных доменов есть идеи?


 
BiN ©   (2006-08-25 16:30) [5]


> Чапаев ©   (25.08.06 16:21) [4]
>
>
> А насчёт перечисления доступных доменов есть идеи?
>

а чем пункт 2) в [1] не устраивает?


 
Rouse_ ©   (2006-08-25 16:44) [6]

http://rouse.front.ru/domaininfo.zip
Там есть получение имени домена, контроллера домена, DNS имя и доверенных доменов.


 
Чапаев ©   (2006-08-25 17:03) [7]

> а чем пункт 2) в [1] не устраивает?

Устраивает! И работает, что немаловажно. :-) Я просто сначала решил, что это второй вариант решения первого вопроса...


 
Чапаев ©   (2006-08-25 17:05) [8]

> [6] Rouse_ ©   (25.08.06 16:44)

Спасибо. Заодно и решает следующий вопрос -- как перечислить всех пользователей домена. :-)


 
Чапаев ©   (2006-08-25 17:06) [9]

> перечислить всех пользователей домена

Первоначально собирался это делать с помощью NetUserEnum(). Сработало бы?


 
Rouse_ ©   (2006-08-25 17:54) [10]

NetUserEnum? Хм, не знаю не проверял... Наверное заблокированных бы не отобразило, хотя фиг знает, нужно проверять :)


 
BiN ©   (2006-08-25 18:02) [11]


> Чапаев ©   (25.08.06 17:06) [9]
>
> > перечислить всех пользователей домена
>
> Первоначально собирался это делать с помощью NetUserEnum().
>  Сработало бы?

Прекрасно работает. Просто в качестве servername нужно указывать имя контроллера домена (см. NetGetDCName, DsGetDcName или NetGetAnyDCName)
Заблокированных тоже показывает.


 
Чапаев ©   (2006-08-25 18:15) [12]

Хорошо... Заблокированные, в принципе, не нужны. Хотя и не помешают.


 
Чапаев ©   (2006-10-03 12:47) [13]

> HKEY_CURRENT_USER\Volatile Environment - USERDNSDOMAIN

Понадобилось NetBIOS-имя. Прочёл DNS-имя, затем в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DomainCache нашёл соответствие NetBIOS<->DNS. Насколько это идеологически правильно?


 
Игорь Шевченко ©   (2006-10-03 13:52) [14]

В NETAPI32.DLL есть масса интересных функций.

Например, для ответа на первый вопрос одна из функций так и называется:

NetpGetDomainName


 
Чапаев ©   (2006-10-03 14:29) [15]

> [14] Игорь Шевченко ©   (03.10.06 13:52)

А почему в MSDN такой функции не вижу? Ни NetpGetDomainName, ни NetGetDomainName.


 
Игорь Шевченко ©   (2006-10-03 14:34) [16]

Чапаев ©   (03.10.06 14:29) [15]


> А почему в MSDN такой функции не вижу?


NtCreateNamedPipeFile ты там тоже не видишь, однако ж она есть.

unit HSNetApi;

interface
uses
 Windows;

function NetApiBufferFree (lpBuffer : Pointer) : Integer; stdcall;
function NetpGetDomainName (lpBuffer : Pointer) : Integer; stdcall;
function NetpGetComputerName (lpBuffer : Pointer) : Integer; stdcall;

implementation
uses
 SysUtils;

{ NETAPI32.DLL functions }
type
 TNetApiBufferFree =
   function (lpBuffer : Pointer) : Integer; stdcall;
 TNetpGetDomainName =
   function (lpBuffer : Pointer) : Integer; stdcall;
 TNetpGetComputerName =
   function (lpBuffer : Pointer) : Integer; stdcall;

const
 netapidllname = "netapi32.dll";

var
 NetApiDllHandle: THandle;
 _NetApiBufferFree : TNetApiBufferFree;
 _NetpGetDomainName : TNetpGetDomainName;
 _NetpGetComputerName : TNetpGetComputerName;

function InitNetApi : Boolean;
begin
 if NetApiDllHandle = 0 then
   if Win32Platform = VER_PLATFORM_WIN32_NT then begin
     NetApiDllHandle := LoadLibrary(NetApidllname);
     if NetApiDllHandle <> 0 then begin
       @_NetApiBufferFree := GetProcAddress(NetApiDllHandle,
         "NetApiBufferFree");
       @_NetpGetDomainName := GetProcAddress(NetApiDllHandle,
         "NetpGetDomainName");
       @_NetpGetComputerName := GetProcAddress(NetApiDllHandle,
         "NetpGetComputerName");
     end;
   end;
 Result := (NetApiDllHandle <> 0);
end;

function NetApiNotImplemented : Integer;
begin
 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
 Result := ERROR_PROC_NOT_FOUND;
end;

function NetApiBufferFree (lpBuffer : Pointer) : Integer; stdcall;
begin
 if InitNetApi and Assigned(_NetApiBufferFree) then
   Result := _NetApiBufferFree(lpBuffer)
 else
   Result := NetApiNotImplemented;
end;

function NetpGetDomainName (lpBuffer : Pointer) : Integer; stdcall;
begin
 if InitNetApi and Assigned(_NetpGetDomainName) then
   Result := _NetpGetDomainName(lpBuffer)
 else
   Result := NetApiNotImplemented;
end;

function NetpGetComputerName (lpBuffer : Pointer) : Integer; stdcall;
begin
 if InitNetApi and Assigned(_NetpGetComputerName) then
   Result := _NetpGetComputerName(lpBuffer)
 else
   Result := NetApiNotImplemented;
end;

initialization
finalization
 if NetApiDllHandle <> 0 then
   FreeLibrary(NetApiDllHandle);
end.


 
clickmaker ©   (2006-10-03 14:38) [17]


> function NetApiNotImplemented : Integer;
> begin
>  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
>  Result := ERROR_PROC_NOT_FOUND;
> end;

Хм... а зачем 2 разных кода?


 
Игорь Шевченко ©   (2006-10-03 14:51) [18]

clickmaker ©   (03.10.06 14:38) [17]

Ошибся наверное, когда писал. Бывает :)


 
Rouse_ ©   (2006-10-03 15:03) [19]


> А почему в MSDN такой функции не вижу?

А ты ее ручками можешь написать: LsaOpenPolicy с флагом POLICY_VIEW_LOCAL_INFORMATION + LsaQueryInformationPolicy со вторым параметром PolicyPrimaryDomainInformation и получишь структуру типа:
typedef struct _POLICY_PRIMARY_DOMAIN_INFO {  
 LSA_UNICODE_STRING Name;  
 PSID Sid;
} POLICY_PRIMARY_DOMAIN_INFO, *PPOLICY_PRIMARY_DOMAIN_INFO;



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

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

Наверх




Память: 0.51 MB
Время: 0.04 c
15-1169771252
IMHO
2007-01-26 03:27
2007.02.18
Как создавать файлы Дежавю


2-1170329011
Garacio
2007-02-01 14:23
2007.02.18
адрес переменной в реестре


2-1170280250
bagos
2007-02-01 00:50
2007.02.18
alt+f4


2-1169935509
АннаАнна
2007-01-28 01:05
2007.02.18
Рисовать в tvaluelisteditor?


2-1170141750
npr2
2007-01-30 10:22
2007.02.18
Crystal Reports