Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.17;
Скачать: CL | DM;

Вниз

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

 
КрЫска ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
1-1176884417
>>DEATH<<
2007-04-18 12:20
2007.06.17
отправка запроса


15-1179597858
Rawed
2007-05-19 22:04
2007.06.17
Часы в Windows постоянно сбиваются!!


2-1180288383
ari_9
2007-05-27 21:53
2007.06.17
узнать ширину сетки DBGrid (ClienWidth не учитывает ScrollBar)


2-1179930089
Sonia
2007-05-23 18:21
2007.06.17
Закраска цветом компонентов


15-1179922587
Loginov Dmitry
2007-05-23 16:16
2007.06.17
Мифы о безопасном ПО