![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите!!!! [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