Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать имя пользователя под которым комп вошел в сеть(домен)? [D6, Win95/98, NT4, Win2k, WinXP]


zam ©   (2002-06-21 18:37:00) 

Можно ли вообще узнать имя под которым пользователь подключился(аутентифицировался) в домене под WinNT и подключен ли он к домену вообще. Задача в том, чтобы защита проги была основана на NT защите. Просто даже примерно не знаю как подойти к проблемме.

Подскажите ПЛИЗ !!!!!!!


ZZ   (2002-06-23 04:43:00) [1]

zam
Ну и каким боком локальный пользователь подключен к домену?


zam   (2002-06-22 22:03:00) [2]

Да, функция работает, но как узнать, подключен ли пользователь к домену или нет, ведь когда это просто локальный пользователь, вместо домена возвращается ися локального компа.


ZZ   (2002-06-22 16:11:00) [3]

Я на всякий случай процетирую :)
//**********************************************************************
//
// FUNCTION: GetCurrentUserAndDomain - This function looks up
// the user name and domain name for the user account
// associated with the calling thread.
//
// PARAMETERS: szUser - a buffer that receives the user name
// pcchUser - the size, in characters, of szUser
// szDomain - a buffer that receives the domain name
// pcchDomain - the size, in characters, of szDomain
//
// RETURN VALUE: TRUE if the function succeeds. Otherwise, FALSE and
// GetLastError() will return the failure reason.
//
// If either of the supplied buffers are too small,
// GetLastError() will return ERROR_INSUFFICIENT_BUFFER
// and pcchUser and pcchDomain will be adjusted to
// reflect the required buffer sizes.
//
//**********************************************************************

BOOL GetCurrentUserAndDomain(PTSTR szUser, PDWORD pcchUser,
PTSTR szDomain, PDWORD pcchDomain) {

BOOL fSuccess = FALSE;
HANDLE hToken = NULL;
PTOKEN_USER ptiUser = NULL;
DWORD cbti = 0;
SID_NAME_USE snu;

__try {

// Get the calling thread"s access token.
if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE,
&hToken)) {

if (GetLastError() != ERROR_NO_TOKEN)
__leave;

// Retry against process token if no thread token exists.
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY,
&hToken))
__leave;
}

// Obtain the size of the user information in the token.
if (GetTokenInformation(hToken, TokenUser, NULL, 0, &cbti)) {

// Call should have failed due to zero-length buffer.
__leave;

} else {

// Call should have failed due to zero-length buffer.
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
__leave;
}

// Allocate buffer for user information in the token.
ptiUser = (PTOKEN_USER) HeapAlloc(GetProcessHeap(), 0, cbti);
if (!ptiUser)
__leave;

// Retrieve the user information from the token.
if (!GetTokenInformation(hToken, TokenUser, ptiUser, cbti, &cbti))
__leave;

// Retrieve user name and domain name based on user"s SID.
if (!LookupAccountSid(NULL, ptiUser->User.Sid, szUser, pcchUser,
szDomain, pcchDomain, &snu))
__leave;

fSuccess = TRUE;

} __finally {

// Free resources.
if (hToken)
CloseHandle(hToken);

if (ptiUser)
HeapFree(GetProcessHeap(), 0, ptiUser);
}

return fSuccess;
}


Ну и чего нет в дельфях ? Описание всех функций можно найти там-же в MSDN.


GrayFox   (2002-06-22 15:22:00) [4]

Как получить имя домена? В то что на сайте МС, в базе знаний, мне врубиться трудно, в справке делфи такой функции нет.


DeMoN-777   (2002-06-22 11:07:00) [5]

Единая база процедур и функций для Delphi для сайта Мастера Delphi - тестовая версия



Получение текущего имени пользователя

http://delphibase.endimus.com/?action=viewfunc&topic=sysparams&index=8

С уважением.


Song   (2002-06-21 19:37:00) [6]

GetUserName() ?


ZZ   (2002-06-21 19:04:00) [7]

http://rsdn.ru/forum/?mid=10429


Наверх

Титульная страница Поиск, карта сайта Написать письмо