HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Felhasználó létrehozása és törlése programból


Példaprogram letöltése

4134 bájt

Cikkünkben két, a rendszerben létrehozott (létrejött) felhasználókhoz kapcsolódó műveletet mutatunk be. A műveleteket a NetApi32.dll dinamikusan szerkeszthető állományban található metódusok segítségével végezzük el. Az első műveletben létrehozhatunk egy tetszőleges nevű felhasználót, míg a második művelettel törölhetjük azt, vagy a megadott nevű felhasználót. A műveletek eredményéről meg is győződhetünk.

A mellékelt alkalmazás Form-ján az egyszerűség kedvéért két szövegmezőt helyeztünk el, melyek egyikében a létrehozandó felhasználó nevét, míg a másikban a leendő jelszót adhatjuk meg. A LÉTREHOZÁS gombbal a felhasználó bekerül a felhasználói listába. A TÖRLÉS gombbal az első szövegmezőben megadott nevű felhasználó törölhető.
A felhasználó létrehozásához a Netapi32.dll NetUserAdd metódusát használjuk fel, melyet a következőképpen deklaráltunk:
function NetUserAdd(Server: PWideChar; Level: DWord; Buf: Pointer; ParmError: PDWord): LongInt; stdcall; external 'netapi32.dll';
A törlésre pedig a NetUserDel metódus használható:
function NetUserDel(Server, UserName : PWideChar): LongInt; stdcall; external 'netapi32.dll';
Vizsgáljuk meg a metódusokat, milyen paraméterekkel rendelkeznek.
NetUserAdd
Osztály:
function NetUserAdd(
Server: PWideChar; Level: DWord; Buf: Pointer; ParmError: PDWord
): LongInt
A metódus segítségével tehát – amennyiben adminisztrátori jogokkal rendelkező felhasználóként jelentkeztünk be – létrehozhatunk egy felhasználót.
Paraméterek
Server: PWideChar
A szerver nevét kell megadnunk, amelyen a felhasználót létre kívánjuk hozni. A változónak LAN esetében van értelme értéket adni, lokális számítógéphez kapcsolódó műveletek esetén ez NIL.
Level: DWord
A felhasználó adatait egy rekordban helyezzük el, mely többféle lehet. Attól függően, hogy melyiket használjuk, egy számot kell megadnunk a következők szerint:
Szint Struktúra neve
1 USER_INFO_1
2 USER_INFO_2
3 USER_INFO_3
Buf: Pointer
Egy pointer, mely a LEVEL paraméterben megadott típusú rekordra mutat.
ParmError: PDWord
Opcionálisan megadható paraméter, mely az első hibát okozó paraméter sorszámát adja vissza, vagyis azt, amelyik az ERROR_INVALID_PARAMETER hibát okozta. Ha értéke NIL, akkor a metódushívásban egyik paraméter sem okozott hibát.
Visszatérési érték
Amennyiben a hívás hibamentes volt, akkor a visszatérési érték nulla, egyébként a hiba kódja.
A híváskor a példában mi a USER_INFO_1 nevű adatstruktúrát használjuk, melynek Object Pascal megfelelőjét a következőképpen deklaráltuk.
USER_INFO_1 = record
  usri1_name:pwidechar;
  usri1_password:pwidechar;
  usri1_password_age:dword;
  usri1_priv:dword;
  usri1_home_dir:pwidechar;
  usri1_comment:pwidechar;
  usri1_flags:dword;
  usri1_script_path:pwidechar;
end;
Buffer = ^USER_INFO_1;
A rekord első két mezője hordozza az általunk megadott adatokat. A felhasználó létrehozásakor első lépés, hogy létrehozzuk a szükséges változókat.
procedure TForm1.Button1Click(Sender: TObject);
var
 Buf: Buffer;
 Err: Integer;
 user : PWideChar;
 password : PWideChar;
 ...
A szövegmezőkben megadott adatokat PWideChar formátumban kell megadni, így először egy kis konverziót kell elvégezni.
user := PWideChar(WideString(edit1.Text));
password := PWideChar(WideString(edit2.Text));
Ezt követően lefoglaljuk a rekord számára a memóriaterületet.
GetMem(Buf, SizeOf(USER_INFO_1));
Majd feltöltjük a rekord mezőit a megadott adatokkal, a nem használt mezőknek pedig – ahol lehet – NIL értéket adunk.
with Buf^ do
  begin
    usri1_name:= user;
    usri1_password:= password;
    usri1_password_age:= 0;
    usri1_priv:= 1;
    usri1_home_dir:= nil;
    usri1_comment:= nil;
    usri1_flags:= 1;
    usri1_script_path:= nil;
  end;
Nincs más hátra, mint a függvényhívás, melynek eredményeképpen létrejöhet az új felhasználó. A végén felszabadítjuk a memóriaterületet.
NetUserAdd(nil, 1, Pointer(Buf), @Err);
FreeMem(Buf);
A törlést végző metódus paramétereinek száma kevesebb, deklarációja egyszerűbb.
NetUserDel
Osztály:
function NetUserDel(
Server, UserName : PWideChar
): LongInt
Paraméterek
Server
Szerver neve, melyen a felhasználót törölni szeretnénk. Ez jelen esetben is NIL, lokális rendszer esetén.
UserName : PWideChar
A törlendő felhasználó neve.
Visszatérési érték
Sikeres törléskor nulla a metódus visszatérési értéke, míg hiba esetén a hiba kódját kapjuk vissza.
Lássuk, hogyan végezzük el a törlést. A felhasználó törlésekor szintén PWideChar formátumba konvertáljuk a szövegmező tartalmát, majd meghívjuk a metódust.
user := PWideChar(WideString(edit1.Text));
i := NetUserDel(nil,user);
...
A létrehozásról meg is győződhetünk, amennyiben a felhasználói listát megtekintjük.
A SAMPLEUSER nevű felhasználó megjelenik a listában.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 689. 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 |