Tipy a triky v Delphi, díl 105. - práva uživatele

Dnes se podíváme na to, jaké informace se dají získat o přihlášeném uživateli, přesněji řečeno, o jeho právech.
Tipy a triky v Delphi, díl 105. - práva uživatele
Už z úvodu je jasné, že dnešní tip je opět určen pro NT systémy. Hovoříme-li o právech uživatele, jistě dobře víte, že se tím nemyslí jen právo přístupu uživatele pouze do jemu určených složek, ale administrátor může omezit počínání uživatelů i jiným způsobem. Někteří nemají přístup k ovládacím panelům počítače, uživatel rovněž nemusí mít právo instalovat aplikace a podobně. Možností je prostě celá řada a na některé by člověk na první zamyšlení ani nepřišel. Mezi taková méně známá uživatelská práva patří například právo změnit systémový čas, právo zálohovat a obnovit soubory, vytvořit stránkovací soubor, upravit kvóty paměti pro proces a podobně.

Právě takový seznam méně známých práv se naučíme u přihlášeného uživatele zjistit. Funkce bude vytvořena jako událost stisku tlačítka a na formulář rovněž přidejte komponentu ListBox, do které budou výsledky vypsány.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  TokenSize = 800;
var
  hToken: THandle;
  pTokenInfo: PTOKENPRIVILEGES;
  ReturnLen, NameSize, DisplSize, LangId: Cardinal;
  i: Integer;
  PrivName, DisplayName: PChar;
begin
  try
    GetMem(pTokenInfo, TokenSize);
    GetMem(PrivName, 255);
    GetMem(DisplayName, 255);
    try
      if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then Exit;
      if not GetTokenInformation(hToken, TokenPrivileges, pTokenInfo, TokenSize, ReturnLen) then Exit;
      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);
        ListBox1.Items.Add(PrivName + `  -  ` + DisplayName);
      end;
    finally
      FreeMem(PrivName);
      FreeMem(DisplayName);
      FreeMem(pTokenInfo);
    end;
  except
    ShowMessage(`Chyba! Nepodarilo se alokovat pamet.`);
  end;
end;

end.

Po spuštění funkce bude do připraveného ListView vypsán seznam privilegií, které uživatel má. Pokud by vás snad zajímal kompletní seznam všech dostupných možností, můžete si jej prohlédnout přímo v systému, kdy v Ovládacích panelech zvolíte položku Nástroje pro správu, zde Místní zásady zabezpečení a v otevřeném okně pak v levém stromovém seznamu vyberte položku Přiřazení uživatelských práv (tento postup platí pro Windows XP). Uvidíte zde kompletní seznam a u každé položky je uveden uživatel (či seznam uživatelů), který daným právem disponuje. Není se ani moc čemu divit, že z běžných uživatelů (pomineme-li systém jako takový) má na podobné "vychytávky" právo obvykle jen administrátor.

Ještě jednou tedy připomínám, že dnešní příklad bude fungovat pouze na NT systémech, přičemž pod systémy 9x se nestane nic.

Témata článku: Software, Windows, Programování, Exit, Díl, Trik

3 komentáře

Nejnovější komentáře

  • pozor - nuda 29. 8. 2003 14:04:46
    nuda
  • Pavel Bláhovec 27. 8. 2003 8:17:20
    Nevite nekdo, jak programove (nebo i jinak) nastavit pristupove prava na...
  • Marcel 27. 8. 2003 8:01:29
    Nevite nekdo nahodou jak programove nastavit prava uzivateli k urcitemu...
Určitě si přečtěte

Co je realita a fikce? Brzy to nepoznáme. A.I. ze Stanfordu tvoří fotky z neexistujících měst

Co je realita a fikce? Brzy to nepoznáme. A.I. ze Stanfordu tvoří fotky z neexistujících měst

** Fotografii každý vnímá jako jednoznačný důkaz ** časem to ale přestane platit ** Strojové učení se totiž neustále zdokonaluje

16.  8.  2017 | Jakub Čížek | 13

USB zařízení je možné odposlouchávat ze sousedního portu

USB zařízení je možné odposlouchávat ze sousedního portu

** Crosstalk byl dřív problém paralelních portů, dnes se ho pokusili prověřit na USB ** Zařízení ze sousedního USB portu může odposlouchávat to vedlejší ** Mohou vznikat záškodnické flašky nebo třeba USB lampičky

14.  8.  2017 | Adam Harmada | 19


Aktuální číslo časopisu Computer

Velký test NVMe a SATA SSD

Máte slabý signál
Wi-Fi? Poradíme!

Jak umělá inteligence opravuje fotky

Kupujete dron? Ty levné se nevyplatí