Tipy a triky v Delphi, díl 77.

V našem dnešním malém tipu si ukážeme funkci, která zjistí vlastníka (tvůrce) libovolného souboru, který na disku máme.
Všichni jsme zvyklí na to, že každý soubor, který je na disku uložen, má jisté vlastnosti - atributy. Kromě samotného názvu souboru tak můžeme zjistit rozličné časové informace (kdy byl vytvořen, změněn atd..), zda je chráněn proti zápisu a podobně. Jednou z těchto informací je též vlastník souboru, tedy osoba, která soubor na disku vytvořila. A jeho jméno (loginname) se právě naučíme zjišťovat.

Náš příklad uděláme velmi jednoduše. Na formulář umístěte OpenDialog, pomocí kterého vybereme příslušný soubor, jehož vlastníka chceme znát. Dialog vyvoláme stiskem tlačítka, takže jej rovněž přidejte na formulář. A to je vlastně vše. Zavoláme příslušnou funkci, jejímž vstupním parametrem je jméno souboru a na výstupu se nám vrátí jméno uživatele a doména. Výsledek se pak zobrazí v jednoduchém ShowMessage dialogu.

unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetFileOwner(const FileName: string; var Domain, Username: string): Boolean;
var
  SecDescr: PSecurityDescriptor;
  SizeNeeded, SizeNeeded2: DWORD;
  OwnerSID: PSID;
  OwnerDefault: BOOL;
  OwnerName, DomainName: PChar;
  OwnerType: SID_NAME_USE;
begin
  GetFileOwner := False;
  GetMem(SecDescr, 1024);
  GetMem(OwnerSID, SizeOf(PSID));
  GetMem(OwnerName, 1024);
  GetMem(DomainName, 1024);
  try
    if not GetFileSecurity(PChar(FileName), OWNER_SECURITY_INFORMATION, SecDescr, 1024, SizeNeeded) then Exit;
    if not GetSecurityDescriptorOwner(SecDescr, OwnerSID, OwnerDefault) then Exit;
    SizeNeeded := 1024;
    SizeNeeded2 := 1024;
    if not LookupAccountSID(nil, OwnerSID, OwnerName, SizeNeeded, DomainName, SizeNeeded2, OwnerType) then Exit;
    Domain := DomainName;
    Username := OwnerName;
  finally
    FreeMem(SecDescr);
    FreeMem(OwnerName);
    FreeMem(DomainName);
  end;
  GetFileOwner := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Domain, Username: string;
begin
  OpenDialog1.Execute;
  if OpenDialog1.FileName <> `` then
      if GetFileOwner(`soubor.txt`, Domain, Username) then ShowMessage(Username + `@` + Domain)
      else ShowMessage(`Vlastníka nelze zjistit!`);
end;

end.

Parametrem funkce může být pochopitelně libovolný soubor, takže textovým souborem použitým v našem příkladu se nedejte zmást. V případě neúspěchu funkce vrací false.

Na závěr jedna důležitá poznámka, která možná patří spíše na začátek dnešního příkladu. Tento tip bude fungovat samozřejmě pouze na systémech generace NT, neboť starší řada 9x (souborový systém) tyto informace neukládá.

Diskuze (4) Další článek: DirectX verze 9.1 již v březnu

Témata článku: Software, Windows, Programování, Exit, Důležitá poznámka, Trik, Nota, Public domain, Filename, Díl


Určitě si přečtěte

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

** Vědci spočítali, jak velká by musela být posádka pro vícegenerační let k nejbližší hvězdné soustavě ** Proxima Centauri se nachází 4,3 světelných let od nás ** Za současných technologií bychom k ní letěli 6300 let

Petr Kubala | 53

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

** Pornografie údajně představuje třetinu internetové obsahu a je technologický tahounem ** Do erotického obsahu postupně zasahuje i virtuální realita ** Kromě vizuálního vjemu se pracuje také na virtuálním uspokojení toho hmatového

Jan Dudek | 28

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

** Apple odhalil své plány na zcela nové mapy ** Několik let pracuje na nových mapách, které by měly předběhnout konkurenci ** Objeví se s příchodem iOS 12 pro vybrané státy

Karel Javůrek | 50

Alan Turing: Genius, který matematicky stvořil počítač

Alan Turing: Genius, který matematicky stvořil počítač

Řešením matematického problému se dostal k modelu teoretického stroje, který nese jeho jméno a je základem logiky univerzálních počítačů.

Pavel Tronner | 57

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

** Sonda LRO pořídila z oběžné dráhy Měsíce zajímavé snímky ** Jsou na nich vidět artefakty všech misí programu Apolla, které přistály na povrchu Měsíce ** Jde například o části lunárních modulů, rovery a dokonce i vlajky

Petr Kubala | 60


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji