HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Rendszergazda jog meghatározása


Példaprogram letöltése

3757 bájt

NT alapú rendszerek esetében nem végezhetünk el minden műveletet rendszergazda jog nélkül. Ehhez azonban meg kell határoznunk, hogy a bejelentkezett felhasználó rendelkezik-e rendszergazda jogokkal. Ebben a példában azt vizsgáljuk meg, hogy ezt miként lehet megtenni.

A rendszergazda jog meghatározásához készítettünk egy függvényt, az IsAdministrator-t.
function IsAdministrator: Boolean;
A függvény visszatérési értéke igaz, ha a bejelentkezett felhasználó rendszergazda joggal rendelkezik. Ellenkező esetben hamis.
Most nézzük azokat a lépéseket, amelyeket meg kell tennünk a jog lekérdezéséhez.
Először az OpenThreadToken függvény segítségével, elérjük az aktuális szálhoz tartozó jogok azonosítóját.
bOK:=OpenThreadToken(GetCurrentThread,TOKEN_QUERY,True,TokenHandle);
OpenThreadToken
function OpenThreadToken(
ThreadHandle: THandle;
DesiredAccess: DWORD;
OpenAsSelf: BOOL;
var TokenHandle: THandle
): BOOL;
Egy szálhoz tartozó, hozzáférési jogok elérésére szolgál.
Paraméterek
ThreadHandle: THandle
A szál azonosítója.
DesiredAccess: DWORD
A hozzáférés típusa. A TOKEN_QUERY konstans megadásával, a jogok információihoz férünk hozzá.
OpenAsSelf: BOOL
Hamis érték megadása esetén a hozzáférés az adott szál alapján történik. Ha igaz értéket adunk meg, akkor pedig a szál processze alapján.
var TokenHandle: THandle
Ebbe a változóba kerül a megnyitott token azonosítója.
Visszatérési érték
Igaz, ha a függvény lefutása sikeres volt.
Az OpenProcessToken működése hasonlít az előző függvényéhez. A függvény az aktuális folyamat jogait kérdezi le. A TokenHandle fogja azonosítani a token-t.
bOK:=OpenProcessToken(GetCurrentProcess,TOKEN_QUERY,TokenHandle);
Miután meghatároztuk a szükséges token azonosítóját a GetTokenInformation függvénnyel lekérdezhetjük annak információit.
GetMem(ptgGroups,1024);
bOK:=GetTokenInformation(TokenHandle,TokenGroups,ptgGroups,1024,dwInfoBufferSize);
CloseHandle(TokenHandle);
GetTokenInformation
function GetTokenInformation(
TokenHandle: THandle;
TokenInformationClass: TTokenInformationClass;
TokenInformation: Pointer;
TokenInformationLength: DWORD;
var ReturnLength: DWORD
): BOOL;
A megadott token információinak lekérdezésére szolgál.
Paraméterek
TokenHandle: THandle
A token azonosítója.
TokenInformationClass: TTokenInformationClass
A lekérdezendő információ osztálya. Az itt megadott osztálynak megfelelő struktúrával rendelkező információt kapunk vissza. Használható osztályok: TokenUser, TokenGroups, TokenPrivileges, TokenOwner, TokenPrimaryGroup, TokenDefaultDacl,TokenSource, TokenType, TokenImpersonationLevel, TokenStatistics.
TokenInformation: Pointer
Az itt megadott változóba kerül a lekérdezés eredménye.
TokenInformationLength: DWORD
A TokenInformation struktúra mérete, bájtokban.
var ReturnLength: DWORD
A struktúrában elhelyezett adatok méretét adja vissza, bájtokban.
Visszatérési érték
Igaz, ha a függvény lefutása sikeres volt, ellenkező esetben hamis.
Az AllocateAndInitializeSid függvény létrehoz és inicializál egy biztonsági azonosítót (SID), maximum 8 joggal.
AllocateAndInitializeSid(SECURITY_NT_AUTHORITY,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,
  0,0,0,0,0,0,psidAdministrators);
AllocateAndInitializeSid
function AllocateAndInitializeSid(
const pIdentifierAuthority: TSIDIdentifierAuthority;
nSubAuthorityCount: Byte;
nSubAuthority0,
nSubAuthority1: DWORD;
nSubAuthority2,
nSubAuthority3,
nSubAuthority4: DWORD;
nSubAuthority5,
nSubAuthority6,
nSubAuthority7: DWORD;
var pSid: Pointer
): BOOL;
Létrehoz és inicializál egy biztonsági azonosítót (SID), maximum 8 aljoggal.
Paraméterek
const pIdentifierAuthority: TSIDIdentifierAuthority
Egy TSIDIdentifierAuthority struktúra, amely a fő jogot határozza meg.
nSubAuthorityCount: Byte
Az aljogok száma, 1-8-ig.
nSubAuthority0
Aljog 1.
nSubAuthority1: DWORD
Aljog 2.
nSubAuthority2
Aljog 3.
nSubAuthority3
Aljog 4.
nSubAuthority4: DWORD
Aljog 5.
nSubAuthority5
Aljog 6.
nSubAuthority6
Aljog 7.
nSubAuthority7: DWORD
Aljog 8.
var pSid: Pointer
Az itt megadott változóba kerül a létrehozott struktúra.
Visszatérési érték
Igaz, ha a függvény lefutása sikeres volt, ellenkező esetben hamis.
Ha a psidAdministrators változóban szereplő SID értéke megegyezik a ptgGroups struktúrában szereplő SID értékével, akkor az azt jelenti hogy a felhasználó rendszergazda jogokkal rendelkezik.
for i:=0 to ptgGroups.GroupCount-1 do
  if EqualSid(psidAdministrators,ptgGroups.Groups[i].Sid) then begin
    Result:=True;
    Break;
  end;

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 273. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |