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

Вниз

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

 
Чапаев ©   (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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.04 c
2-1170065544
GrayFace
2007-01-29 13:12
2007.02.18
Не показывать конструктор родителя при overload нутом своем?


15-1169716923
cyborg
2007-01-25 12:22
2007.02.18
Первый турецкий астронавт полетит на Луну в 2014 году


1-1167209405
IMHO
2006-12-27 11:50
2007.02.18
Математическое прогнозирование спортивного события


2-1169674624
alek_1
2007-01-25 00:37
2007.02.18
DBEhGrid


15-1169733670
vasIzmax
2007-01-25 17:01
2007.02.18
Тест по ТАСО





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский