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.