Главная страница
    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.038 c
6-1164640713
Diamond
2006-11-27 18:18
2007.06.17
Socket.ReceiveBuf ломается с ИС


8-1159790519
Nickla
2006-10-02 16:01
2007.06.17
DSPack: ошибка при инициализации TSampleGraber как службу


9-1153902502
Илья Щукин
2006-07-26 12:28
2007.06.17
Ошибка компиляции


15-1179817899
Rouse_
2007-05-22 11:11
2007.06.17
Производители Spyware подали в суд на Антивирус :)


4-1167871402
Альберт
2007-01-04 03:43
2007.06.17
Перетаскивание формы за контрол на winapi





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