Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Вниз

Какой пользователь работает на компьютере?   Найти похожие ветки 

 
КрЫска ©   (2007-04-20 00:33) [0]

Подскажите, пожалуйста, как определить пользователь с какими правами работает на компьютере? Админ или нет?


 
Elen ©   (2007-04-20 07:56) [1]

Можно попробовать вычеслить по привилегиям обычного процесса :
(Примерчик из Delphi World)

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
     function GetPrivilegy(Delimiter:string=";"):string;

var
 Form1: TForm1;

implementation

{$R *.dfm}
function GetPrivilegy;

const
 TokenSize = 800; //  (SizeOf(Pointer)=4 *200)
var
 hToken: THandle;
 pTokenInfo: PTOKENPRIVILEGES;
 ReturnLen: Cardinal;
 i: Integer;
 PrivName: PChar;
 DisplayName: PChar;
 NameSize: Cardinal;
 DisplSize: Cardinal;
 LangId: Cardinal;
begin
 GetMem(pTokenInfo, TokenSize);
 if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
   hToken) then ShowMessage("OpenProcessToken error");
 if not GetTokenInformation(hToken, TokenPrivileges, pTokenInfo, TokenSize, ReturnLen) then
   ShowMessage("GetTokenInformation error");
 GetMem(PrivName, 255);
 GetMem(DisplayName, 255);
 for i := 0 to pTokenInfo.PrivilegeCount - 1 do
 begin
   DisplSize := 255;
   NameSize  := 255;
   LookupPrivilegeName(nil, pTokenInfo.Privileges[i].Luid, PrivName, Namesize);
   LookupPrivilegeDisplayName(nil, PrivName, DisplayName, DisplSize, LangId);
   result:=result+string(PrivName){ +"("+ string(DisplayName)+")"}+Delimiter;
 end;
 FreeMem(PrivName);
 FreeMem(DisplayName);
 FreeMem(pTokenInfo);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items.Delimiter:=";";
ListBox1.Items.DelimitedText:=GetPrivilegy;
end;

end.


 
Elen ©   (2007-04-20 08:06) [2]

Вот еще из инета :

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type

 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
 
//**************************************************************************
 

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;
  x: Integer;
  bSuccess: BOOL;
begin
  Result   := False;
  bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,
    hAccessToken);
  if not bSuccess then
  begin
    if GetLastError = ERROR_NO_TOKEN then
      bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
        hAccessToken);
  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 x := 0 to ptgGroups.GroupCount - 1 do
        if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then
        begin
          Result := True;
          Break;
        end;
      {$R+}
      FreeSid(psidAdministrators);
    end;
    FreeMem(ptgGroups);
  end;
end;
//**************************************************************************

procedure TForm1.FormCreate(Sender: TObject);
begin
if IsAdmin then caption:="admin" else caption:="No admin";
end;

end.


 
T.V ©   (2007-04-20 11:22) [3]


function IsAdmin: Boolean;
var
 hModule: THandle;
 IsUserAnAdmin: function: Boolean; stdcall;
begin
 Result := True;
 hModule := LoadLibrary("shell32.dll");
 if hModule <> 0 then
 begin
   IsUserAnAdmin := GetProcAddress(hModule,"IsUserAnAdmin");
   if Assigned(IsUserAnAdmin) then
     Result := IsUserAnAdmin;
   FreeLibrary(hModule);
 end;
end;


 
КрЫска ©   (2007-04-21 00:08) [4]

Спасибо Вам огромное. Вы мне очень помогли!:-))



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.053 c
1-1176922235
I-New
2007-04-18 22:50
2007.06.17
Создание ресурсов


2-1180337522
vpbar
2007-05-28 11:32
2007.06.17
Ошибка компилятора Delphi или просто особенность??


1-1174994364
PETR
2007-03-27 15:19
2007.06.17
Работа с сервером Word - просмотр текста


15-1178522752
TUser
2007-05-07 11:25
2007.06.17
Саркази - выбор французов


15-1179914189
antonn (work)
2007-05-23 13:56
2007.06.17
Кетмар не пишет вирусы, не верьте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский