Ako na sieťové funkcie [III]

1. 4. 1998

Sdílet

Zistenie informácií o objekte v sieti Novell NetWare V predchádzajúcom článku o funkciách Novell NetWare (test...





Zistenie informácií o objekte v sieti Novell NetWare







V predchádzajúcom článku o funkciách Novell NetWare (testované na

verzii 3.11) sme si ukázali zistenie reálneho mena objektu.

V tejto časti si ukážeme, ako zistiť podrobné informácie

o prihlásenom objekte.

Zistenie podrobných informácií zabezpečuje služba E3h a funkcia

16h. Pri volaní týchto služieb musíme poznať číslo spojenia

objektu.



Po bezchybnom vykonaní prerušenia nám vráti adresu bufru, v¦ktorom

sú uložené:

* ID objektu

* typ objektu

* meno objektu

* čas prihlásenia objektu.



ID objektu je 4 byty dlhé identifikačné číslo, ktoré priradí

objektu operačný systém NetWare. Toto číslo v určitom serveri je

pre každý objekt jednoznačné. ID objektu 0 znamená, že na určenom

čísle spojenia nie je objekt přihlásený. Ak ID objektu prevedieme

na hex. reťazec, dostaneme výsledný reťazec, ktorý určuje meno

adresára v SYS:MAIL, v ktorom máme uložený login script.

Typ objektu je 2 byty dlhé číslo a určuje objekt ako užívateľa,

skupinu, file-server atď.



Nejbežnejšie typy objektov:

ČÍSLO Význam

FFFFh Ktorýkoľvek

0000h Neznámý

0001h Užívateľ

0002h Skupina užívateľov

0003h Tlačová fronta

0004h File-server

0005h Job-server

0006h Gateway

0007h Tlačový server

0008h Archívna fronta

0009h Archívny server

000Ah Fronta job-ov

000Bh Administrácia

0026h Remote Bridge Server

0047h Advertising Print Server



Meno objektu je 47znakový řeťazec (username).



Čas prihlásenia je dátum a čas, kedy sa objekt prihlásil. Je to

7 bytov dlhé pole a obsahuje nasledujúce informácie:



Byte Obsah

1 Rok (posledné dvojčíslie, napr. 95)

2 Mesiac

3 Deň

4 Hodiny

5 Minúty

6 Sekundy

7 Deň (0 = Nedeľa, 1 = Pondelok, …)



V ilustračnom príklade sme funkciu pre zistenie informácií

o objekte použili pre výpis všetkých prihlásených objektov

v sieti. Prevedieme to tak, že zistíme informácie o všetkých

možných objektoch, ktoré môžu byť prihlásené, podľa čísla

pripojenia (1 – Maximálny_počet_objektov). Kvôli jednoduchosti sa

v príklade nezisťuje maximálny počet užívateľov, ale je stanovený

napevno (100). Ak potom číslo spojenia nemá žiadny objekt, je

vrátené prázdne meno objektu a ID objektu je 0. Podrobný komentár

k programu je súčasťou zdrojového programu.



********



Program UserList;

{ zistí informácie o prihlásených }

{ objektoch (Novell NetWare 3.11) }

{ © Štefan Stieranka }





uses Dos;





type

TInpBuf = record

{ dĺžka vstupného bufru }

LenBuf: Integer;

{ funkcia }

FuncNum: Byte;

{ číslo pripojenia }

ConnectionNum: Byte;

end;





TOutBuf = record

{ dĺžka výstupného bufru }

LenBuf: Integer;

{ identifikačné číslo objektu }

ObjId: Array[1..4] of Byte;

{ typ objektu }

ObjType: Array[1..2] of Byte;

{ meno objektu }

ObjName: Array[1..48] of Byte;

{ dátum a čas prihlásenia na sieť }

LoginTime: Array[1..8] of Byte;

end;





var

InpBuf: TInpBuf;

OutBuf: TOutBuf;

Stat, Res: Integer;

UsName,Id: String;

DatTim: DateTime;

UsTyp: Byte;





Procedure GetConection(

var Station: Integer);

{ zistí číslo pripojenia k sieti }

var

Reg: Registers;

begin

{ CDh – číslo služby }

Reg.AH := $DC;

MsDos(Reg);

{ AL – číslo pripojenia }

Station := Reg.AL;

end;





Procedure GetConnectionInfo(

var StationNum:Integer; var Name:String;

var IdStr: String; var ObjTyp: Byte;

var DatTim:DateTime;var Result:Integer);

{ zistí infirmácie o stanici pripojenej

k sieti podľa čísla stanice }

const

Hex: Array[0..15] of

Char = ‚0123456789ABCDEF‘;

var

Reg: Registers;

I,R: Integer;

begin

With InpBuf do

begin

LenBuf := 2;

{ 16h – informácie o objekte }

FuncNum := $16;

ConnectionNum := StationNum;

end;

OutBuf.LenBuf := 62;

{ çíslo sluĹby }

Reg.AH := $E3;

Reg.DS := Seg(InpBuf);

Reg.SI := Ofs(InpBuf);

Reg.ES := Seg(OutBuf);

Reg.DI := Ofs(OutBuf);

MsDos(Reg);

{ výsledný kód volania prerušenia }

Result := Reg.AL;

Name := '';

IdStr := '';

ObjTyp := 0;

{ ak je všetko bez chyby }

If Result = 0 then

begin

With OutBuf do

begin

{ meno objektu }

For I := 1 to 48 do

If ObjName[I] <> 0 then

Name := Name+Chr(ObjName[I]);

{ Id objektu }

For I := 1 to 4 do

begin

IdStr := IdStr +

Hex[ObjId[I] shr 4];

IdStr := IdStr +

Hex[ObjId[I] and $0F];

end;

{ typ objektu }

ObjTyp := OutBuf.ObjType[2];

{ dátum a čas prihlásenia }

DatTim.Year := 1900+LoginTime[1];

DatTim.Month := LoginTime[2];

DatTim.Day := LoginTime[3];

DatTim.Hour := LoginTime[4];

DatTim.Min := LoginTime[5];

DatTim.Sec := LoginTime[6];

end;

end;

end;





begin

GetConection(Stat);

Writeln;

If Stat <> 0 then

For Stat := 1 to 100 do

begin

GetConnectionInfo(Stat, UsName, Id,

UsTyp, DatTim, Res);

If (UsName <> '') and

(Id <> ‚00000000‘) then

begin

Writeln(Stat:4,

UsName:15,

Id:10,

UsTyp:3,

DatTim.Day:3,‚.‘,

DatTim.Month:2,‚.‘,

DatTim.Year,

DatTim.hour:3,‚:‘,

DatTim.Min:2,‚:‘,

DatTim.Sec:2);

end;

end

else Writeln(‚Nie ste prihlásený '+

'v sieti Novel NetWare !‘);

end. 

Autor článku