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

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

Права администратора


T2 ©   (2003-08-02 16:06:00) 

Как узнать, выполнен вход в систему под Администратором или под Пользователем?


Air_demon   (2003-08-06 12:04:00) [1]

Есть пример на VBScript, но можно и на Delphi.
Используется WMI.

sNode = "." " "." for local computer

Set oSWbemLoc = CreateObject("wbemScripting.SWbemLocator")
Set oWMI = oSWbemLoc.ConnectServer(sNode, "root\cimv2")

Set oLoggedOnUsers = oWMI.ExecQuery _
("Select * from Win32_LoggedOnUser", "WQL", 32)

iUsers = 0
For Each oUser In oLoggedOnUsers
( oUser.Antecedent, 0)

Есть пример на VBScript, но можно и на Delphi.
Используется WMI.

sNode = "." " "." for local computer

Set oSWbemLoc = CreateObject("wbemScripting.SWbemLocator")
Set oWMI = oSWbemLoc.ConnectServer(sNode, "root\cimv2")

Set oLoggedOnUsers = oWMI.ExecQuery _
("Select * from Win32_LoggedOnUser", "WQL", 32)

iUsers = 0
For Each oUser In oLoggedOnUsers
Set oAccount = oWMI.Get(oUser.Antecedent, 0)
If oAccount.SIDType = 1 Then
iUsers = iUsers + 1
WScript.Echo "Domain/Machine = " & oAccount.Domain & " " & "Account = " &oAccount.name
End If
Next


Kesha   (2003-08-05 18:39:00) [2]

2Zero Ice
Это вроде как определяет тольколокального админа.
А как определить, я вляется ли пользователь администратором в домене?
Желательно с работающимпримером...

PS MSDN перелопатил как смог...


AbrosimovA   (2003-08-04 08:22:00) [3]

Прочитать из реестра значение параметра DefaultUserName
в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Это значение всегда показывает имя текущего пользователя в WinNT,Win2k и WinXP.


Zero Ice   (2003-08-02 20:27:00) [4]

function IsAdmin: Boolean;
const
SECURITY_NT_AUTHORITY : TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
DOMAIN_ALIAS_RID_ADMINS = $00000220;
var
hAccessToken : THandle;
ptgGroups : PTokenGroups;
dwInfoBufferSize : DWORD;
psidAdministrators : PSID;
i : Integer;
bSuccess : BOOL;
begin
if Win32Platform <> VER_PLATFORM_WIN32_NT then
begin
Result := True;
Exit;
end;

Result := False;
bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken);
if not bSuccess then
begin
if GetLastError = ERROR_NO_TOKEN then
begin
bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken);
end;
end;
if bSuccess then
begin
GetMem(ptgGroups, 1024);
bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize);
CloseHandle(hAccessToken);
if bSuccess then
begin
AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators);
{$R-}
for i := 0 to ptgGroups.GroupCount-1 do
begin
if EqualSid(psidAdministrators, ptgGroups.Groups[i].Sid) then
begin
Result := True;
Break;
end;
end;
{$R+}
FreeSid(psidAdministrators);
end;
( ptgGroups)

function IsAdmin: Boolean;
const
SECURITY_NT_AUTHORITY : TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
DOMAIN_ALIAS_RID_ADMINS = $00000220;
var
hAccessToken : THandle;
ptgGroups : PTokenGroups;
dwInfoBufferSize : DWORD;
psidAdministrators : PSID;
i : Integer;
bSuccess : BOOL;
begin
if Win32Platform <> VER_PLATFORM_WIN32_NT then
begin
Result := True;
Exit;
end;

Result := False;
bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken);
if not bSuccess then
begin
if GetLastError = ERROR_NO_TOKEN then
begin
bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken);
end;
end;
if bSuccess then
begin
GetMem(ptgGroups, 1024);
bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize);
CloseHandle(hAccessToken);
if bSuccess then
begin
AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators);
{$R-}
for i := 0 to ptgGroups.GroupCount-1 do
begin
if EqualSid(psidAdministrators, ptgGroups.Groups[i].Sid) then
begin
Result := True;
Break;
end;
end;
{$R+}
FreeSid(psidAdministrators);
end;
FreeMem(ptgGroups);
end;
end;


Наверх

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