A Netapi32.dll állomány NetServerEnum metódusát használjuk fel a cél elérése érdekében. A metódus deklarációja a következő:

NetServerEnum
function NetServerEnum(
const ServerName: PWideString;
level: DWORD;
var Buffer: pointer;
PrefMaxLen: DWORD;
var EntriesRead: DWORD;
var TotalEntries: DWORD;
ServerType:DWORD;
const Domain: PWideChar;
var ResumeHandle: DWORD
): DWORD;
A metódus alapvető funkciója, hogy a megadott kritériumoknak megfelelő objektumokat kérdezi le a helyi hálózat számítógépeiről. Megtehetjük, hogy a munkaállomások neveit, a telepített SQL Server példányokat vagy a Novell rendszereket gyűjtjük össze és listázzuk ki.
Paraméterek
const ServerName: PWideString
Fenntartva, értéke NIL kell, hogy legyen.
level: DWORD
A megadott kritériumoknak megfelelő rendszerekről kétféle adatstruktúrában kaphatunk információkat. Itt egy egész számmal kell megadnunk, hogy melyik típust kívánjuk a metódushíváskor használni. Értékei lehetnek:
- 100: a SERVER_INFO_100 típust használjuk
- 101: a SERVER_INFO_101 típust használjuk
var Buffer: pointer
A kapott információt tartalmazó memóriaterületre mutató pointer.
PrefMaxLen: DWORD
A kapott információ maximális mérete bájtban. A függvény ezt a memóriaterületet foglalja le a memóriában a kapott információ számára.
var EntriesRead: DWORD
A lekérdezett elemek aktuális száma.
var TotalEntries: DWORD
A lekérdezhető maximális elemszám.
ServerType:DWORD
Itt adhatjuk meg, hogy milyen szerver- vagy szoftvertípussal rendelkező számítógépet keressen a függvény.
const Domain: PWideChar
A domain neve, melybe a hálózat számítógépei tartoznak. NULL esetén az elsődleges domain kerül átvizsgálásra.
var ResumeHandle: DWORD
Nem használt érték, nulla értéket kell megadnunk.
Visszatérési érték
Sikeres metódushívás esetén nulla.
A kapott információra tehát egy pointer mutat. A pointer-t értelmezve meghatározzuk, hogy hány darab objektummal kapcsolatban kaptunk információkat. Minden információ egy-egy rekordban lesz megtalálható. Ez a rekord a SERVER_INFO_101 típus megfelelője, melynek deklarációja a következő:
TServerInfo101 = record
platform_id: DWORD;
name: PWideChar;
version_major: DWORD;
version_minor: DWORD;
server_type: DWORD;
comment: PWideChar;
end;
PServerInfo101 = ^TServerInfo101;
A mellékelt példában két típust tudunk kiválasztani, melyekre a keresést futtatjuk. Az egyik lehetőség, hogy a LAN gépeire telepített SQL Server példányokat listázzuk ki, míg a másik lehetőség, hogy az összes munkaállomás nevét lekérdezzük. Ekkor határozzuk meg a szervertípus konstansát.
if comboBox1.ItemIndex = 0 then
t := SV_TYPE_SQLSERVER
else
t := SV_TYPE_WORKSTATION;
A konstansok meghatározása után meghívjuk a NetServerEnum metódust.
res := NetServerEnum(nil, 101, Buffer, MAX_PREFERRED_LENGTH, entries, totals, t, nil, r);
Ha a hívás sikeres volt, vagyis a visszatérési érték nulla, akkor egy ciklussal végigmegyünk az összes kapott elemen, és a rekord NAME mezőjéből kiolvassuk a kiszolgáló nevét.
for i := 1 to entries do begin
listBox1.Items.Add('Kiszolgáló neve: ' + si^.name);
Inc(si);
end;
A művelet végén a NetApiBufferFree metódussal felszabadítjuk a pointer által lefoglalt memóriaterületet.
NetApiBufferFree(Buffer);
A metódusnak a megfelelő konstanst átadva számtalan típust lekérdezhetünk. Ezek lehetnek:
- Első- és másodlagos domain-vezérlők.
- Terminálszerverek.
- Windows 9x családba tartozó operációs rendszereket futtató gépek.
- NetWARE rendszereket futtató gépek.
- NT rendszereket futtató gépek.
- Fájl- és nyomtatószervereket futtató gépek.
- Apple rendszereket futtató gépek.