'=========================================================================== ' Subject: DETECT NOVELL INFORMATION Date: 09-20-93 (00:00) ' Author: Harry F. Harrison Code: PDS ' Keys: DETECT,NOVELL,INFORMATION Packet: NETWORK.ABC '=========================================================================== DECLARE FUNCTION GetNovellUserStats! (NovellInfo AS ANY) DECLARE FUNCTION GetNovellVersion! (NovellInfo AS ANY) '----------[ Network User Status ]---------- '$INCLUDE: '..\include\qbx.bi' TYPE NovellConnectionInfo ServerName AS STRING * 48 NetVer AS SINGLE MajVer AS INTEGER MinVer AS INTEGER MaxCon AS INTEGER MaxVol AS INTEGER ConInUse AS INTEGER UserName AS STRING * 48 Connection AS INTEGER NodeAddress AS STRING * 12 'Hex LoginDate AS STRING * 10 LoginTime AS STRING * 8 END TYPE TYPE NovellConnectionIn Length AS INTEGER Function AS STRING * 1 station AS STRING * 1 END TYPE TYPE NovellConnectionOut Length AS INTEGER ID AS LONG IDType AS INTEGER UserName AS STRING * 48 LogTime AS STRING * 8 END TYPE '----------[ Network Name ]---------- '$INCLUDE: '..\include\qbx.bi' TYPE NovellInPacket Length AS INTEGER Function AS STRING * 1 END TYPE TYPE NovellOutPacket Length AS INTEGER ServerName AS STRING * 48 MajorVer AS STRING * 1 MinorVer AS STRING * 1 NumCon AS STRING * 2 NumConUsed AS STRING * 2 MaxVol AS STRING * 2 undef AS STRING * 90 END TYPE FUNCTION GetNovellUserStats (NovellInfo AS NovellConnectionInfo) 'returns connection information on user. Returns 0 if successful DIM InRegs AS RegTypeX, OutRegs AS RegTypeX IF NovellInfo.NetVer = 0 THEN x = GetNovellVersion!(NovellInfo) END IF IF x > 0 THEN InRegs.ax = &HDC00 CALL InterruptX(&H21, InRegs, OutRegs) NovellInfo.Connection = (OutRegs.ax AND &HFF) InRegs.ax = &HEE00 CALL InterruptX(&H21, InRegs, OutRegs) NovellInfo.NodeAddress = RIGHT$("0000" + HEX$(OutRegs.cx), 4) + RIGHT$("0000" + HEX$(OutRegs.bx), 4) + RIGHT$("0000" + HEX$(OutRegs.ax), 4) DIM InPacket AS NovellConnectionIn DIM OutPacket AS NovellConnectionOut InPacket.Length = 4 InPacket.Function = CHR$(22) InPacket.station = CHR$(NovellInfo.Connection) InRegs.ax = &HE300 InRegs.ds = VARSEG(InPacket) InRegs.si = VARPTR(InPacket) InRegs.es = VARSEG(OutPacket) InRegs.di = VARPTR(OutPacket) OutPacket.Length = LEN(OutPacket) CALL InterruptX(&H21, InRegs, OutRegs) a$ = TIME$ Yr% = (1900 + (CVI(MID$(OutPacket.LogTime, 1, 2)) AND &HFF)) Mnth% = (CVI(MID$(OutPacket.LogTime, 2, 2)) AND &HFF) Daay% = (CVI(MID$(OutPacket.LogTime, 3, 2)) AND &HFF) Hr% = (CVI(MID$(OutPacket.LogTime, 4, 2)) AND &HFF) Min% = (CVI(MID$(OutPacket.LogTime, 5, 2)) AND &HFF) Sec% = (CVI(MID$(OutPacket.LogTime, 6, 2)) AND &HFF) NovellInfo.UserName = OutPacket.UserName x = INSTR(NovellInfo.UserName, CHR$(0)) WHILE x MID$(NovellInfo.UserName, x, 1) = " " x = INSTR(In$, CHR$(0)) WEND NovellInfo.LoginDate = RIGHT$("0" + LTRIM$(STR$(Mnth%)), 2) + CHR$(45) + RIGHT$(CHR$(48) + LTRIM$(STR$(Daay%)), 2) + CHR$(45) + LTRIM$(STR$(Yr%)) NovellInfo.LoginTime = RIGHT$("0" + LTRIM$(STR$(Hr%)), 2) + CHR$(58) + RIGHT$(CHR$(48) + LTRIM$(STR$(Min%)), 2) + CHR$(58) + RIGHT$(CHR$(48) + LTRIM$(STR$(Sec%)), 2) ELSE NovellInfo.ServerName = "Novell NetWare Not Installed" NovellInfo.UserName = "Not Logged In" END IF GetNovellUserStats% = OutRegs.ax AND &HFF END FUNCTION FUNCTION GetNovellVersion! (NovellInfo AS NovellConnectionInfo) DIM InPack AS NovellInPacket DIM OutPack AS NovellOutPacket DIM inreg AS RegTypeX DIM outreg AS RegTypeX DIM ExitValue! InPack.Length = LEN(InPack) ' Packet length of 3 bytes InPack.Function = CHR$(17) ' Get File Server Information OutPack.Length = LEN(OutPack) inreg.ax = &HE300 inreg.ds = VARSEG(InPack) inreg.si = VARPTR(InPack) inreg.es = VARSEG(OutPack) inreg.di = VARPTR(OutPack) CALL InterruptX(&H21, inreg, outreg) IF (outreg.ax AND &HFF) = 0 THEN NovellInfo.NetVer = ASC(OutPack.MajorVer) + (ASC(OutPack.MinorVer) / 100) NovellInfo.MajVer = ASC(OutPack.MajorVer) / 100 NovellInfo.MinVer = ASC(OutPack.MinorVer) ExitValue! = ASC(OutPack.MajorVer) + (ASC(OutPack.MinorVer) / 100) ELSE NovellInfo.NetVer = -1 ExitValue! = -1 END IF NovellInfo.ServerName = OutPack.ServerName x = INSTR(NovellInfo.ServerName, CHR$(0)) WHILE x MID$(NovellInfo.ServerName, x, 1) = " " x = INSTR(In$, CHR$(0)) WEND NovellInfo.MaxCon = CVI(RIGHT$(OutPack.NumCon, 1) + LEFT$(OutPack.NumCon, 1)) NovellInfo.ConInUse = CVI(RIGHT$(OutPack.NumConUsed, 1) + LEFT$(OutPack.NumConUsed, 1)) NovellInfo.MaxVol = CVI(RIGHT$(OutPack.MaxVol, 1) + LEFT$(OutPack.MaxVol, 1)) GetNovellVersion = ExitValue! END FUNCTION