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

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

Помогите!!!! [D6, Win2k]


Darlok ©   (2002-04-16 15:11:00) 

Как можно узнать, имеет ли пользователь, запустивший мою программу, права администратора.

Пишу следующее:
unit Priv;

interface
uses Types, Windows;
Type
PUSER_INFO_11 = ^USER_INFO_11;
_USER_INFO_11 = Record
usri11_name: PWideChar;
usri11_comment: PWideChar;
usri11_usr_comment: PWideChar;
usri11_full_name: PWideChar;
usri11_priv: DWORD;
usri11_auth_flags: DWORD;
usri11_password_age: DWORD;
usri11_home_dir: PWideChar;
usri11_parms: PWideChar;
usri11_last_logon: DWORD;
usri11_last_logoff: DWORD;
usri11_bad_pw_count: DWORD;
usri11_num_logons: DWORD;
usri11_logon_server: PWideChar;
usri11_country_code: DWORD;
usri11_workstations: PWideChar;
usri11_max_storage: DWORD;
usri11_units_per_week: DWORD;
usri11_logon_hours: Pointer;
usri11_code_page: DWORD;
End;
USER_INFO_11=_USER_INFO_11;

Function NetUserGetInfo (
servername: PWideChar;
username: PWideChar;
level: DWORD;
bufptr: Pointer
): DWord; stdcall; external "netapi32.dll";

Function NetApiBufferFree(
Buffer: Pointer
): DWORD; stdcall; external "netapi32.dll";


function isAdmin:Boolean;


implementation

function isAdmin:Boolean;
Var
login: PChar;
info: PUSER_INFO_11;
Size: Cardinal;
Begin
Result:=false;
// Выделяем память для переменных
GetMem (login,SizeOf (Char) * 256); GetMem(info,sizeOf(USER_INFO_11));

// Получаем логин пользователя, запустившего программу
GetUserName(login,Size);
// Получаем информацию о пользователе
if NetUserGetInfo (Nil, PWideChar(login), 11, @info)<>0 then exit;
// Определяем наличие административных привилегий
if Info^.usri11_priv=2 then Result:=true;

NetApiBufferFree( info );
FreeMem (login);
End;


end.


Оно кмпилится нормально, но NetUserGetInfoвсегда выдает значение, отличное от 0. Чего делать, уже не занаю.


SerVS   (2002-04-17 00:58:00) [1]

>Raptor ©
Я не знал. Вообщето я предпочитаю писать так как советуют в MSDN, тогда вопросов меньше возникает.
ЗЫ. Если я правильно понял сообщение от Darlok © (16.04.02 17:45) то он уже все сделал, и нечего больше обсуждать


Tosov   (2002-04-17 00:39:00) [2]

Попробуй GetUserNameWвместо GetUserName.


Raptor   (2002-04-16 22:48:00) [3]

2 SerVS
К твоему сведенью NERR_Success = 0 ;-))


SerVS   (2002-04-16 21:59:00) [4]

>Darlok ©
А вот что я нашел в MSDN:
If the function succeeds, the return value is NERR_Success.
If the function fails, the return value can be one of the following error codes.
Она и недолжна возвращять ноль!
ЗЫ. Рад был помочь ;)


Bachin   (2002-04-16 20:30:00) [5]

сразу: PWideChar(login) !?


Darlok   (2002-04-16 17:45:00) [6]

SerVS © (16.04.02 15:39)

Спасибо. Я там нашел подходящие примеры. :)


SerVS   (2002-04-16 15:39:00) [7]

Посмотреть этот пример на www.delphi.xonix.ru


Наверх

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