Форум: "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.038 c