Главная страница
    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.46 MB
Время: 0.042 c
15-1179761044
@!!ex
2007-05-21 19:24
2007.06.17
SVN для бинарников...


2-1180172140
antonyan
2007-05-26 13:35
2007.06.17
1C


6-1164722681
стьюдентЪ
2006-11-28 17:04
2007.06.17
Не приходит текст посланый по сокету


15-1179454304
Slider007
2007-05-18 06:11
2007.06.17
С днем рождения ! 18 мая


15-1179646386
Knight
2007-05-20 11:33
2007.06.17
Выговор Slider007&amp;#133 за пропущенное 19-ое мая&amp;#133





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский