home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Professional
/
OS2PRO194.ISO
/
os2
/
network
/
rexxlan
/
rexxlan.asc
< prev
next >
Wrap
Text File
|
1993-11-08
|
189KB
|
5,093 lines
REXXLAN/2 1.0 documentation
!!!!!!!!!!!!!!!!!!!!!!!!!!!
FINAL RELEASE
!!!!!!!!!!!!!!!!!!!!!!!!!!!
┌──────────────────────────────────────────────────┐
│ REXXLAN/2 │
│ the programmers REXX API extension for │
│ IBM LAN Server (and compatible) networks. │
└──────────────────────────────────────────────────┘
(c) EDV Beratung Leif Braeuer, 1992, 1993
2080 Pinneberg, Germany
EMAIL: CIS: 100024,3436, Fido: 2:240/5200.13
Trademarks:
───────────
The following terms are trademarks of the International Business Machines
Corporation:
REXX
IBM
OS/2
LAN Server
References:
───────────
The description of the LAN Server API bases on the IBM publication:
IBM OS/2 LAN Server Version 3.0: Application Programmer's Reference
COPYRIGHT
─────────
THE COMPONENTS OF REXXLAN/2 THAT MEANS THE SOFTWARE, USER'S MANUAL(S) AND
OTHER ITEMS ACCOMPANYING THIS AGREEMENT CONTAIN MATERIAL IN WHICH LEIF
BRAEUER NAD VTS-DATENSYSTEME GMBH & CO. RETAIN PROPRIETARY RIGHTS.
YOU ARE ALLOWED TO EVALUATE THIS REXXLAN/2 PACKAGE FOR AT MOST 30 DAYS.
AFTER THIS TESTING PERIOD YOU MUST DELETE ALL COPIES OF THIS PACKAGE
INCLUDING ALL FILES AND DOKUMENTATION.
ADDITINALLY, WILL THIS VERSION EXPIRE AT GENERAL AVAILABILITY OF ANY
FOLLOWING VERSION OR AT LEAST ON MARCH 31, 1994.
THE PROGRAM AND DOCUMENTATION ARE PROVIDED "AS-IS".
THIS EVALUATION PACKAGE MAY BE DISTRIBUTED UNCHANGED FREELY VIA BULLETIN
BOARD SYSTEMS INCLUDING ALL FILES AND CONSIDERING THE COPYRIGHT NOTES.
YOU ARE NOT ALLOWED TO CHARGE ANY DISTRIBUTION FEES EXCEPT FOR REASONABLE
HANDLING COSTS.
DISCLAIMER
──────────
The user of the program by using it agrees not to hold the author nor the
distributor liable for any damage that may have been caused by either the
proper or improper functioning or by the use or misuse of this RexxLan/2
REXX programming extension.
TABLE OF CONTENTS
─────────────────
Introduction
How do I use RexxLan/2 ?
RexxLan/2 and the REXX variable pool
Installation
The RexxLan/2 Functions Reference
INTERNAL RexxLan/2 FUNCTIONS
ACCESS PERMISSION CATEGORY
REQUESTER SECTION
DOMAIN SECTION
USE SECTION
MESSAGE SECTION
CONFIGURATION SECTION
CONNECTION SECTION
ERROR SECTION
FILE SECTION
SERVER SECTION
SESSION SECTION
SHARE SECTION
STATISTICS SECTION
GROUP SECTION
USER SECTION
ALIAS SECTION
APPLICATION SECTION
USER PROFILE MANAGEMENT
APPENDICES
----------------------------------------------------------
Introduction
────────────
Since the IBM OS/2 version 2.0, IBM provides an easy to use language
extension for the OS/2 Procedures Language/REXX. Third party developer are
able to supply REXX extension DLL, to add "special-need" functions to the
REXX language extent.
An example for this kind of extension is REXXUTIL.DLL, a component of
the operating system, that adds some Workplace-Shell and standard API
system calls to the REXX language.
This well documented possibility to extend REXX and the few command line
programs available for the IBM LAN Server were the base of the idea, to
develop an extension that allows full access to the broad LAN Server API.
RexxLan/2:
- provides an API very close to the native C API calls. Programmers
who are familiar with the C LAN API will not have any problems to
use the REXX counterparts.
- will give you full access to all available information
- enables the access to more than 80 API calls from your REXX
programs.
- supports the new LAN Server 3.0 Domain Controller Database
(DCDB) API.
RexxLan/2 is excellent for
- LAN Server administrators with a minimum of REXX programming
knowledge.
- testing the LAN Server API
- prototyping network applications
- writing tools for a sophisticated use of the LAN Requester
In this package you will find two files, RXLAN20.DLL and RXLAN30.DLL,
that implement more than 80 API calls to use in REXX.
RXLAN20.DLL is used for LAN Server 2.X Requester, that do not support
the LAN Server 3.0 Domain Controller Database (DCDB) API.
RXLAN30.DLL adds these DCDB API calls and can only be used with IBM
LAN Requester 3.0 or higher.
How do I use RexxLan/2 ?
────────────────────────
The following example shows the use of the RexxLan/2 extension in your
REXX programs:
1: /* REXX */
2: /* Query which user is logged on this PC */
3:
4: CALL RxFuncAdd NetLoadFuncs, RXLAN20, NetLoadFuncs
5: CALL NetLoadFuncs
6: SAY 'Querying workstation info...'
7: ret = NetWkstaGetInfo( '', '0', 'Buffer', '0', '0' )
8: IF ret = 0 THEN DO
9: SAY 'Logged on user : ' || Buffer.wki0_username
10: SAY 'Default domain : ' || Buffer.wki0_langroup
11: END
12: ELSE DO
13: IF ret = 2201 THEN DO /* NERR_NotLoggedOn */
14: SAY 'No user is logged on.'
15: END
16: ELSE DO
17: SAY 'Error in NetWkstaGetInfo rc = ' || ret
18: END
19: END
20: CALL Netdropfuncs
In line 4 the REXX function RxFuncAdd is used to add the loading function
of a REXX extension DLL. Please refer to your REXX Programmers
Reference for more information.
The registering function is called NetLoadFuncs (like SysLoadFuncs in the
REXXUTIL.DLL). NetLoadFuncs is loaded from RXLAN20.DLL and
registered under the name NetLoadFuncs.
In line 5 the NetLoadFuncs registers all RXLAN20 functions, initialises all
needed variables and allocates memory for the loaded instance of the DLL.
DO NOT REGISTER ANY OTHER FUNCTION THROUGH THE
RXFUNCADD API !
UNPREDICTABLE ERRORS WILL OCCUR, IF YOU TRY TO USE
REXXLAN/2 APIS WITHOUT INITIALIZING THEM WITH NETLOAD-
FUNCS
In line 7 the NetWkstaGetInfo is called. The first parameter specifies where
the command will be executed. '' means, the command will be executed
locally. The second parameter '0' specifies the level of information needed.
'Buffer' tells the REXX function under which name the variables should be
created. The remaining buffers were left for "future use" and for compatibility
reasons. The lines 9 and 10 show which variables are created by the Wksta
API call. These values are printed, if a user is logged on.
RexxLan/2 and the REXX variable pool
────────────────────────────────────
REXX does not know any structured variables. So, a mechanism had to be
implemented which simulates this by separating the variable name and its
struct fields by a dot. All components of the structures of IBMs LAN Server
API have identical names in RexxLan/2. The REXX progammer passes the
API the name of a top level qualifier under which the complete variable
structure will be created.
The IBM LAN Server Programmers Reference describes the access info
structure for level 1 calls in C as follow:
struct access_info_1 {
char LSFAR * LSPTR acc1_resource_name;
short acc1_attr;
short acc1_count; /* number of following acl */
}; /* access_info_1 */
A REXX programmer who uses e.g. NetAccessGetInfo( '\\SERVER', 'D:\', 1,
'Buffer', '', '' ) to retrieve the access control informations will find the informa-
tion in the following REXX variables:
BUFFER..ACC1_RESOURCENAME
BUFFER.ACC1_ATTR
BUFFER.ACC1_COUNT
BUFFER.n.ACL_UGNAME
BUFFER.n.ACL_ACCESS (n: 0..ACC1_COUNT-1)
Enumerated structures (returned by Enum functions or like the above example
appended to a GetInfo buffer) are specified by an additional counter following
the top level qualifier of the REXX variable.
Some LAN Server SetInfo API support the paramnum field that allows the
programmer to set only one component of a data structure. In this case, the
REXX-buffer parameter does not contain the name of the REXX top level
qualifier for an info structure, but the new content of the component to be
changed.
In the following example, the privilege of an users account (usri_priv) is set
to administrator (2):
/* set John's privilege to admin */
/* syntax : NetUserSetInfo( server, user, level, buffer, dummy,
parmnum ) */
ret = NetUserSetInfo( '\\SERVER', 'JOHN', 1, 2, '', 5 )
-----------------------------------------------------------------------------
Installation
────────────
To use the RexxLan/2 extension, copy all files from the diskette into a
directory of your choice (in this example all files were copied to the directory
\REXXLAN).
XCOPY A:\REXXLAN\* C:\REXXLAN\ /S
Then add your installation directory to the LIBBPATH and PATH statement
in the CONFIG.SYS
LIBPATH=C:\REXXLAN; ......
SET PATH=C:\REXXLAN; ......
After saving these modification, end all your applications, shutdown your
system and restart OS/2.
------------------------------------------------------------------------------
The RexxLan/2 Functions Reference
─────────────────────────────────
At the moment 17 categories with more than 80 functions of the OS/2 LAN
Server API functions are supported. In some categories the C library holds
some functions of the older versions of LAN Server for compatibility
purposes. The APIs were obsolete and therefore not supported. All Net API
functions return a standard return code. You can find the explanations of the
LAN Server related error code in the appendix. Some internal RexxLan/2
functions return different return values. They are described in the functions
description.
INTERNAL RexxLan/2 FUNCTIONS
────────────────────────────
NetDropFuncs
────────────
Deregister all registered Functions of RXLAN30.DLL or RXLAN20.DLL
Syntax:
CALL NetDropFuncs
Return: NONE
----------------------------------------------------------------------------
NetLoadFuncs
────────────
Register additional Function from RXLAN30.DLL or RXLAN20.DLL
Syntax:
CALL NetLoadFuncs
Return: NONE
----------------------------------------------------------------------------
NetRexxVersion
──────────────
Get information about RexxLan/2 version, supported LAN Requester, a
textual copyright note and products serial number.
Syntax:
ret = NetRexxVersion( level )
Return: depends on the value of level
Parameter:
level
0: return major and minor version of
RexxLan/2 (e.g. "1.0")
1: return supported LAN Requester ver-
sion "2.0" or "3.0"
2: return a textual copyright note
3: Retrieves the serial number of your li-
censed version
4: level for the ABOUT.CMD to provide
a printout of your personal information
and serial number
Example:
license = NetRexxVersion( 3 )
SAY 'License number is :' || license
----------------------------------------------------------------------------
NetRexxQueryFunction
────────────────────
Answer, whether or not a function is available in the loaded RexxLan/2
module.
Syntax:
ret = NetRexxQueryFunction( function )
Return:
1 : function is available
0 : function is unknown
Parameter:
function Name of function to test
Example:
exist = NetRexxQueryFunction( 'NetUserAdd' )
IF exist = 1 SAY 'Function available'
----------------------------------------------------------------------------
NetRexxGetMessage
─────────────────
Retrieve the explanation text for a return code.
Syntax:
text = NetRexxGetMessage( errorcode )
Parameter:
errorcode Return code of a Net API
The API returns a string containing the explanation of this error.
Example:
....
ret = NetAccessEnum( server, .... )
IF ret <> 0 THEN DO
text = NetRexxGetMessage( ret )
SAY 'Error in NetAccessEnum:'
SAY text
END
...
----------------------------------------------------------------------------
ACCESS PERMISSION CATEGORY
──────────────────────────
The functions in the Access Permission category examine or modify user or
group access permission records for server resources.
In order for a user to access a shared resource, an access permission record
must be defined for that user. An access permission record defines how a user
or group can access a shared resource. It contains a set of permissions for
each user or group.
The access permission record must be defined by a user or application that
already has administrative permissions, or has special permission for the
resource being shared. Note that user permissions have precedence over
group permissions. If a user is not defined in the access list for the shared
resource, the user's access permissions are the union of all groups to which the
user belongs.
Data structures
───────────────
The level parameter controls the level of information provided to or returned
from the NetAccessAdd, NetAccessEnum, NetAccessGetInfo, and NetAccess-
SetInfo functions. These functions use either a level 0 or a level 1 data
structure.
Access Permission level 0 (access_info_0):
ACCESSINFO.ACC0_RESOURCENAME
Access Permission level 1 (access_info_1):
ACCESSINFO.ACC1_RESOURCENAME
ACCESSINFO.ACC1_ATTR
ACCESSINFO.ACC1_COUNT
where:
acc1_resource_name contains a string specifying the name of a particular
resource (see the preceding discussion on acc0_resour-
ce_name).
acc1_attr specifies the attributes of acc1_resource_name. The bits
of acc1_attr are defined as follows:
Bit Meaning
0 Audit all. When this bit is set, all ac-
cess attempts will be audited. No other
bits in the field can be set.
It is an error to set any other bits when
bit 0 is set.
When bit 0 is cleared, the remaining bits are defined as
follows in this table.
1-3 Reserved, with a value of 0.
4 If 1, audit successful file opens.
5 If 1, audit successful file writes and
successful directory creates.
6 If 1, audit successful file deletes or
truncates and successful directory de-
letes.
7 If 1, audit successful file and directory
access control profile change.
8 If 1, audit failed file opens.
9 If 1, audit failed file writes and failed
directory creates.
10 If 1, audit failed file deletes or trun-
cates and failed directory deletes.
11 If 1, audit failed file and directory
access control profile change.
12-15 Reserved, with a value of 0.
acc1_count specifies the number of resource permission data
structures following the access permission data structu-
re.
In addition, the access permission data structure can be followed by zero or
more (up to a maximum of 64) resource permission data structures. These
structures are used to define resource permissions for individual users or
groups.
Resource Permissions (acl_info):
ACCESSINFO.n.ACL_UGNAME
ACCESSINFO.n.ACL_ACCESS (n: 0..ACC1_COUNT-1)
where:
acl_ugname string specifying a particular user name or group name.
acl_access specifies permission of a user name or a group name.
BitMask Meaning
0 No permission to access the resource
0x01 Permission to read data from a resour-
ce, and by default execute the resource.
0x02 Permission to write data to the resour-
ce.
0x04 Permission to create an instance of the
resource (such as a file); data can be
written to the resource when creating it.
0x08 Permission to execute the resource.
0x10 Permission to delete the resource.
0x40 Permission to modify the permissions
(read, write, create, execute, and delete)
assigned to a resource for a user or ap-
plication.
0x8000 Permission for a particular group; if
returned, indicates that the entry is for
a group.
----------------------------------------------------------------------------
NetAccessAdd
────────────
Add a access profile for the resource on a server. Only level 1 info is
supported.
Syntax:
ret = NetAccessAdd( server, level, rexx-buffer, dummy )
Parameter:
server UNC servername like \\SERVER1
level 1
rexx-buffer name of REXX variable containing the
access permission structure (ac-
cess_info_1) followed by resource per-
mission structures
dummy reserved to preserve NetApi compati-
bility
Example:
/* Set access permission for USERS to readonly */
Buffer.acc1_resource_name = 'D:\'
Buffer.acc1_attr = 0
Buffer.acc1_count = 1
Buffer.0.acl_ugname = 'USERS'
Buffer.0.acl_access = 1
ret = NetAccessAdd( '\\SERVER', 1, 'Buffer', '' )
----------------------------------------------------------------------------
NetAccessCheck
──────────────
Used to check that user can do the operation on resource.
Syntax:
ret = NetAccessCheck( resvd, user, resource, operation, result )
Parameter :
resvd must be ""
user name of user
resource name of resource, e.g. UNC name
operation access control bitmask
result name of REXX variable, that can con-
tain:
0 access allowed
5 ERROR_ACCESS_DENIED
Example:
/* Do I have read access to D:\ ? */
ret = NetAccessCheck( '', 'JOHN', 'D:\', 1, 'res' )
IF res = 0 SAY 'Access allowed.'
----------------------------------------------------------------------------
NetAccessGetInfo
────────────────
Get information about access profiles for the resource on a server
Syntax:
ret = NetAccessGetInfo( server, resource, level, rexx-buffer, dummy,
dummy )
Parameter :
server UNC servername like \\SERVER1
resource name of the resource like C:\IBMLAN
level only level '1' is supported
rexx-buffer name of REXX variable containing the
acc1_ struct followed by acc1_count
acl_ structures
dummy reserved to preserve NetApi compati-
bility
Example:
ret= NetAccessGetInfo( '\\SERVER', 'C:\IBMLAN', 1, 'Buffer', '' )
IF ret = 0 THEN DO
SAY 'Permissions for ' || Buffer.acc1_resource_name
DO i = 0 TO Buffer.acc1_count-1
SAY Buffer.i.acl_ugname Buffer.i.acl_access
END
END
----------------------------------------------------------------------------
NetAccessSetInfo
────────────────
Set information about access profiles for the resourceon a server changes the
access profile for the specified resource. Only level 1 is supported. The
parmnum option is not implemented.
Syntax:
ret = NetAccessSetInfo( server, resource, level, rexx-buffer, dummy,
parmnum )
Parameter:
server UNC servername like \\SERVER1
resource name of the resource like C:\IBMLAN
level only level '1' is supported
rexx-buffer name of REXX variable containing the
access_info_1 struct
paramnum 0: change the complete access con-
trol entry by providing an ac-
cess_info_1 struct.
any other value is not supported
dummy reserved to preserve NetApi compati-
bility
Example:
ret= NetAccessGetInfo( '\\SERVER', 'D:\', 1, 'Buffer', '' )
IF ret = 0 THEN DO
new = Buffer.acc1_count
Buffer.new.acl_ugname = 'JOHN'
Buffer.new.acl_access = 1
Buffer.acc1_count = Buffer.acc1_count+1
ret = NetAccessSetInfo( '\\SERVER', 'D:\', 1, 'Buffer', '', 0)
DO i = 0 TO Buffer.acc1_count-1
SAY Buffer.i.acl_ugname Buffer.i.acl_access
END
END
----------------------------------------------------------------------------
NetAccessGetUserPerms
─────────────────────
Returns permissions for the resource on the specified server for user in the
REXX variable
Syntax:
ret = NetAccessGetUserPerms( server, user, resource, perms )
Parameter:
server server, which owns the resource
user User to get permissions for
resource directory, pipe, etc.
perms name of REXX variable, that will con-
tain the permission mask
Example:
ret = NetAccessGetUserPerms( '\\SERVER', 'JOHN', 'D:\', 'perm' )
IF ret = 0 THEN
SAY 'Permissions for D:\ :' || perm
----------------------------------------------------------------------------
NetAccessEnum
─────────────
Lists all resources with defined access profiles. Only level 0 is supported
Syntax:
ret = NetAccessEnum( server, basepath, recursively, level, buffer,
dummy, eread, dummy )
Parameter:
server name of server, e.g. \\SERVER1
basepath display profiles for resources beginning
with basepath (e.g. C:\ or \PIPE)
recursively 1 = include all subdirectories
0 = don't include subdirectories
level 0
rexx-buffer name of Rexx variable, containing the
found profiles
eread Rexx variable containing the number of
profiles found
Example:
ret = NetAccessEnum( '\\SERVER', 'D:\', 1, 0, 'Buffer', '', 'eread',
'')
IF ret = 0 THEN DO
DO i = 0 TO eread-1
SAY Buffer.i.acc0_resource_name
END
END
----------------------------------------------------------------------------
NetAccessDel
────────────
Removes the access profile for the resource
Syntax:
ret = NetAccessDel( server, resource )
Parameter:
server name of server (e.g. "\\SERVER1")
resource directory, pipe, printer, etc.
Example:
ret = NetAccessDel( '\\SERVER', '\PRINT\PRINTER1' )
----------------------------------------------------------------------------
REQUESTER SECTION
─────────────────
To log a user name on to or off a requester or to execute a logon script for a
user name, an application calls the NetWkstaSetUID2 function.
To configure a requester, an application calls the NetWkstaSetInfo function.
The NetWkstaGetInfo function returns information about the configuration of
a requester.
Note:
The API call NetWkstaSetUID will not be supported. This API has been
replaced by NetWkstaSetUID2.
Data structures
───────────────
Requester Information (Level 0) (wksta_info_0) :
Buffer.wki0_root Buffer.wki0_sizworkbuf
Buffer.wki0_computername Buffer.wki0_maxwrkcache
Buffer.wki0_username Buffer.wki0_sesstimeout
Buffer.wki0_langroup Buffer.wki0_sizerror
Buffer.wki0_ver_major Buffer.wki0_numalerts
Buffer.wki0_ver_minor Buffer.wki0_numservices
Buffer.wki0_charwait Buffer.wki0_errlogsz
Buffer.wki0_chartime Buffer.wki0_printbuftime
Buffer.wki0_charcount Buffer.wki0_numcharbuf
Buffer.wki0_keepconn Buffer.wki0_sizcharbuf
Buffer.wki0_keepsearch Buffer.wki0_logon_server
Buffer.wki0_maxthreads Buffer.wki0_wrkheuristics
Buffer.wki0_maxcmds Buffer.wki0_mailslots
Buffer.wki0_numworkbuf
Requester Information (Level 1) (wksta_info_1):
Requester information level 1 includes all the fields of wksta_info_0, plus
oth_domains, logon_domains, and numdgrambuf.
wki1_root wki1_sesstimeout
wki1_computername wki1_sizerror
wki1_username wki1_numalerts
wki1_langroup wki1_numservices
wki1_ver_major wki1_errlogsz
wki1_ver_minor wki1_printbuftime
wki1_charwait wki1_numcharbuf
wki1_chartime wki1_sizcharbuf
wki1_charcount wki1_logon_server
wki1_keepconn wki1_wrkheuristics
wki1_keepsearch wki1_mailslots
wki1_maxthreads wki1_logon_domain
wki1_maxcmds wki1_oth_domains
wki1_numworkbuf wki1_numdgrambuf
wki1_sizworkbuf
wki1_maxwrkcache
Requester Information (Level 10)(wksta_info_10):
The wksta_info_10 data structure is supplied to fulfill the needs of remote
users who want to obtain certain information from a server. This data
structure allows remote users to discover what domain a server belongs to.
wki10_computername
wki10_username
wki10_langroup
wki10_ver_major
wki10_ver_minor
wki10_logon_domain
wki10_oth_domains
where:
wki?_root string containing the path to the IBMLAN directory of
the computer (the recommended default path is \IBM-
LAN).
wki?_computername string containing the computer name of the local
requester being configured.
wki?_username string containing the user's name logged on to the
requester.
wki?_langroup string containing the name of the domain to which the
requester belongs.
wki?_ver_major major version number of the OS/2 LAN Server software
running on the computer.
wki?_ver_minor minor version number of the OS/2 LAN Server soft-
ware running on the computer.
wki?_charwait number of seconds the requester will wait for a remote
serial or communication device to become available.
wki?_chartime number of milliseconds the requester will wait to collect
data to send to a remote serial or communication
device.
wki?_charcount number of bytes of information the requester will send
to a remote serial or communication device.
wki?_keepconn number of seconds that an inactive connection from the
requester to a resource of a server will be maintained.
wki?_keepsearch number of seconds that an inactive search will continue.
wki?_maxthreads number of threads the requester can dedicate to the net-
work.
wki?_maxcmds number of simultaneous network device driver com-
mands that can be sent to the network.
wki?_numworkbuf number of internal buffers the requester has.
wki?_sizworkbuf size (in bytes) of each internal buffer.
wki?_maxwrkcache maximum size (in bytes) of an internal cache buffer.
wki?_sesstimeout number of seconds that are waited before disconnecting
an inactive session between a requester and a server.
wki?_sizerror size (in bytes) of an internal error buffer.
wki?_numalerts maximum number of clients that can receive alert
messages.
wki?_numservices number of services that can be started on the requester
at any time.
wki?_errlogsz maximum size (in kilobytes) of the error log file of the
requester.
wki?_printbuftime number of seconds waited before closing inactive
compatibility mode print jobs.
wki?_numcharbuf number of character pipe buffers and device buffers the
requester can have.
wki?_sizcharbuf maximum size (in bytes) of a character pipe buffer and
device buffer.
wki?_logon_server string containing the name of the preferred server,
which validates user logon requests for this user. A
server name of an asterisk (*) indicates that the logon
request can be handled by any domain controller or
backup server on the domain. A '' indicates that the
domain controller will be the preferred logon server.
wki?_wrkheuristics string of flags used to control a requester's operation.
wki?_mailslot specifies whether mailslots are allowed. If 0, mailslots
are not supported on this machine, and Netlogon service
will not start.
wki?_logon_domains names the domain to which the user is logged on. It is
returned as '' when no one is logged on.
wki?_oth_domains is an string listing all domains on which the machine is
currently listed. This is a string which is a space--
delimited list of domains. The oth_domains field is
settable with NetWkstaSetInfo.
wki?_numdgrambuf is the number of buffers allocated for receiving datag-
rams.
----------------------------------------------------------------------------
NetWkstaSetInfo
───────────────
modifies actual LAN server parameter. The parmnum field is not supported.
Syntax:
ret = NetWkstaSetInfo( server, level, rexx-buffer, dummy, dummy )
Parameter :
server see above
level 0, 1
rexx-buffer name of rexx variable containing wkst-
a_info_? data
Example:
/* Change the other domains field */
ret = NetWkstaGetInfo( '\\SERVER', 1, 'buffer', '', '' )
Buffer.wki1_oth_domains = 'DOM1 DOM2'
ret = NetWkstaSetInfo( '\\SERVER', 1, 'buffer', '', '' )
----------------------------------------------------------------------------
NetWkstaGetInfo
───────────────
Query actual LAN requester parameter
Syntax:
ret = NetWkstaGetInfo( server, level, rexx-buffer, dummy, dummy )
Parameter:
server see above
level 0, 1, 10
rexx-buffer name of rexx variable containing wkst-
a_info_? data
Example:
ret = NetWkstaGetInfo( '', 10, 'buffer', '', '' )
SAY 'This computer name: ' || buffer.wki10_computer_name
----------------------------------------------------------------------------
NetWkstaSetUID2
───────────────
Logons/ Logoffs a user to/from the network and returns statistics. It is
recommended that you use the UPM API instead, because no logon assign-
ments or profiles were created. The UPM will not register this logon.
Syntax:
ret = NetWkstaSetUID2( dummy, domain, username, password, parms,
ucond, level, rexx-buffer, dummy, dummy )
Parameter:
domain name of logon domain
username name of user to log on (if "" a user
wants to log off)
password password of user. (if "" the ID has no
password) This field is CASE SENSI-
TIVE For compatibility to LAN Server-
interface use only UPPER CHARAC-
TERS !
parms In LAN Server environments it must be
""
ucond specifies what action to take if another
user name is logged on to the requester.
Defined are four values:
Value Meaning
0 NetWkstaSetUID2 fails, and the
user's identification number
(UID) does not change.
1 Logs the current user name off,
disconnecting any connections to
redirected resources.
2 Cancels any connections and other-
pending activities necessary.
Fails if any connection is used
by a process as the current drive.
3 WkstaSetUID2 always succeeds
and forces all disconnections.
level must be 1.
rexx-buffer name of rexx variable containing user
data
----------------------------------------------------------------------------
DOMAIN SECTION
──────────────
The functions in this category deal with domain specific information. The
NetGetDCName function obtains the name of the domain controller when
provided the name of the domain. The NetLogonEnum function enumerates
the information of logged on users in a domain. The information is in the level
0, 1, or 2 user_logon_info data structures. See the data structure information
under the User category.
NetGetDCName
────────────
Returns the name of the domain controller.
Syntax:
ret = NetGetDCName( server, domain, DC-name, dummy )
Parameter:
server where to execute command
domain see above
DC-name contains the name of the domain con-
troller after return.
Example:
ret = NetGetDCName( '', 'DOM1', 'Controller' )
SAY 'The name of the DC is: ' || Controller
----------------------------------------------------------------------------
NetLogonEnum
────────────
Supplies information about logged on users.
Syntax:
ret = NetLogonEnum( server, level, buffer, dummy, eread, dummy )
Parameter :
server where to execute
level 0, 2
rexx-buffer name of rexx variable containing logon
data. Depending on the information
level it contains an usrlog0 or an
usrlog2 structure.
eread Number of logged on users
Example:
ret = NetLogonEnum( '', 0, 'Buffer', '', 'eread', '' )
DO i = 0 TO eread-1
SAY Buffer.i.usrlog0_name
END
----------------------------------------------------------------------------
USE SECTION
───────────
The functions in the Use category examine or control connections (uses)
between requesters and servers. Administrative privilege is required to call
them remotely.
Data structures
───────────────
Use Information (Level 0)(use_info_0):
ui0_local
ui0_remote
Use Information (Level 1)(use_info_1):
ui1_local
ui1_remote
ui1_password
ui1_status
ui1_asg_type
ui1_refcount
ui1_usecount
where:
ui?_local string specifying the local device name being redirected
to the shared resource.
ui?_remote string specifying the UNC name of the remote resource
being accessed. The string must be in the form \\serve-
rname\netname.
ui?_password string containing the password needed to establish a
session between a specific requester and server. This
field is only used by NetUseAdd.
ui?_status specifies the status of the connection. Seven possible
values for ui1_status are defined as follows:
Value Meaning
0 Connection valid
1 Paused by local requester
2 Session removed
2 Connection disconnected
3 Network error
4 Connection being made
5 Reconnecting
ui?_asg_type specifies the type of remote resource being accessed.
Five types of resources are defined as follows:
Value Meaning
-1 Matches the type of the share of the
server (wildcards are used only when
ui1_local is a null string).
0 Disk device.
1 Spooled printer.
2 Serial device.
3 Interprocess communication (IPC).
ui?_refcount indicates the number of files, directories, and other
processes that are open on the remote resource.
ui?_usecount indicates the number of explicit connections (redirection
of a local device name) or implicit UNC connections
(redirection of a null local device name) that are
established with the resource.
----------------------------------------------------------------------------
NetUseAdd
─────────
Establishes a connection between a local device (or NULL) and a remote re-
source.
Syntax:
ret = NetUseAdd( server, level, rexx-buffer, dummy )
Parameter:
server name of computer for which the con-
nection will be established. For server
<> "" you will need administrator pri-
vileges, for the local machine server
must be ""
level 1
rexx-buffer name of rexx variable containing use_i-
nfo_1 data
Example:
Buffer.ui1_local = 'T:'
Buffer.ui1_remote = '\\SERVER\D$'
Buffer.ui1_password = ''
Buffer.ui1_asg_type = 0
ret = NetUseAdd( '', 1, 'Buffer', '' )
----------------------------------------------------------------------------
NetUseDel
─────────
Ends a connection.
Syntax:
ret = NetUseDel( server, usename, ucond )
Parameter:
server points to an ASCIIZ string containing
the name of the remote server on which
the function is to execute. A null poin-
ter or string specifies a local computer.
usename points to an ASCIIZ string that contains
the following information:
- If the connection is a device name
connection, the name specified must be
the name of the local device.
- If the connection is a UNC connection
(either implicit or explicit), the name
must be the UNC name.
forceflag is one of three values specifying three
types of disconnection. The following
options are available:
Value Meaning
0 Maintains the connection in a
dormant state, decrementing
usecount. A dormant session can
quickly be activated as soon as
reconnection is needed, improv-
ing system performance.
1 Connection is removed only if
no file directory, or drive is
opened. usecount is decremented
for a local device name connec-
tion and forced to 0 for a UNC
connection.
2 All files, directories, and drives
open on the connection are
forced closed.
Example:
ret = NetUseDel( '', 'T:', 2 )
----------------------------------------------------------------------------
NetUseEnum
──────────
Lists all current connections
Syntax:
ret = NetUseEnum( server, level, rexx-buffer, dummy, eread, dummy )
Parameter:
server where to execute
level 0, 1
rexx-buffer name of rexx variable containing use_i-
nfo_? data
eread rexx variable containing number of con-
nections found
Example:
ret = NetUseEnum( '', 1, 'Buffer', '', 'eread', '' )
SAY 'Local Remote-name'
DO i = 0 TO eread-1
SAY Buffer.i.ui1_local Buffer.i.ui1_remote
END
----------------------------------------------------------------------------
NetUseGetInfo
─────────────
Returns information about a connection.
Syntax:
ret = NetUseGetInfo( server, usename, level, rexx-buffer, dummy, dummy )
Parameter:
server where to perform
usename name of the connection
level 1
rexx-buffer name of rexx variable containing use_i-
nfo_1 data
Example:
ret = NetUseGetInfo( '', 'T:', 1, 'Buffer', '', '' )
SAY 'Remote name: ' Buffer.ui1_remote
----------------------------------------------------------------------------
MESSAGE SECTION
───────────────
The functions in the Message category are used to send, log, and forward
messages. The administrator can execute these functions remotely.
Data structures
───────────────
Message Information (Level 0)(message_info_0) :
msgi0_name
Message Information (Level 1) (message_info_1)
msgi1_name
msgi1_forward_flag
msgi1_forward
where:
msgi?_name specifying which messaging name to send the message.
msgi?_forward_flag specifies whether messages will be sent to a user or
application on the local computer, or forwarded to a
user or application on a remote computer. msgi1_-
forward_flag can be defined as follows:
Bit Meaning
0-1 Reserved; must be 0.
2 If 1, specifies a user name on a remote
computer.
3 Reserved; must be 0.
4 If 1, specifies a user name on the local
computer.
5-7 Reserved; must be 0.
msgi?_forward string specifying the user name to which the message
will be sent, if messages are to be forwarded.
----------------------------------------------------------------------------
NetMessageBufferSend
────────────────────
Send a buffer to selected messengers
Syntax:
ret = NetMessageBufferSend( server, msgname, buffer, dummy )
Parameter:
server where the message will be sent
msgname receiver, for broadcasts enter "*"
buffer message to send
Example:
ret = NetMessageBufferSend( '', '*', 'Hello World !', '' )
----------------------------------------------------------------------------
NetMessageFileSend
──────────────────
Send a file to selected messengers
Syntax:
ret = NetMessageFileSend( server, msgname, filename )
Parameter:
server where the message will be send
msgname receiver, for broadcasts enter "*"
filename file containing the message
Example:
ret = NetMessageFileSend( '', '*', 'C:\ADMIN.TXT' )
----------------------------------------------------------------------------
NetMessageNameEnum
──────────────────
Lists the names in the message name table
Syntax:
ret = NetMessageNameEnum( server, level, rexx-buffer, dummy, eread,
dummy )
Parameter:
server see above
level 0, 1
rexx-buffer name of rexx variable containing mes-
sage_info_? data
eread number of entries
Example:
ret = NetMessageNameEnum('', 0, 'Buffer', '', 'eread', '' )
DO i = 0 TO eread-1
SAY Buffer.i.msgi0_name
END
----------------------------------------------------------------------------
NetMessageNameAdd
─────────────────
Registers a name in the message name table
Syntax:
ret = NetMessageNameAdd( server, name, fwd_action )
Parameter:
server see above
name name to register
fwd_action action to take if name is already for-
warded. If fwd_action is non-zero, the
name is added to the message name
table; a 0 value causes an error to be
returned if the name has already been
forwarded.
Example:
ret = NetMessageNameAdd( '', 'JOHN', 0 )
----------------------------------------------------------------------------
NetMessageNameDel
─────────────────
Deregisters a name in the message name table
Syntax:
ret = NetMessageNameDel( server, name, fwd_action )
Parameter:
server see above
name name to deregister
fwd_action specifies the action to take if the mes-
sages for name are being forwarded to
another name. If fwd_action is non-
-zero, the forwarded name is deleted. A
0 value prevents the name from being
deleted.
Example:
ret = NetMessageNameDel( '', 'JOHN', 0 )
----------------------------------------------------------------------------
NetMessageNameFwd
─────────────────
Modifies the message name table to forward messages to another messaging
name
Syntax:
ret = NetMessageNameFwd( server, name, fwd_name, del_for )
Parameter:
server see above
name name in message name table
forwardname points to an ASCIIZ string specifying
the name to receive name's forwarded
messages.
delfor specifies the action to take if name
forwards messages to another name. If
non-zero, then any previous forwarded
user name is deleted; if 0, it is not
deleted and an error is returned.
Example:
ret = NetMessageNameFwd( '', 'JOHN', 'MARY', 0 )
----------------------------------------------------------------------------
NetMessageNameGetInfo
─────────────────────
Get information about a registered name
Syntax:
ret = NetMessageNameGetInfo( server, name, level, buffer, dummy,
dummy )
Parameter:
server see above
name name to get information
level 1
rexx-buffer name of rexx variable containing mes-
sage_info_1 data
Example:
ret = NetMessageNameGetInfo( '', 'JOHN', 1, 'buffer', '', '' )
SAY 'Name: ' Buffer.msgi1_name
SAY 'Forward flag: ' Buffer.msgi1_forward_flag
SAY 'Forward to: ' Buffer.msgi1_forward
----------------------------------------------------------------------------
NetMessageNameUnFwd
───────────────────
Unforwards a message name
Syntax:
ret = NetMessageNameUnFwd( server, name )
Parameter:
server see above
name name whose message forwarding is to
be canceled
Example:
ret = NetMessageNameUnFwd( '', 'MARY' )
----------------------------------------------------------------------------
NetMessageLogFileSet
────────────────────
Specifies a file to log messages received by registered users and enables or
disables logging.
Syntax:
ret = NetMessageLogFileSet( server, filename, on )
Parameter:
server see above
filename specifies the path name of the device
(LPTn or COMn) or file to which the
messages are logged. If filename is "",
no message file will be used; in this
case, the value of on must be 0.
on specifies whether (1) or not (0) logging
is enabled.
Example:
ret = NetMessageLogFileSet( '', 'C:\IBMLAN\LOGS\NEW.LOG', 1 )
----------------------------------------------------------------------------
NetMessageLogFileGet
────────────────────
Returns the file to log messages received by registered users and reports
whether or not logging is enabled.
Syntax:
ret = NetMessageLogFileGet( server, filename, dummy, pon )
Parameter:
server see above
filename rexx-variable that will contain the name
of the message file.
pon rexx-variable that will contain the status
of message logging
Example:
ret = NetMessageLogFileGet( '\\SERVER', 'File', '', 'pon' )
SAY 'Log file: ' File
IF pon THEN SAY 'Logging enabled'
ELSE SAY 'Logging disabled.'
----------------------------------------------------------------------------
CONFIGURATION SECTION
─────────────────────
The functions in the Configuration category retrieve network configuration
information from the IBMLAN.INI file. The NetConfigGet2 function retrieves
a single parameter value for given network component; NetConfigGetAll2
returns all of the parameters for given components.
The APIs NetConfigGet and NetConfigGetAll are replaced by their newer
counterparts NetConfigGet2 and NetConfigGetAll2 and are therefore obsolete.
NetConfigGet2
─────────────
Retrieves a specified parameter value from the IBMLAN.INI file of a local
computer or a remote server.
Syntax:
ret = NetConfigGet2( server, dummy, component, parameter,
rexx-buffer, dummy, dummy )
Parameter:
server see above
component the name of the component to search.
parameter the parameter whose value is to be
returned.
rexx-buffer name of rexx variable which will con-
tain the parameters value
Example:
ret = NetConfigGet2( '', '', 'REQUESTER', 'WRKSERVICES', 'Buffer', '', '' )
SAY 'Workstation services : ' Buffer
----------------------------------------------------------------------------
NetConfigGetAll2
────────────────
Retrieves all parameter values for a component from the IBMLAN.INI file of
a local computer or a remote server.
Syntax:
ret = NetConfigGet2( server, dummy, component, rexx-buffer, dummy,
dummy, dummy )
Parameter:
server see above
component the name of the component to search.
rexx-buffer name of rexx variable which will con-
tain the parameters values. In Buffer.0
is the number of entries read returned.
Buffer.1 to Buffer.n contain a formatted
parameter line of the IBMLAN.INI.
Example:
ret = NetConfigGetAll2( '', '', 'REQUESTER', 'Buffer', '', '', '' )
IF ret = 0 THEN DO
FOR i = 0 TO Buffer.0
SAY Buffer.i
END
----------------------------------------------------------------------------
CONNECTION SECTION
──────────────────
The NetConnectionEnum function lists all connections made to a server by a
requester client or all connections made to the shared resources of a server.
Data structures
───────────────
Connection Information (Level 0)(conn_info_0) :
coni0_id
Connection Information (Level 1)(conn_info_1):
coni1_id
coni1_type
coni1_num_opens
coni1_num_users
coni1_time
coni1_username
coni1_netname
where:
coni?_id is the connection identification number.
coni?_type indicates the type of connection made from the local
device name to the shared resource. Defined are the fol-
lowing types of connection:
Value Meaning
0 Disk connection.
1 Spooler queue connection.
2 Serial device connection.
3 Interprocess communication (IPC) con-
nection.
coni?_num_opens indicates the number of files that are currently open as
a result of the connection.
coni?_num_users indicates the number of users on the connection.
coni?_time indicates the number of seconds the connection has
been established.
coni?_username string indicating the user that made the connection.
coni?_netname string indicating either the netname of the shared
resource of the server or the computer name of the
requester, depending on which name was specified as
the qualifier parameter of the NetConnectionEnum
function. The type of name supplied to coni1_netname
is the inverse of the type supplied to the qualifier
parameter.
----------------------------------------------------------------------------
NetConnectionEnum
─────────────────
Gives a listing of connections made to a shared resource of a server, or of all
connections established from a particular computer to a server.
Syntax:
ret = NetConnectionEnum( server, qualifier, level, buffer, dummy,
eread, dummy )
Parameter:
server see above
qualifier specifies either the netname of the
shared resource whose connections will
be listed or the client name of the re-
quester whose connections to the shared
resource will be listed (qualifier cannot
be a null string).
level 1
rexx-buffer name of rexx variable containing con-
n_info_? data
eread rexx-variable containing number of
entries found
Example:
ret = NetConnectionEnum( '\\SERVER', 'PRINTER1', 1, 'Buffer', '', 'eread', '' )
DO i = 0 TO eread-1
SAY Buffer.i.coni1_username
END
----------------------------------------------------------------------------
ERROR SECTION
─────────────
Each time an error condition occurs during a network operation, an error log
entry can be generated by NetErrorLogWrite to record error information. The
other two functions enable opening (NetErrorLogRead) and clearing
(NetErrorLogClear) of the error log file (which stores the entries).
Error log entries are stored as ASCII text, preceded by a hexadecimal header.
The default error log file name is \IBMLAN\LOGS\NET.ERR. All error
logging functions perform their operations on this file.
These APIs are not supported yet:
- NetErrorLogOpen
- NetErrorLogRead
- NetErrorLogWrite
NetErrorLogClear
────────────────
Clears (and optionally saves) the computers error log file
Syntax:
ret = NetErrorLogClear( server, backupfile, dummy )
Parameter:
server see above
backupfile If not "", the error log is MOVED to
this file, before it is cleared. You can
specify a different directory and name,
but you must specify the same local
drive where the LAN Server is in-
stalled, otherwise an error 17 will be
returned.
----------------------------------------------------------------------------
FILE SECTION
────────────
The functions in the File category provide a system for monitoring the file,
device, and pipe resources that are opened on a server and for closing one of
these resources if necessary.
The following API are only held in the NETAPI libary for compatibility
reasons and are not supported by RexxLan/2:
- NetFileClose (replaced by NetFileClose2)
- NetFileEnum (replaced by NetFileEnum2)
- NetFileGetInfo (replaced by NetFileGetInfo2)
Data structures
───────────────
Opened Resources (Level 2)(file_info_2):
fi2_id
Opened Resources (Level 3)(file_info_3):
fi3_id
fi3_permissions
fi3_num_locks
fi3_pathname
fi3_username
where:
fi?_id is the identification number assigned to the resource at
opening.
fi?_permissions indicates the access permissions of the opening applica-
tion. The bit mask of fi3_permissions is defined as
follows:
Mask Meaning
0x1 Permission to read a resource, and by
default, execute the resource.
0x2 Permission to write to a resource.
0x4 Permission to create a resource; data
can be written when creating the re-
source.
fi?_num_locks indicates the number of file locks on the file, device, or
pipe.
fi?_pathname string giving the path name of the opened resource.
fi?_username string indicating the user that opened the resource.
----------------------------------------------------------------------------
NetFileEnum2
────────────
Supplies information about some or all open files on the server. The re-
sume_key function, as described in the LAN Application Programmers
Reference, will not be passed through the REXX API, the REXX function
iterates the NetFileEnum2 calls, until it retrieved all information.
Syntax:
ret = NetFileEnum2( server, basepath, user, level, buffer, dummy,
eread, dummy, dummy )
Parameter:
server see above
basepath base path for enumeration. If not
NULL, basepath serves as a qualifier to
the enumeration. The entries returned
are limited to those whose name begins
with the qualifier string.
username indicates the name of the user. If not
NULL, username serves as a qualifier
to the enumeration. The files returned
are limited to those whose opener
username matches the qualifier.
level 2, 3
rexx-buffer name of rexx variable containing file
data (file_info_2 or file_info_3 struct)
eread contains number of entries found
Example:
ret = NetFileEnum2( '\\SERVER', 'D:\', '', 3, 'Buffer', '', 'eread', '', '' )
SAY 'ID Filename'
DO i = 0 to eread-1
SAY Buffer.i.fi3_id Buffer.i.fi3_pathname
END
----------------------------------------------------------------------------
NetFileGetInfo2
───────────────
Retrieves information about a particular opening of a server resource.
Syntax:
ret = NetFileGetInfo2( server, file, level, buffer, dummy, dummy )
Parameter:
server see above
file identifier of open file.
level 3
rexx-buffer name of rexx variable containing
file_info_3 data
Example:
SAY 'Enter file ID:'
PULL id
ret = NetFileGetInfo2( '', id, 3, 'Buffer', '', '' )
SAY 'User : ' Buffer.fi3_username
SAY 'File : ' Buffer.fi3_pathname
----------------------------------------------------------------------------
NetFileClose2
─────────────
forces a close to an open file
Syntax:
ret = NetFileClose2( server, file-ID )
Parameter:
server see above
file-ID identifier of open file.
----------------------------------------------------------------------------
SERVER SECTION
──────────────
With the functions in the Server category, an application can perform remote
administrative tasks on a local or remote server.
The API NetServerEnum was replaced by NetServerEnum2 and is not
supported.
Data structures
───────────────
Server Information (Level 0) (server_info_0):
sv1_name
Server Information (Level 1) (server_info_1):
sv1_name
sv1_version_major
sv1_version_minor
sv1_type
sv1_comment
Server Information (Level 2) (server_info_2):
sv2_name sv2_chdevq
sv2_version_major sv2_chdevjobs
sv2_version_minor sv2_connections
sv2_type sv2_shares
sv2_comment sv2_openfiles
sv2_ulist_mtime sv2_sessopens
sv2_glist_mtime sv2_sessvcs
sv2_alist_mtime sv2_sessreqs
sv2_users sv2_opensearch
sv2_disc sv2_activelocks
sv2_alerts sv2_numreqbuf
sv2_security sv2_sizreqbuf
sv2_auditing sv2_numbigbuf
sv2_numadmin sv2_numfiletasks
sv2_lanmask sv2_alertsched
sv2_hidden sv2_erroralert
sv2_announce sv2_logonalert
sv2_anndelta sv2_accessalert
sv2_guestacct sv2_diskalert
sv2_userpath sv2_netioalert
sv2_chdevs sv2_maxauditsz
sv2_srvheuristics
Server Information (Level 3)(server_info_3):
sv3_name sv3_connections
sv3_version_major sv3_shares
sv3_version_minor sv3_openfiles
sv3_type sv3_sessopens
sv3_comment sv3_sessvcs
sv3_ulist_mtime sv3_sessreqs
sv3_glist_mtime sv3_opensearch
sv3_alist_mtime sv3_activelocks
sv3_users sv3_numreqbuf
sv3_disc sv3_sizreqbuf
sv3_alerts sv3_numbigbuf
sv3_security sv3_numfiletasks
sv3_auditing sv3_alertsched
sv3_numadmin sv3_erroralert
sv3_lanmask sv3_logonalert
sv3_hidden sv3_accessalert
sv3_announce sv3_diskalert
sv3_anndelta sv3_netioalert
sv3_guestacct sv3_maxauditsz
sv3_pad1 sv3_srvheuristics
sv3_userpath sv3_auditedevents
sv3_chdevs sv3_autoprofile
sv3_chdevq sv3_autopath
sv3_chdevjobs
where:
sv?_name string containing the name of a server.
sv?_version_major major release version number of the LAN Server
software.
sv?_version_minor minor release version number of the LAN Server
software.
sv?_type type of software the computer is running.
Mask Type of Software
0x01 Requester
0x02 Server
0x08 Domain controller
0x10 Backup domain controller
0x20 Time server
-1 All types of servers
sv?_comment string containing a comment describing the server.
sv?_ulist_mtime last time (in seconds from 00:00:00 1 January, 1970)
the users list was modified.
sv?_glist_mtime last time (in seconds from 00:00:00 1 January, 1970)
the groups list was modified.
sv?_alist_mtime last time (in seconds from 00:00:00 1 January, 1970)
the access control list was modified.
sv?_users number of users that are allowed on the server.
sv?_disc indicates the auto-disconnect time (in minutes). A
session is disconnected if it is idle longer than the time
specified by sv2_disc. If 0, auto-disconnect is not
enabled.
sv?_alerts string containing the list of user names on the alert
table of the server. Spaces separate the names.
sv?_security specifies the security type of the server.
Value Type of Security
0 Share-level
1 User-level
sv?_auditing indicates whether auditing is enabled on the server. If
0, auditing is disabled. If non-zero, the server is audit-
ing all OS/2 LAN Server activities, as described in
Auditing Category.
sv?_numadmin number of administrators a server can accommodate.
sv?_lanmask determines the order in which the network device
drivers are served.
sv?_hidden determines whether the server is visible to other com-
puters in the same domain.
Value Meaning
0 Server
1 Hidden server, not visible
sv?_announce network announce delta (in seconds), which determines
how often the server will be announced to other com-
puters on the network.
sv?_anndelta random announce rate (in milliseconds) for
sv?_announce. The announce interval (sv?_announce)
can vary by the amount specified in sv?_anndelta (for
example, it could vary from 9.999 seconds to 10.001
seconds instead of being exactly 10 seconds each time).
sv?_guestacct string containing the name of a server's reserved
GUEST user account.
sv?_userpath string containing the path name to user directories.
sv?_chdevs indicates the number of serial devices that can be
shared on the server.
sv?_chdevq number of serial device queues that can coexist on the
server.
sv?_chdevjobs number of serial device jobs that can be pending on a
server.
sv?_connections number of connections to netnames that are allowed on
a server.
sv?_shares number of netnames a server can accommodate.
sv?_openfiles number of files that can be opened at once.
sv?_sessopens number of files that can be opened in one session.
sv?_sessvcs maximum number of virtual circuits per client.
sv?_sessreqs number of simultaneous requests that a client can make
on any virtual circuit.
sv?_opensearch number of searches that can be opened at once.
sv?_activelocks number of file locks that can be active.
sv?_numreqbuf number of server buffers that are provided.
sv?_sizreqbuf size (in bytes) of each server buffer.
sv?_numbigbuf number of 64KB server buffers that are provided.
sv?_numfiletasks number of processes that can access the operating
system at one time.
sv?_alertsched alert interval (in seconds) for notifying an administrator
of a network event.
sv?_erroralert number of entries that can be written to the error log
file during a sv2_alertsched interval before notifying an
administrator.
sv?_logonalert number of failed logon attempts to allow a user before
notifying an administrator.
sv?_accessalert number of failed file accesses to allow before issuing an
administrative alert.
sv?_diskalert number of kilobytes of free disk space, at which, an
administrator must be notified that the free space is low.
sv?_netioalert network I/O error ratio (in tenths of a percent) to allow
before notifying an administrator.
sv?_maxauditsz maximum audit file size
sv?_srvheuristics string of flags used to control the operations of a server.
sv?_auditedevents is the audit event control mask. Setting bits in the mask
to 1 enables auditing of events according to the follow-
ing manifests:
Value Meaning
0x1 Service state change
0x6 Successful sess. logon req.
0x18 Unsuccessful sess. logon req.
0x1E All sess. logon and logoff req.
0x60 Successful network logon req.
0x180 Unsuccessful network logon req.
0x1E0 All network logon and logoff req.
0x1FE All logon and logoff requests (network
and session)
0x600 Successful share requests
0x1800 Unsuccessful share requests
0x1E00 All share requests
0x2000 Changes to the user or group account
database
0x4000 Changes to the access control list data-
base
0x8000 Resource access as defined by the per
resource auditing options specified in
the access control list
0x10000 Logon limit violations
sv?_autoprofile bit mask for automatic server configuration as follows:
Value Meaning
0x1 Autoload at server startup.
0x2 Autoload at server shutdown.
sv?_autopath where to save and load the server information for
autoload.
----------------------------------------------------------------------------
NetServerAdminCommand
─────────────────────
Executes a command on a server. The output is queued in the active REXX
Queue.
Syntax:
ret = NetServerAdminCommand( server, command, result, dummy, dummy,
dummy, dummy )
Parameter:
server see above
command contains the command to execute
result name of rexx variable containing the
result code of the command
Example:
/* REXX */
ret = NetServerAdminCommand( "\\SERVER", "DIR C:\", "RESULT", "", "", "", "" )
IF ret = 0 THEN DO
SAY "Result of DIR C:\ on Server \\SERVER: " || RESULT
DO QUEUED()
PULL line
SAY line
END
END
----------------------------------------------------------------------------
NetServerDiskEnum
─────────────────
Retrieves a list of disk drives on a server.
Syntax:
ret=NetServerDiskEnum( server, level, buffer, dummy, eread, dummy )
Parameter:
server see above
level 0
rexx-buffer name of rexx variable containing list of
found drives (buffer.0 to buffer.n-1)
eread number of entries found
Example:
ret = NetServerDiskEnum( '\\SERVER', 0, 'Buffer', '', 'eread', '' )
DO i = 0 TO eread-1
SAY 'Drive : ' Buffer.i
END
----------------------------------------------------------------------------
NetServerEnum2
──────────────
Enumerates the set of all servers visible on the network. The type of
NetServerEnum2 matches the bit mask in the field.
Syntax:
ret = NetServerEnum2( server, level, buffer, dummy, eread, dummy,
servertype, domain )
Parameter:
server where the command will be executed
level 0, 1
rexx-buffer name of REXX variable containing
server_info_? data
eread number of found servers
servertype specifies the types of servers to enu-
merate.
This parameter is tested against the
svx_type element of each entry. Entries
that match at least one of the specified
bits are included in the returned buffer.
For the defined values refer to the de-
scription of the server data structures.
domain if not '' only server in specified domain
were listed.
Example:
ret = NetServerEnum2( '', 0, 'buffer', '', 'eread', '', -1, '' )
DO i = 0 TO eread-1
SAY 'Servername : ' Buffer.sv0_name
END
----------------------------------------------------------------------------
NetServerGetInfo
────────────────
Retrieves information about a particular server.
Syntax:
ret = NetServerGetInfo( server, level, buffer, dummy, dummy )
Parameter:
server see above
level 1, 2, 3
rexx-buffer name of rexx variable containing serv-
er_info_? data
Example:
ret = NetServerGetInfo( '\\SERVER', 3, 'buffer', '','' )
SAY 'Servers software level: '|| Buffer.sv3_version_major || '.' ||
Buffer.sv3_version_minor
----------------------------------------------------------------------------
NetServerSetInfo
────────────────
Changes information about a particular server.
Syntax:
ret = NetServerSetInfo( server, level, buffer, dummy, parmnum )
Parameter:
server see above
level 1, 2, 3
rexx-buffer name of rexx variable containing serv-
er_info_? data
paramnum determines whether buffer contains a
complete server_info data or a single
data component. If parmnum is 0, buf
must contain a server_info_? data struc-
ture. Otherwise, parmnum must specify
the ordinal position value for one of the
following data structure components:
Value Component
5 svx_comment
10 svx_disc
11 svx_alerts
16 svx_hidden
17 svx_announce
18 svx_anndelta
37 svx_alertsched
38 svx_erroralert
39 svx_logonalert
40 svx_accessalert
41 svx_diskalert
42 svx_netioalert
43 svx_maxauditsz
----------------------------------------------------------------------------
SESSION SECTION
───────────────
The functions in the Session category control network sessions established
between requesters and servers.
The session info level 0, 1 and 2 are only accessable for administrators, a user
can retrieve session infos through level 10.
Data structures
───────────────
Session Information (Level 0) (session_info_0):
sesi0_cname
Session Information (Level 1) (session_info_1):
sesi1_cname
sesi1_username
sesi1_num_conns
sesi1_num_opens
sesi1_num_users
sesi1_sess_time
sesi1_idle_time
sesi1_user_flags
Session Information (Level 2) (session_info_2):
sesi2_cname sesi2_sess_time
sesi2_username sesi2_idle_time
sesi2_num_conns sesi2_user_flags
sesi2_num_opens sesi2_cltype_name
sesi2_num_users
Session Information (Level 10)(session_info_10):
sesi10_cname
sesi10_username
sesi10_sess_time
sesi10_idle_time
where:
sesi?_cname string containing the computer name of the requester
that established the session.
sesi?_username string containing the name of the user who established
the session.
sesi?_num_conns number of connections that have been made during the
session.
sesi?_num_opens number of files, devices, and pipes that have been
opened during the session.
sesi?_num_users number of sessions that are established between the
server and the requester.
sesi? _sess_time number of seconds a session has been active.
sesi?_idle_time number of seconds a session has been idle.
sesi?_user_flags manner in which the user established the session. The
bit mask for sesi?_user_flags is defined as follows:
Value Meaning
1 sesi?_username established the session
using a GUEST account.
2 sesi?_username established the session
without using password encryption.
sesi?_cltype_name type of client that established the session. The defined
types are as follows:
Type Meaning
'Down Level': Old clients; for example, LAN Server
1.0 clients
'DLR 2.0' DOS LAN Requester 2.0 clients
'OS/2 LS 1.3' OS/2 LAN Server 1.3 clients
'OS/2 LS 2.0' OS/2 LAN Server 2.0 clients
'OS/2 LS 3.0' OS/2 LAN Server 3.0 clients
----------------------------------------------------------------------------
NetSessionEnum
──────────────
Supplies information about all sessions on the server.
Syntax:
ret = NetSessionEnum( server, level, buffer, dummy, eread, dummy )
Parameter:
server see above
level 0, 1, 2, 10
rexx-buffer name of rexx variable containing ses-
sion_info_? data
eread contains number of entries found
Example:
ret = NetSessionEnum( '\\SERVER', 1, 'Buffer', '', 'eread', '' )
SAY eread ' Session found:'
SAY 'Computer User '
DO i = 0 TO eread-1
SAY BUFFER.i.SESI1_cname BUFFER.i.SESI1_username
END
----------------------------------------------------------------------------
NetSessionGetInfo
─────────────────
Retrieves information about a particular session on a server
Syntax:
ret = NetSessionGetInfo( server, client, level, buffer, dummy,
dummy )
Parameter:
server see above
client workstation name whose session is to
be monitored
level 0, 1, 2, 10
rexx-buffer name of rexx variable containing ses-
sion_info_? data
Example:
ret=NetSessionGetInfo( '\\SERVER', 'PC_JOHN', 2, 'Buffer', '', '' )
SAY 'User having a session on John's PC:' Buffer.sesi1_user_name
----------------------------------------------------------------------------
NetSessionDel
─────────────
Forces a close to a session
Syntax:
ret = NetSessionDel( server, client-name, dummy )
Parameter:
server see above
client-name name of client whose session is to be
closed
Example:
ret = NetSessionDel( '\\SERVER', 'PC_JOHN', '' )
----------------------------------------------------------------------------
SHARE SECTION
─────────────
Share is the term applied to the local device of a server (such as a disk drive,
print device, or named pipe) that other applications on the network can access.
A unique netname is assigned to each shared resource to enable remote users
and applications to refer to the share, rather than the local device name of the
share.
Data structures
───────────────
Share Information (Level 0) (share_info_0):
shi0_netname
Share Information (Level 1) (share_info_1):
shi1_netname
shi1_type
shi1_remark
Share Information (Level 2) (share_info_2):
shi2_netname
shi2_type
shi2_remark
shi2_permissions
shi2_max_uses
shi2_current_uses
shi2_path
shi2_passwd
where:
shi?_netname string containing the netname of a resource.
shi?_type is one of four values indicating the type of share, are
defined as follows:
Value Share Type
0 Disk drive
1 Spooler queue
2 Serial device
3 Interproc. communication (IPC)
The shi2_type value affects the requirements for certain
other share_info_2 components when the NetShareAdd
function is called. See NetShareAdd "Remarks" for
details.
shi?_remark string containing an optional comment about the shared
resource.
shi?_max_uses gives the maximum number of concurrent connections
that the shared resource can accommodate (unlimited if
the shi2_max_uses value is -1).
shi?_current_uses indicates the number of connections that are currently
made to the resource.
shi?_path string containing the local path name of the shared re-
source. For disks, shi?_path is the path being shared.
For spooler queues, shi?_path is the name of the spooler
queue being shared. For serial device queues, shi?_path
is a string of one or more communication device names
separated by blanks (for example, COM1 COM2
COM6).
----------------------------------------------------------------------------
NetShareAdd
───────────
Adds a shared resource on a server
Syntax:
ret = NetShareAdd( server, level, rexx-buffer, dummy )
Parameter:
server UNC servername like \\SERVER1
level must be 2
rexx-buffer name of REXX variable containing the
share_info_2 data
Example:
BUFFER.SHI2_netname = 'SRV_D'
BUFFER.SHI2_type = 0
BUFFER.SHI2_remark = 'Shared server drive D:\'
BUFFER.SHI2_permissions = 0
BUFFER.SHI2_max_uses = -1
BUFFER.SHI2_path = 'D:\'
BUFFER.SHI2_passwd = ''
ret = NetShareAdd( '\\SERVER', 2, 'buffer', '' )
----------------------------------------------------------------------------
NetShareGetInfo
───────────────
Get information about a shared resource on a server.
Syntax:
ret = NetShareGetInfo( server, netname, level, rexx-buffer, dummy,
dummy )
Parameter:
server UNC servername like \\SERVER1
netname Alias for a resource
level 0, 1, 2
rexx-buffer name of REXX variable containing the
share_info_? datas
Example:
ret = NetShareGetInfo( '\\SERVER', 'SRV_D', 2, 'buffer', '', '' )
SAY 'Max Uses for SRV_D : ' Buffer.shi2_max_uses
----------------------------------------------------------------------------
NetShareSetInfo
───────────────
Set information about a shared resource on a server
Syntax:
ret = NetShareSetInfo( server, netname, level, rexx-buffer, dummy,
parmnum )
Parameter:
server UNC servername like \\SERVER1
netname Alias for a resource
level 1, 2
rexx-buffer name of REXX variable containing the
share_info_? data
parmnum specifies whether a specific component
of the share_info or the entire data
structure is being set. If parmnum is 0,
then buffer must contain a complete
share_info data array.
Otherwise, parmnum must pass the
ordinal position value for one of the
following share_info_2 data structure
components:
Value Component
4 shi1_remark or shi2_remark
6 shi2_max_uses
Example:
/* change the max user parameter to 10 */
ret = NetShareSetInfo( '\\SERVER', 'SRV_D', 2, 10, '', 6 )
----------------------------------------------------------------------------
NetShareCheck
─────────────
Queries whether a server is sharing a device. You can only test whether the
server share one portion of a drive. A test on C: for example returns 0 if one
of its directories is shared. If no directory of a drive is shared, the API returns
a non-zero return code.
Syntax:
ret = NetAccessCheck( server, device, type )
Parameter:
server contains the name of the remote server
on which the function is to execute
device contains the name of the device to be
checked.
type indicates the type of shared device:
Value Share Type
0 Disk drive
1 Spooler queue
2 Serial device
3 Interproc. communication (IPC)
----------------------------------------------------------------------------
NetShareEnum
────────────
Lists shared resources
Syntax:
ret = NetShareEnum( server, level, buffer, dummy, eread, dummy )
Parameter:
server name of server, e.g. \\SERVER1
level 0, 1, 2
Rexx-buffer name of Rexx variable, containing the
found resources
eread Rexx variable containing the number of
resources found
Example:
ret = NetShareEnum( '\\SERVER', 1, 'buffer', '', 'eread', '' )
DO i = 0 TO eread-1
SAY Buffer.i.shi1_netname Buffer.i.shi1_remark
END
----------------------------------------------------------------------------
NetShareDel
───────────
Stops sharing a resource
Syntax:
ret = NetShareDel( server, netname, dummy )
Parameter:
server name of server (e.g. "\\SERVER1")
netname name of the shared resource
Example:
rc = NetShareDel( '\\SERVER', 'SRV_D', '' )
----------------------------------------------------------------------------
STATISTICS SECTION
──────────────────
LAN Server accumulates a set of operating statistics for requesters and servers
from the time that the requester or server service is started. To retrieve the
statistics, call the NetStatisticsGet2 function.
The NetStatisticsGet and NetStatisticsClear are replaced by NetStatisticsGet2
and are now obsolete.
Data structures
───────────────
Data Structure of Requester Statistics :
stw0_start stw0_autorec
stw0_numNCB_r stw0_bytessent_r_high
stw0_numNCB_s stw0_bytessent_r_low
stw0_numNCB_a stw0_bytesrcvd_r_high
stw0_fiNCB_r stw0_bytesrcvd_r_low
stw0_fiNCB_s stw0_bytessent_s_high
stw0_fiNCB_a stw0_bytessent_s_low
stw0_fcNCB_r stw0_bytesrcvd_s_high
stw0_fcNCB_s stw0_bytesrcvd_s_low
stw0_fcNCB_a stw0_bytessent_a_high
stw0_sesstart stw0_bytessent_a_low
stw0_sessfailcon stw0_bytesrcvd_a_high
stw0_sessbroke stw0_bytesrcvd_a_low
stw0_uses stw0_reqbufneed
stw0_usefail stw0_bigbufneed
where:
stw0_start time that statistics collection started. This field indi-
cates the date or time that the statistics were last
cleared; that means, it indicates the time period over
which the returned statistics were collected.
stw0_numNCB fields indicate the number of network control blocks
(NCBs) issued from each source and include failed
NCBs. To get the total successful NCBs issued it is
necessary to subtract the numbers of failed NCBs.
These numbers are held as follows in the fiNCB and
fcNCB fields:
- numNCB_r is the number of NCBs issued (redirector).
- numNCB_s is the number of NCBs issued (server).
- numNCB_a is the number of NCBs issued (applica-
tion).
stw0_fiNCB fields indicate the number of NCBs that failed at the
time they were issued, for whatever reason. These
NCBs are still included in the "total issued" count, as
follows:
- fiNCB_r is the number of NCBs that failed issue
(redirector).
- fiNCB_s is the number of NCBs that failed issue
(server).
- fiNCB_a is the number of NCBs that failed issue
(application).
stw0_fcNCB fields indicate the number of NCBs that failed after
issue, at or before completion. These NCBs are still
included in the "total issued" count, as follows:
- fcNCB_r is the number of NCBs that failed comple-
tion (redirector).
- fcNCB_s is the number of NCBs that failed comple-
tion (server).
- fcNCB_a is the number of NCBs that failed comple-
tion (application).
stw0_sessstart number of requester sessions started.
stw0_sessfailcon number of requester session failures to connect, except
those that failed due to "name not found."
stw0_sessbroke number of failures of requester sessions, after the
session was established.
stw0_uses number of requester uses.
stw0_usefail number of requester use failures. This is a count of
failed tree connects, when a server is found but the
resources were not found.
stw0_autorec number of requester autoconnects.
The following 12 fields form six quadwords, which contain very large
counters. The high doubleword of each is the value divided by 2^32, while
the low doubleword is the value modal 2^32. A quadword is a data area with
the size twice as large as a double word. These fields count total bytes in all
NCBs sent and received for all three categories. Server information is
included to provide an accurate total.
Note: For all the NCB-related and bytes-count counters:
- The suffix _r indicates redirector. These NCBs are issued by the redirector
as part of the normal process of maintaining remote network connections.
- Those with the suffix _s are server-related, sent by the redirector on behalf
of the server to maintain shared resource connections.
- Those with the suffix _a are application-generated NCBs, which may be
caused by applications calling NetBiosSubmit, use of second class mailslots,
server announcements (sending and receiving), and so on.
bytessent_r_high is the number of requester bytes sent to the network
(high doubleword).
bytessent_r_low is the number of requester bytes sent to the network
(low doubleword).
bytesrcvd_r_high is the number of requester bytes received from the
network (high doubleword).
bytesrcvd_r_low is the number of requester bytes received from the
network (low doubleword).
bytessent_s_high is the number of server bytes sent to the network (high
doubleword).
bytessent_s_low is the number of server bytes sent to the network (low
doubleword).
bytesrcvd_s_high is the number of requester bytes received from the
network (high doubleword).
bytesrcvd_s_low is the number of requester bytes received from the
network (low doubleword).
bytessent_a_high is the number of application bytes sent to the network
(high doubleword).
bytessent_a_low is the number of application bytes sent to the network
(low doubleword).
bytesrcvd_a_high is the number of application bytes received from the
network (high doubleword).
bytesrcvd_a_low is the number of application bytes received from the
network (low doubleword).
stw0_reqbufneed is the number of times that the requester required a
request buffer, but failed to allocate one. This indicates
that the parameters of the requester may need adjust-
ment.
stw0_bigbufneed is the number of times the requester required a big
buffer, but failed to allocate one. This indicates that the
parameters of the requester may need adjustment.
Data Structure of Server Statistics
sts0_start
sts0_fopens
sts0_devopens
sts0_jobsqueued
sts0_sopens
sts0_stimedout
sts0_serrorout
sts0_pwerrors
sts0_permerrors
sts0_syserrors
sts0_bytessent_high
sts0_bytessent_low
sts0_bytesrcvd_high
sts0_bytesrcvd_low
stw0_avresponse
stw0_reqbufneed
stw0_bigbufneed
where:
sts0_start time statistics collection started. This field indicates the
date and time that the statistics were last cleared; that
means, it indicates the time period over which the re-
turned statistics were collected.
sts0_fopens number of server file opens. This includes opens of
named pipes.
sts0_devopens number of server device opens.
sts0_jobsqueued number of server print jobs spooled.
sts0_sopens number of server session starts.
sts0_stimedout number of server session autodisconnects.
sts0_serrorout number of server sessions errored out.
sts0_pwerrors number of server password violations.
sts0_permerrors number of server access permission errors.
sts0_syserrors number of server system errors.
The following 4 fields form two quadwords that contain very large counters.
The high doubleword of each is the value divided by 2^32, while the low
doubleword is the value modal 2^32.
bytessent_high number of server bytes sent to the network (high
doubleword)
bytessent_low number of server bytes sent to the network (low
doubleword)
bytesrcvd_high number of server bytes received from the network (high
doubleword)
bytesrcvd_low number of server bytes received from the network (low
doubleword).
sts0_avresponse average server response time in milliseconds.
sts0_reqbufneed number of times the server required a request buffer,
but failed to allocate one. This indicates that the
parameters of the server may need adjustment.
sts0_bigbufneed number of times the server required a big buffer, but
failed to allocate one. This indicates that the parame-
ters of the server may need adjustment.
Note: A value of -1 or 0xFFFFFFFF for any field means that information is
not available. A value of -2 or 0xFFFFFFFE means that the field has
overflowed.
----------------------------------------------------------------------------
NetStatisticsGet2
─────────────────
Retrieves and optionally clears operating statistics for a service.
Syntax:
ret = NetStatisticsGet2( server, service, dummy, dummy, option,
buffer, dummy, dummy )
Parameter:
server see above
servicename service name for which to get the statis-
tics. Only 'SERVER' and 'REQUEST-
ER' are allowed for the servicename.
Other names will produce the ER-
ROR_NOT_SUPPORTED error code.
level must be 0
options The options parameter is bitmapped as
follows:
Mask Meaning
0x1 Clear statistics after retrieval.
1-31 Must be 0.
rexx-buffer name of rexx variable containing ser-
vice data for server or requester statis-
tics.
Example:
HighByte = 4294967296 /* = 2^32 */
ret = NetStatisticsGet2( '\\SERVER', 'SERVER', '', '', 0, 'buffer',
'', '' )
SAY 'Bytes sent : ' Buffer.sts0_bytessent_high * HighByte +
Buffer.sts_bytessent_low
SAY 'Bytes sent : ' Buffer.sts0_bytesrcvd_high * HighByte +
Buffer.sts_bytesrcvd_low
----------------------------------------------------------------------------
GROUP SECTION
─────────────
The functions in the Group category control the group entries in the user
accounts system database (UAS)
Data structures
Group Information (Level 0)(group_info_0):
grpi0_name
Group Information (Level 1)(group_info_1):
grpi1_name
grpi1_comment
Group Membership Information (Level 0)(group_users_info_0):
grui0_name
where:
grpi?_name is the name of the group.
grpi?_comment string containing the comment or remark of the group.
The string can be ''.
grui0_name is the name of the user in the group.
----------------------------------------------------------------------------
NetGroupAdd
───────────
Creates a new group account in the UAS database.
Syntax:
ret = NetGroupAdd( server, level, buffer, dummy )
Parameter:
server see above
level 0, 1
rexx-buffer name of rexx variable containing group
data
Example:
Buffer.grpi1_name = 'TRADER'
Buffer.grpi1_comment = 'Group for company's trader'
ret = NetGroupAdd( '\\SERVER', 1, buffer, '' )
----------------------------------------------------------------------------
NetGroupEnum
────────────
Retrieves all group accounts in the UAS database
Syntax:
ret = NetGroupEnum( server, level, buffer, dummy, eread, dummy )
Parameter:
server see above
level 0, 1
rexx-buffer name of rexx variable containing group
data
eread number of entries found
Example:
ret = NetGroupEnum( '\\SERVER', 1, 'Buffer', '', 'eread', '' )
DO i=0 TO eread-1
SAY Buffer.grpi1_name Buffer.grpi1_comment
END
----------------------------------------------------------------------------
NetGroupDel
───────────
Removes a group account in the UAS database.
Syntax:
ret = NetGroupDel( server, group )
Parameter:
server see above
group name of group to remove
Example:
ret = NetGroupDel( '\\SERVER', 'TRADER' )
----------------------------------------------------------------------------
NetGroupAddUser
───────────────
Adds a user-ID to a group account in the UAS database.
Syntax:
ret = NetGroupAddUser( server, group, user )
Parameter:
server see above
group name of group
user name of user to add to group
Example:
ret = NetGroupAddUser( '\\SERVER', 'TRADER', JOHN' )
----------------------------------------------------------------------------
NetGroupDelUser
───────────────
Removes a user-ID from a group account in the UAS database.
Syntax:
ret = NetGroupDelUser( server, group, user )
Parameter:
server see above
group name of group
user name of user to remove from group
Example:
ret = NetGroupDelUser( '\\SERVER', 'TRADER', 'JOHN' )
----------------------------------------------------------------------------
NetGroupGetInfo
───────────────
Queries information about a group account in the UAS database.
Syntax:
ret = NetGroupGetInfo( server, group, level, buffer, dummy, dummy )
Parameter:
server see above
group group to get information
level 1
rexx-buffer name of rexx variable containing group
data
Example:
ret = NetGroupGetInfo( '\\SERVER', 'TRADER', 1, 'Buffer', '', '' )
IF ret = 0 THEN DO
SAY 'Group exists.'
SAY Buffer.grpi1_name Buffer.grpi1_comment
END
----------------------------------------------------------------------------
NetGroupSetInfo
───────────────
Changes information about a group account in the UAS database.
Syntax:
ret = NetGroupSetInfo( server, group, level, buffer, dummy, dummy )
Parameter:
server see above
group group to set information
level 1
rexx-buffer name of rexx variable containing group
data
Example:
ret = NetGroupGetInfo( '\\SERVER', 'TRADER', 1, 'Buffer', '', '' )
IF ret = 0 THEN DO
SAY 'Enter new comment:'
PULL Buffer.grpi1_comment
ret=NetGroupSetInfo( '\\SERVER', 'TRADER', 1, 'Buffer', '', '' )
END
----------------------------------------------------------------------------
NetGroupGetUsers
────────────────
Gets a list of all users of a group
Syntax:
ret = NetGroupGetUsers( server, group, level, buffer, dummy, eread,
dummy )
Parameter:
server see above
group name of group to get user list
level 0
rexx-buffer name of rexx variable containing user
list (group_user_info_0)
eread number of entries found
Example:
ret = NetGroupGetUsers( '\\SERVER', 'TRADER', 0, 'Buffer, '', 'eread', '' )
SAY 'Found members: '
DO i=0 TO eread-1
SAY Buffer.i.grui0_name
END
----------------------------------------------------------------------------
NetGroupSetUsers
────────────────
Joins a list of users for a group
Syntax:
ret=NetGroupSetUsers( server, group, level, buffer, dummy, entries )
Parameter:
server see above
group name of group to set user list
level 0
rexx-buffer name of rexx variable containing user
list
entries number of entries to set
Example:
ret = NetGroupGetUsers( '\\SERVER', 'TRADER', 0, 'Buffer, '', 'eread', '' )
SAY 'Enter new member: '
PULL Buffer.eread.grui0_name
eread = eread+1
ret = NetGroupSetUsers( '\\SERVER', 'TRADER', 0, 'Buffer, '', 'eread' )
----------------------------------------------------------------------------
USER SECTION
────────────
The functions in the User category control a user's account in the user
accounts subsystem (UAS) database.
The NetUserDCDBInit, NetUserGetAppSel, NetUserGetLogonAsn, NetUser-
SetAppSel, and NetUserSetLogonAsn functions are only available if you use
RXLAN30.DLL.
Data structures
───────────────
User Account Information (Level 0) (user_info_0):
usri0_name
User Account Information (Level 1) (user_info_1):
usri1_name
usri1_password
usri1_password_age
usri1_priv
usri1_home_dir
usri1_comment
usri1_flags
usri1_script_path
User Account Information (Level 2) (user_info_2):
usri2_name usri2_workstations
usri2_password usri2_last_logon
usri2_password_age usri2_last_logoff
usri2_priv usri2_acct_expires
usri2_home_dir usri2_max_storage
usri2_comment usri2_units_per_week
usri2_flags usri2_logon_hours
usri2_script_path usri2_bad_pw_count
usri2_auth_flags usri2_num_logons
usri2_full_name usri2_logon_server
usri2_usr_comment usri2_country_code
usri2_parms usri2_code_page
User Account Information (Level 10) (usr_info_10):
usri10_name
usri10_comment
usri10_usr_comment
usri10_full_name
User Account Information (Level 11) (user_info_11):
usri11_name usri11_bad_pw_count
usri11_comment usri11_num_logons
usri11_usr_comment usri11_logon_server
usri11_full_name usri11_country_code
usri11_priv usri11_workstations
usri11_auth_flags usri11_max_storage
usri11_password_age usri11_units_per_week
usri11_home_dir usri11_logon_hours
usri11_parms usri11_code_page
usri11_last_logon
usri11_last_logoff
where:
usri?_name name of the user.
usri?_password is the password of a usri1_name. The NetUserEnum and
NetUserGetInfo functions return a string of blanks to
maintain password security. The string can be ''.
usri?_password_age number of seconds that have passed since
usri1_password last changed.
usri?_priv one of three values indicating the level of privilege as-
signed usri1_name.
Value Privilege
0 Guest
1 User
2 Administrator
usri?_home_dir path to the user's home directory. This string can take
one of two forms. The first form defines the drive of
the user that will be assigned to the home directory. It
can have as many as PATHLEN bytes.
x:\machineID\Y$\pathname
Where x is the drive letter to be assigned, machineID is
the name of the server that holds the home directory,
y is the drive letter on the server where the home
directory exists, and pathname is the remaining path to
the directory.
The second form defines a first-available drive specifi-
cation for the home directory:
\\machineID\Y$\pathname
Where machineID, y, and pathname are defined as in
the preceding example.
To define a home directory at the root of a server's
drive, omit \pathname from either of the previous
forms.
usri?_comment optional comment or remark about the user.
usri?_flags is one of the following values that determine whether a
logon script is to be executed and whether the user's
account is enabled.
Bit Mask Meaning
0x1 Must be 1. Logon script enabled.
0x2 If 1, user's account disabled.
0x8 If 1, home directory required.
0x20 If 1, password not required.
0x40 If 1, user cannot change password.
usri?_script_path path name of the user's logon script (.CMD, .EXE,
.BAT, or .PRO file). It can have no extension at all.
If the file has no extension, it is assumed to be a .CMD
or .BAT file.
usri?_auth_flags grants operator privilege (accounts, print, comm, and
server) to users.
Bits Meaning
0 If 1, print operator privilege is enabled.
1 If 1, comm operator privilege is en-
abled.
2 If 1, server operator privilege is en-
abled.
3 If 1, accounts operator privilege is
enabled.
usri?_full_name full name of the user.
usri?_usr_comment string which is a user settable field.
usri?_parms string that is set aside for use by applications.
usri?_workstations list of requesters from which a user is permitted to log
on. A null string means all requesters are allowed. Up
to eight requesters may be specified.
usri?_last_logon time and date (seconds since 1 January 1970) when the
last logon occurred. A value of 0 means unknown.
This field can only be set by the system.
usri?_last_logoff time and date (seconds since 1 January 1970) when the
last logoff occurred. A value of 0 means unknown.
This field can only be set by the system.
usri?_acct_expires time and date (seconds since 1 January 1970) when the
account will expire. An expired account is the equiva-
lent of a disabled account. An entry of 0xFFFFFFFF or
(-1) means that there is no limit.
usri?_max_storage maximum storage allowed for the home directory.
Units are kilobytes (KB). An entry of 0xFFFFFFFF
(-1) means unlimited storage.
usri?_bad_pw_count number of attempts to validate a bad password. A
value of -1 means unknown. This element is ignored in
NetUserAdd and NetUserSetInfo calls.
usri?_num_logons number of instances of logons to the account. A value
of -1 means unknown. This field can only be set by the
system and is ignored by NetUserAdd and
NetUserSetInfo.
usri?_logon_server string containing the name of the perferred server,
which validates user logon requests for this user. A
null string indicates that the domain controller is the
preferred logon server.
usri?_country_code OS/2 country code for the user's language choice. This
is used by the LAN Server software to generate mes-
sages in the appropriate language whenever possible.
usri?_code_page OS/2 code page for the language choice of the user.
User Modals Information (Level 0)(user_modals_info_0):
usrmod0_min_passwd_len
usrmod0_max_passwd_age
usrmod0_min_passwd_age
usrmod0_force_logoff
usrmod0_password_hist_len
where:
usrmod0_min_passwd_len minimum password length.
usrmod0_max_passwd_age maximum time (in seconds) since the
password was last changed, and for
which the current password is valid. A
value of 0xFFFFFFFF allows the pass-
word to be valid forever. The mini-
mum value is 1 day.
usrmod0_min_passwd_age minimum time (in seconds) since the
password was last changed, and before
which the current password is allowed
to be changed. A value of 0 means
there is no delay required between
password updates.
usrmod0_force_logoff length of time (in seconds) after the
valid logon hours that the user should
be forced off the network. The user is
never forced off if the value is
TIMEQ_FOREVER (-1), or is forced
off immediately if the value is 0. Any
value between these can also be used.
usrmod0_password_hist_len length of the password history, that is,
the number of passwords in the history
buffer that are scanned versus the new
password in a NetUserPasswordSet
attempt. The new password may not
match any of the entries scanned.
User Modals Information (Level 1)(user_modals_info_1):
usrmod1_role
usrmod1_primary
where:
usrmod1_role role of this server under a single system image (SSI).
It can be one of the following:
Value Meaning
0 Standalone server.
1 Member server in the domain.
2 Backup server in the domain.
3 Primary server in the domain.
usrmod1_primary name of the primary domain to which this server
belongs. It should match the primary domain name of
the requester software on the local machine.
User Validation Information (Requester) (user_logon_req_1):
usrreq1_name
usrreq1_password
usrreq1_workstation
where:
usrreq1_name account name to which the user is attempting to log on.
usrreq1_password is the plain text password.
usrreq1_workstation string representing the requester from which the user is
logging on. Can be '' for local.
User Validation Information (Level 0) (user_logon_info_0):
usrlog0_code
usrlog0_eff_name
User Validation Information (Level 1) (user_logon_info_1):
usrlog1_code usrlog1_logoff_time
usrlog1_eff_name usrlog1_kickoff_time
usrlog1_priv usrlog1_password_age
usrlog1_auth_flags usrlog1_pw_can_change
usrlog1_num_logons usrlog1_pw_must_change
usrlog1_bad_pw_count usrlog1_computer
usrlog1_last_logon usrlog1_domain
usrlog1_last_logoff usrlog1_script_path
User Validation Information (Level 2) (user_logon_info_2):
usrlog2_eff_name
usrlog2_computer
usrlog2_fullname
usrlog2_usrcomment
usrlog2_logon_time
where:
usrlog?_code code explaining an action taken. The following are
possible values:
0: No problems were encountered.
5: Some condition of logon has not been
met.
2212: An error occurred processing logon
script.
2214: No domain controller could be found to
validate the user. Script processing was
not performed.
2217: The logon request was serviced by a
1X logon server. Logon script process-
ing was performed.
2240: The user was attempting to log on from
a requester that is not valid.
2241: The user was attempting to log on at a
time that is not valid.
2242: The user has an account, but the user's
password has expired. No other condi-
tions of logon have been checked.
usrlog?_eff_name is the name of the account to which the user was
logged on.
usrlog?_priv is the user's privilege level. It can be one of the
following:
Value Privilege
0 Guest
1 User
2 Administrator
usrlog?_auth_flags grants operator rights (accounts, print, comm, and
server) to users both locally and remotely.
usrlog?_num_logons is the number of instances of logons to the account. A
value of -1 means unknown.
usrlog?_bad_pw_count is the number of attempts to validate a bad password.
usrlog?_last_logon is the time and date (seconds since 1 January 1970)
when the last logon occurred.
usrlog?_last_logoff is the time and date (seconds since 1 January 1970)
when the last logoff occurred.
usrlog?_logoff_time is the time (in seconds) and date (since 1 January 1970)
when the user should log off.
usrlog_kickoff_time is the time (in seconds) when the user will be logged
off.
usrlog?_password_age is the time since the password was last changed.
usrlog?_pw_can_change time and date (since 1 January 1970) when the user
can change his password.
usrlog?_pw_must_change is the time (in seconds) and the date (since 1
January 1970) when the password must be changed.
usrlog?_computer is the server that validated the user's logon.
usrlog?_domain is the domain currently logged on to.
usrlog?_script_path is the relative path to the logon script of an account.
usrlog?_fullname is the full name of the user.
usrlog?_usrcomment string, which is a user-settable field for user comments.
The string can be ''.
usrlog?_logon_time is the time and date (seconds since 1 January 1970)
when the user logged on. It can be '' for local.
User Validation Information (Logoff)(user_logoff_info_1):
usrlog1_code
usrlogf1_duration
usrlogf1_num_logons
where:
usrlogf1_code is dependent on the calling API. It is specified sepa-
rately for each API.
usrlogf1_duration is the duration of a logon. It can be 0 for unknown.
usrlogf1_num_logons is the number of logons by a user name.
Application Selector Information (Level 1)(app_sel_info_1):
asi1_count
asi1_count is an unsigned short integer that indicates the number of
app_sel_list structures that immediately follow the
app_sel_info_1 structure.
Application Selector List (Level 1)(app_sel_list_1):
asl_appname
asl_apptype
where:
asl_appname is the name of an application that exists in the domain
control database.
as1_apptype is one of the three values, defined as follows:
Value Meaning
0x1 Public DOS applications.
0x2 Public OS/2 applications.
0x4 Private OS/2 applications.
Logon Assignment Information (Level 1)(logon_asn_info_1):
lai1_count;
where:
lai1_count is an unsigned short integer that indicates the number of
logon_asn_list structures that immediately follow the
logon_asn_info_1 structure.
Logon Assignment List (logon_asn_list):
lal_alias
lal_type
lal_device
where:
lal_alias specifies an existing alias for the resource that is to be
automatically assigned to the user at logon time.
lal_type is one of three values indicating the alias type.
Value Meaning
0x0001 Files alias
0x0002 Printer alias
0x0004 Serial device alias
lal_device indicates the device that will be assigned to the resource
specified by lal_alias when the user logs on. If the
device field is left blank, the connection is to be
deviceless.
----------------------------------------------------------------------------
NetUserAdd
──────────
Creates a new user account in the UAS database.
Syntax:
ret = NetUserAdd( server, level, buffer, dummy )
Parameter:
server see above
level 1,2
rexx-buffer name of rexx variable containing us-
er_info_? data
Example:
BUFFER.USRI1_name = 'JOHN'
BUFFER.USRI1_password = 'SECRET'
BUFFER.USRI1_priv = 1 /* he is user */
BUFFER.USRI1_home_dir = 'Y:\SERVER\D$\HOMEDIR\JOHN'
BUFFER.USRI1_comment = 'John Smith, Trader, Tel-111'
BUFFER.USRI1_flags = 1 + 8 /* script path enabled, homedir req.*/
BUFFER.USRI1_script_path = ''
ret = NetUserAdd( '\\SERVER', 1, 'Buffer', '' )
----------------------------------------------------------------------------
NetUserEnum
───────────
Retrieves all user accounts in the UAS database
Syntax:
ret = NetUserEnum( server, level, buffer, dummy, eread, dummy )
Parameter:
server see above
level 0, 1, 2, 10
rexx-buffer name of rexx variable containing us-
er_info_? data
eread number of entries found
Example:
ret = NetUserEnum('\\SERVER', 10,'Buffer', '', 'eread', '' )
SAY eread 'user found.'
DO i=0 TO eread-1
SAY BUFFER.i.USRI10_name BUFFER.i.USRI10_full_name
END
----------------------------------------------------------------------------
NetUserDel
──────────
Removes a user account in the UAS database.
Syntax:
ret = NetUserDel( server, user )
Parameter:
server see above
user name of user to remove
Example:
ret = NetUserDel( '\\SERVER', 'JOHN' )
----------------------------------------------------------------------------
NetUserGetInfo
──────────────
Queries information about a user account in the UAS database.
Syntax:
ret = NetUserGetInfo( server, user, level, buffer, dummy, dummy )
Parameter:
server see above
user user to get information
level 0, 1, 2, 10, 11
rexx-buffer name of REXX variable containing us-
er_info_? data
Example:
ret = NetUserGetInfo( '\\SERVER', 'JOHN', 1, 'Buffer', '', '')
SAY BUFFER.USRI1_name BUFFER.USRI1_comment
IF Buffer.usri1_priv = 0 THEN SAY 'He is guest.'
IF Buffer.usri1_priv = 1 THEN SAY 'He is user.'
IF Buffer.usri1_priv = 2 THEN SAY 'He is administrator.'
----------------------------------------------------------------------------
NetUserSetInfo
──────────────
Changes information about a user account in the UAS database.
Syntax:
ret = NetUserSetInfo( server, user, level, buffer, dummy, parmnum )
Parameter:
server see above
group user to get information
level 1, 2
parmnum determines whether buf contains a com-
plete user_info data structure or a single
component. Parmnum must specify the
ordinal position value:
Value Component
0 user_info_x
1 usrix_name
3 usrix_password
4 usrix_password_age
5 usrix_priv
6 usrix_home_dir
7 usrix_comment
8 usrix_flags
9 usrix_script_path
10 usri2_auth_flags
11 usri2_full_name
12 usri2_usr_comment
13 usri2_parms
14 usri2_workstations
15 usri2_last_logon
16 usri2_last_logoff
17 usri2_acct_expires
18 usri2_max_storage
19 usri2_units_per_week
20 usri2_logon_hours
21 usri2_bad_pw_count
22 usri2_num_logons
23 usri2_logon_server
24 usri2_country_code
25 usri2_code_page
100 password expired (only LS 3.0)
rexx-buffer name of rexx variable containing user
data
Example:
/* set John's password to expired */
ret = NetUserSetInfo( '\\SERVER', 'JOHN', 1, 0, '', 100 )
----------------------------------------------------------------------------
NetUserGetGroups
────────────────
Gets a list of groups a user belongs to.
Syntax:
ret = NetUserGetGroups( server, user, level, buffer, dummy, eread,
dummy )
Parameter:
server see above
user name of user to get group list
level 0
rexx-buffer name of rexx variable containing
group_info_0 list
eread number of entries found
Example:
ret = NetUserGetGroups( '\\SERVER', 'JOHN', 0, 'Buffer', '', 'eread-
', '' )
SAY 'JOHN belongs to the groups : '
DO i=0 TO eread-1
SAY BUFFER.i.grpi0_name
END
----------------------------------------------------------------------------
NetUserSetGroups
────────────────
User joins the groups in the list specified
Syntax:
ret= NetUserSetGroups( server, user, level, buffer, dummy, entries )
Parameter:
server see above
user name of user to set group list
level 0
rexx-buffer name of rexx variable containing
group_info_0 list
entries number of entries to set
Note:
NetUserGetGroups return one of the reserved groups GUESTS, USERS,
ADMINS (depending on the value of usri_priv). These groups were rejected
when passing them to NetUserSetGroups. Before passing the list of groups to
NetUserSetGroups, you have to remove them manually.
Example:
/* Add JOHN to group TRADER */
ret = NetUserGetGroups( '\\SERVER', 'JOHN', 0, 'Buffer', '', 'eread-
', '' )
DO i=0 TO eread-1
IF BUFFER.i.grpi0_name ='ADMINS' | BUFFER.i.grpi0_name ='USERS'
| BUFFER.i.grpi0_name = GUESTS' THEN
BUFFER.i.grpi0_name = 'TRADER'
END
----------------------------------------------------------------------------
NetUserPasswordSet
──────────────────
Sets a new password for a user. This API is intended for having a user change
his password. The user needs to enter his old password before changing the
password. An administrator can use the NetUserSetInfo to change the users
password.
Syntax:
ret = NetUserPasswordSet( server, user, old, new )
Parameter:
server see above
user user-ID whose password to change
old the currently used password
new the new password to set
Note:
The Password API is CASE SENSITIVE ! It is strongly recommended, to use
only upper case character and only standard ASCII character, because the
LAN servers and user profile interface only accept these characters.
----------------------------------------------------------------------------
NetUserModalsGet
────────────────
Gets global modals related information for all users and groups in the user
accounts subsystem (UAS) database.
Syntax:
ret = NetUserModalsGet( server, level, buffer, dummy, dummy )
Parameter:
server see above
level 0, 1
rexx-buffer name of rexx variable containing us-
er_modals_info_? data
Example:
ret = NetUserModalsGet( '\\SERVER', 0, 'Buffer', '', '' )
SAY 'Minimal pwd length: 'BUFFER.USRMOD0_min_passwd_len
SAY 'Maximum pwd. age: ' BUFFER.USRMOD0_max_passwd_age
----------------------------------------------------------------------------
NetUserModalsSet
────────────────
Sets global modals related information for all users and groups in the user
accounts subsystem (UAS) database. The parmnum field is not supported.
Syntax:
ret = NetUserModalsGet( server, level, buffer, dummy, dummy )
Parameter:
server see above
level 0, 1
rexx-buffer name of rexx variable containing us-
er_modals_info data
Example:
/* change maximum password age */
ret = NetUserModalsGet( '\\SERVER', 0, 'Buffer', '', '' )
BUFFER.USRMOD0_max_passwd_age = 60
ret = NetUserModalsSet( '\\SERVER', 0, 'Buffer', '', '' )
----------------------------------------------------------------------------
NetUserValidate2
────────────────
Validates a user with its password. It checks if the user can log on based on
logon restrictions defined for the account.
Syntax:
ret = NetUserValidate2( dummy, level, buffer, dummy, dummy, dummy )
Parameter:
level specifies the level of detail (1) supplied
to the user_logon data structure.
rexx-buffer At logon the rexx-buffer contains the
name of the variable, containing a us-
er_logon_req_1 array. The API creates
variables supplying a user_logon_info_1
array.
Example:
BUFFER.USRreq1_name = 'JOHN'
BUFFER.USRreq1_password = 'SECRET'
BUFFER.USRreq1_workstation = 'JOHNSPC'
ret = NetUserValidate2( '', 1, 'buffer', '', '', '' )
IF ret = 0 THEN DO
Msg = NetRexxGetMessage( BUFFER.USRlog1_code )
SAY Msg
SAY 'Users priv: ' BUFFER.USRlog1_priv
SAY 'Bad pwds: ' BUFFER.USRlog1_bad_pw_count
SAY 'Workstation: ' BUFFER.USRlog1_computer
SAY 'Logon Domain: ' BUFFER.USRlog1_domain
END
----------------------------------------------------------------------------
NetUserDCDBInit
───────────────
Initializes the domain control database for the specified user. This API is only
available with RXLAN30 and LAN Server 3.0.
Syntax:
ret = NetUserDCDBInit( server, user, dummy )
Parameter:
server see above
user specifies the user ID of a user that is
defined on the domain.
Example:
ret = NetUserDCDBInit( '\\SERVER', 'JOHN' )
----------------------------------------------------------------------------
NetUserGetAppSel
────────────────
Retrieves information about all specified types of applications contained in the
user's desktop application folders. This API is only available with RXLAN30
and LAN Server 3.0.
Syntax:
ret = NetUserGetAppSel( server, user, level, type, buffer, dummy,
dummy )
Parameter:
server see above
user specifies the user ID of a user that is
defined on the domain.
level specifies the level of information re-
quested. Currently, only level 1 is
supported.
type indicates the types of application to
retrieve:
Value Meaning
0x1 Public DOS applications
0x2 Public OS/2 applications
0x4 Private OS/2 applications
0x7 All applications
rexx-buffer name of rexx variable containing appli-
cation data (user_app_info_1) followed
by application lists (user_app_list).
Example:
ret = NetUserGetAppSel( '\\SERVER', 'JOHN', 1, 2, 'buffer', '', '')
DO i=0 TO BUFFER.asi1_count
BUFFER.i.asl_appname
END
----------------------------------------------------------------------------
NetUserSetAppSel
────────────────
Changes information about all specified types of applications contained in the
user's desktop application folders.This API is only available with RXLAN30
and LAN Server 3.0.
Syntax:
ret = NetUserSetAppSel( server, user, level, buffer, dummy )
Parameter:
server see above
user specifies the user ID of a user that is
defined on the domain.
level specifies the level of information re-
quested. Currently, only level 1 is
supported.
rexx-buffer name of rexx variable containing appli-
cation data
Example:
ret = NetUserGetAppSel( '\\SERVER', 'JOHN', 1, 2, 'buffer', '', '')
new = Buffer.asi1_count
BUFFER.new.asl_appname = 'WORDPRO'
Buffer.new.asl_app_type = 2
BUFFER.asi1_count = BUFFER.asi1_count +1
ret = NetUserSetAppSel( '\\SERVER', JOHN', 1, 'Buffer', '' )
----------------------------------------------------------------------------
NetUserGetLogonAsn
──────────────────
Retrieves information about logon assignments for a user. This API is only
available with RXLAN30 and LAN Server 3.0.
Syntax:
ret = NetUserGetLogonAsn( server, user, level, type, buffer, dummy,
dummy )
Parameter:
server see above
user name of user to get logon assignments
level 1
type indicates the types of logon assign-
ments:
Bit Meaning
0x01 Network nickname used for a file.
0x02 Network nickname used for a printer.
0x04 Network nickname used for a serial device.
rexx-buffer name of rexx variable containing as-
signment data (logon_asn_info_1) fol-
lowed by assignment list (logon_asn_li-
st)
Example:
ret = NetUserGetLogonAsn('\\SERVER', 'JOHN', 1, 'Buffer', '' )
DO i=0 TO BUFFER.lai1_count-1
SAY BUFFER.i.lal_alias BUFFER.i.lal_device
END
----------------------------------------------------------------------------
NetUserSetLogonAsn
──────────────────
Sets information about logon assignments for a user.This API is only available
with RXLAN30 and LAN Server 3.0.
Syntax:
ret = NetUserSetLogonAsn( server, user, level, buffer, dummy )
Parameter:
server see above
user name of user to modify logon assign-
ments
level 1
rexx-buffer name of rexx variable containing as-
signment data (logon_asn_info_1 follo-
wed by logon_asn_list).
Note:
THE IBM LAN APPLICATION PROGRAMMERS REFERENCE DOES
NOT DESCRIBE THE API CORRECTLY.
Example:
ret = NetUserGetLogonAsn('\\SERVER', 'JOHN', 1, 'Buffer', '' )
New = BUFFER.lai1_count
Buffer.new.lal_alias = 'SRV_D'
Buffer.new.lal_type = 1
Buffer.new.lal_device = 'F:'
BUFFER.lai1_count = BUFFER.lai1_count +1
ret = NetUserSetLogonAsn('\\SERVER', 'JOHN', 1, 'Buffer', '' )
----------------------------------------------------------------------------
ALIAS SECTION
─────────────
The API in this section examine or modify aliases defined in a domain.
Data structures
Alias Information (Level 0)(alias_info_0):
ai0_alias
Alias Information (Level 1)(alias_info_1):
ai1_alias
ai1_remark
ai1_type
Alias Information (Level 2)(alias_info_2):
ai2_alias
ai2_remark
ai2_type
ai2_location
ai2_server
ai2_mode
ai2_maxuses
ai2_netname
ai2_queue
ai2_path
ai2_priority
ai2_device_pool
where:
ai?_alias is the name by which a resource will be known in the
domain.
ai?_remark string containing an optional comment about the alias.
The string must be no longer than 40 bytes.
ai?_type is one of three values indicating the alias type.
Value Meaning
0x0001 Files alias
0x0002 Printer alias
0x0004 Serial device alias
ai?_location is one of four values defined as follows:
Value Meaning
0x0000 The alias describes a resource on a
server within the current domain.
0x0001 The alias describes a resource on a
server outside the current domain. The
alias will be accessed by DOS worksta-
tions only.
0x0002 The alias describes a resource on a
server outside the current domain. The
alias will be accessed by OS/2 worksta-
tions only.
0x0003 The alias describes a resource on a
server outside the current domain. The
alias will be accessed by both DOS and
OS/2 workstations.
ai?_server is the name of the server where the resource described
by this alias resides.
ai?_mode is one of three values that indicates when the alias is
shared.
Value Meaning
0x0000 The resource is shared when the server
is started.
0x0001 The resource must be explicitly shared
by the administrator.
0x0002 The resource is shared when a request
to assign it is made.
ai?_maxuses indicates the maximum number of users who can have
redirection to the resource identified by this alias.
Values from 0 through 65535 are valid.
ai?_netname is the alias name for files aliases, and the queue name
for printer and serial device aliases. For NetAliasAdd
and NetAliasSetInfo operations, any data in this field
will be ignored.
ai?_queue applies to printer and serial device aliases only. For
serial devices, the queue is identical to the alias. For
printers, the queue is the print destination.
ai?_path applies to files aliases only. It's a string indicating a
path that is relative to the server that the alias will be
shared on. The path must begin with a drive letter,
followed by a colon and a backslash (for example C:\).
The maximum length of the string is 128 bytes.
ai?_priority applies to serial device aliases only. The priority can
have a value between 1 and 9 (inclusive), with 1 being
the highest priority.
ai?_device_pool applies to serial device aliases only and must not be ''.
It's a list of serial devices separated by blanks. Valid
serial devices are LPT1 through LPT9 and COM1
through COM9.
----------------------------------------------------------------------------
NetAliasAdd
───────────
Creates an alias definition. This API is only available with RXLAN30 and
LAN Server 3.0.
Syntax:
ret = NetAliasAdd( server, level, buffer, dummy )
Parameter:
server see above
level 2
rexx-buffer name of rexx variable containing alias
data (alias_info_2).
Example:
/* Add drive D: as alias */
BUFFER.AI2_alias = 'SRV_D'
BUFFER.AI2_remark = 'Path D:\ of server'
BUFFER.AI2_type = 1
BUFFER.AI2_location = 0
BUFFER.AI2_server = '\\SERVER'
BUFFER.AI2_mode = 0
BUFFER.AI2_maxuses = -1
BUFFER.AI2_path = 'D:\'
ret = NetAliasAdd( '\\SERVER', 2, 'Buffer', '' )
----------------------------------------------------------------------------
NetAliasDel
───────────
Deletes an alias definition. This API is only available with RXLAN30 and
LAN Server 3.0.
Syntax:
ret = NetAliasDel( server, alias, dummy )
Parameter:
server see above
alias name of alias to delete
Example:
ret = NetAliasDel( '\\SERVER', 'SRV_D', '' )
----------------------------------------------------------------------------
NetAliasEnum
────────────
Returns a list of all aliases of a given type. This API is only available with
RXLAN30 and LAN Server 3.0.
Syntax:
ret=NetAliasEnum( server, level, type, buffer, dummy, eread, dummy )
Parameter:
server see above
level 0, 1, 2
type indicates the kind of alias to be enu-
merated:
Bit Meaning
0x01 Files alias
0x02 Printer alias
0x04 Serial device alias
rexx-buffer name of rexx variable containing alias
data
eread number of entries found
Example:
ret = NetAliasEnum( '\\SERVER', 0, 7, 'Buffer', '', 'eread', '' )
DO i=0 TO eread-1
SAY Buffer.i.ai0_alias
END
----------------------------------------------------------------------------
NetAliasGetInfo
───────────────
Returns information about a given alias. This API is only available with
RXLAN30 and LAN Server 3.0.
Syntax:
ret = NetAliasGetInfo( server, alias, level, buffer, dummy, dummy )
Parameter:
server see above
alias name of alias to get information
level 0, 1, 2
rexx-buffer name of rexx variable containing alias
data
Example:
ret = NetAliasGetInfo( '\\SERVER', 'SRV_D', 2, 'Buffer', '', '' )
SAY 'Alias : 'BUFFER.AI2_alias
SAY 'Remark: 'BUFFER.AI2_remark
SAY 'Server: 'BUFFER.AI2_server
SAY 'Path: 'BUFFER.AI2_path
----------------------------------------------------------------------------
NetAliasSetInfo
───────────────
Set information about a given alias. This API is only available with
RXLAN30 and LAN Server 3.0.
Syntax:
ret= NetAliasSetInfo( server, alias, level, buffer, dummy, parmnum )
Parameter:
server see above
alias name of alias to get information
level 0, 1, 2
rexx-buffer name of rexx variable containing alias
data
parmnum determines whether rexx-buffer contains
a complete alias_info data structure or
a single component.
Value Component Comment
3 aix_remark
7 aix_mode
8 aix_maxuses
13 aix_path Valid for files aliases
only
14 aix_priority Valid for serial de-
vice aliases only
15 aix_device_pool Valid for serial
device aliases only
Example:
ret= NetAliasSetInfo( '\\SERVER', 'SRV_D', 0, 'New comment', '', 3 )
----------------------------------------------------------------------------
APPLICATION SECTION
───────────────────
The functions in this section manage informations about the network
applications.
Data structures
Application Information (Level 0)(app_info_0):
app0_name
Application Information (Level 1)(app_info_1):
app1_name
app1_remark
Application Information (Level 2)(app_info_2):
app2_name app2_wrkdir_alias_or_drv
app2_remark app2_wrkdir_drive
app2_command app2_wrkdir_path_to_dir
app2_command_parms app2_prompt
app2_app_alias_or_drv app2_interface
app2_app_drive app2_apptype
app2_app_path_to_dir
Application Information (Level 3)(app_info_3):
app3_name app3_wrkdir_alias_or_drv
app3_remark app3_wrkdir_drive
app3_command app3_wrkdir_path_to_dir
app3_command_parms app3_prompt
app3_app_alias_or_drv app3_interface
app3_app_drive app3_apptype
app3_app_path_to_dir app3_res_count
where:
app?_name specifies an identifying name for an application.
app?_remark provides a description of the application. '' is not
allowed; a remark is required.
app?_command indicates the command that starts the application. A
null string is not allowed; a command is required.
app?_command_parms string that indicates any fixed parameters needed for
this application.
app?_app_alias_or_drv alias or drive where the application resides.
app?_app_drive applies to DOS public applications only. It is used to
specify the drive that is current when the application
runs.
app?_app_path_to_dir string indicating the remaining path to the application,
relative to the information in app2_app_alias_or_drv.
The string must begin with a \.
app?_wrkdir_alias_or_drv directory that is made current when the application
runs. If the working directory is on the local machine,
this field specifies the drive letter, followed by a :
where the directory is located. If the working directory
is remote, this field specifies an existing alias where the
directory is located.
app?_wrkdir_drive drive that the working directory is to be assigned to
when the application is started.
app?_wrkdir_path_to_dir string that specifies the remaining path to the
working directory, relative to the information in appx_-
wrkdir_alias_or_drv. The string must begin with a \.
If app2_wrkdir_alias_or_drv is NULL, this field must
be set to zero.
app?_prompt indicates whether the user is to be prompted for param-
eters when the application starts. A value of 1 indicates
that the user is to be prompted for parameters; a value
of zero indicates that the user is not to be prompted.
app?_interface is one of three values:
Value Meaning
0x1 The application is a windowed program
running the PM interface.
0x2 The application is a protected mode
program that is not windowed.
0x4 The application is a windowed program
that is not PM and that uses OS/2 video
I/O functions.
app?_apptype is one of three values:
Value Meaning
0x1 Public DOS applications
0x2 Public OS/2 applications
0x4 Private OS/2 applications
app?_res_count is the number of app_res_list structures that immediate-
ly follow the app_info_3 structure.
Application Resource Lists (app_res_list):
arl_alias
arl_device
where:
arl_alias specifies the alias for the resource required by the
application. The alias must exist.
arl_device indicates the device assigned to the resource specified
by arl_alias when the application starts.
----------------------------------------------------------------------------
NetAppAdd
─────────
Adds an application definition. This API is only available with RXLAN30 and
LAN Server 3.0.
Syntax:
ret = NetAppAdd( server, user, level, buffer, dummy )
Parameter:
server see above
user indicates the application type. If userid
is '', the application is considered to be
a public application. Otherwise, userid
contains the user ID of a user defined
on the domain. A userid that is not ""
indicates that the application to be
added is private.
level 3
rexx-buffer name of rexx variable containing app
data (app_info_3)
Example:
BUFFER.APP3_name = 'WORDPRO'
BUFFER.APP3_remark = 'Word Processor'
BUFFER.APP3_command = 'WORD.EXE'
BUFFER.APP3_command_parms =''
BUFFER.APP3_app_alias_or_drv = 'SRV_D'
BUFFER.APP3_app_path_to_dir = '\WORDPRO'
BUFFER.APP3_prompt = 0
BUFFER.APP3_interface = 1
BUFFER.APP3_apptype = 2
BUFFER.APP3_res_count = 0
ret = NetAppAdd( '\\SERVER', '', 3, 'Buffer', '' )
----------------------------------------------------------------------------
NetAppDel
─────────
Deletes an application definition. This API is only available with RXLAN30
and LAN Server 3.0.
Syntax:
ret = NetAppDel( server, user, appname, dummy )
Parameter:
server see above
user indicates the application type. If userid
is '', the application is considered to be
a public application.
appname name of application to delete
Example:
ret = NetAppDel( '\\SERVER', '', 'WORDPRO', '' )
----------------------------------------------------------------------------
NetAppEnum
──────────
Enumerates all applications of a given type. This API is only available with
RXLAN30 and LAN Server 3.0.
Syntax:
ret = NetAppEnum( server, userid, level, type, buffer, dummy, eread,
dummy )
Parameter:
server see above
user indicates the application type. If userid
is '', the applications are considered to
be public applications.
level 0, 1, 2, 3
type indicates the kind of application to be
enumerated:
Bit Meaning
0x1 Public DOS applications
0x2 Public OS/2 applications
0x4 Private OS/2 applications
0x7 All applications
rexx-buffer name of rexx variable containing app
data
eread number of entries found
Example:
ret = NetAppEnum( '\\SERVER', 'JOHN', 0, 7, 'Buffer', '', 'eread',
'' )
DO i=0 TO eread-1
BUFFER.i.APP0_name
END
----------------------------------------------------------------------------
NetAppGetInfo
─────────────
Returns information about a given application. This API is only available with
RXLAN30 and LAN Server 3.0.
Syntax:
ret = NetAppGetInfo( server, user, appname, level, buffer, dummy,
dummy )
Parameter:
server see above
user see above
appname name of application to get information
level 0, 1, 2, 3
rexx-buffer name of rexx variable containing app
data
Example:
ret = NetAppGetInfo( '\\SERVER', '', 'WORDPRO', 2, 'Buffer', '' )
SAY 'Name : ' BUFFER.APP2_name
SAY 'Remark: 'BUFFER.APP2_remark
SAY 'Command: 'BUFFER.APP2_command
----------------------------------------------------------------------------
NetAppSetInfo
─────────────
Returns information about a given application. This API is only available with
RXLAN30 and LAN Server 3.0.
Syntax:
ret = NetAppSetInfo( server, user, appname, level, buffer, dummy,
parmnum )
Parameter:
server see above
user see above
appname name of application to get information
level 0, 1, 2, 3
rexx-buffer name of rexx variable containing app
data
parmnum determines whether rexx-buffer contains
a complete app_info data structure or a
single component. If parmnum is 0,
level can be 1, 2, or 3, and rexx-buffer
must contain a complete alias_info data
structure. Otherwise, parmnum
mustspecify the ordinal position value
for one of the data structure compo-
nents:
Value Component
3 appx_remark
4 appx_command
5 appx_command_parms
Example:
ret = NetAppSetInfo( '\\SERVER', '', 'WORDPRO', 0, 'New remark', '',
3 )
----------------------------------------------------------------------------
USER PROFILE MANAGEMENT
───────────────────────
The functions of this sections provide an interface to the OS/2 user profile
management including the logon and logoff commands.
Data structures
User logon information (upm_user_logon):
userid
remotetype
remotename
sessionid
where:
userid contains the name of the logged on user
remotetype is the type of node named in remotename for which the
logoff is being requested. Valid values are:
type Meaning
1 The local node.
2 Specifies that remotename is the name
of a node from which the user wants to
log off.
3 Specifies that remotename is the name
of a domain.
remotename string identifying the node or domain for the user ID.
sessionid Identifier of the session
----------------------------------------------------------------------------
upmeulgn
────────
Logs a user on to the system.
Syntax:
ret = upmeulgn( userid, password, remotename, remotetype, resvd )
Parameter:
userid string containing the user ID to be logged on.
password string containing the password.
remotename string identifying the node or domain for which the user
ID and password are required. If remotetype is local,
remotename is ignored.
remotetype is the type of node named in remotename for which the
user ID and password are required.
types Meaning
1 The local node. The calling process is
logging on to the local node.
2 Specifies that remotename is the name
of an LU 6.2 node to which the caller
wishes to log on.
3 Specifies that remotename is the name
of a domain.
flags is a bit mask for LAN Server logon verification. Valid
values for bits 0 and 1 follow:
Bit Meaning
0x01 Perform verification locally
0x02 Don't perform any verification
0x03 Perform the verification on the domain
----------------------------------------------------------------------------
upmeulgf
────────
Logs a user off the system.
Syntax:
ret = upmeulgf( userid, remotename, remotetype )
Parameter:
userid string containing the user ID to be
logged off.
remotename name identifying the node or domain
from which the user ID is to be logged
off.
remotetype is the type of node named in remotena-
me for which the logoff is being re-
quested. Valid values are:
type Meaning
1 The local node.
2 Specifies that remotename is the
name of a node from which the
user wants to log off.
3 Specifies that remotename is the
name of a domain.
4 Same meaning as (3), except
that all connections are forced
closed.
----------------------------------------------------------------------------
upmelocl
────────
Displays a local logon window to log on to the system.
Syntax:
ret = upmelocl( userid, type )
Parameter:
userid buffer containing the locally logged-on
user ID.
type is a buffer containing the privilege type
of the user who logged on locally.
Type is either:
1 user privilege
2 administrator privilege
9 local administrator privilege
Example:
ret = upmelocl( 'user', 'priv' )
SAY 'User ID: 'user
IF priv = 1 THEN type = 'USER'
IF priv = 2 THEN type = 'ADMIN'
IF priv = 9 THEN type = 'LOCAL ADMIN'
SAY 'Priv: 'type
----------------------------------------------------------------------------
upmelocu
────────
Retrieves the ID of an already local logged on user.
Syntax:
ret = upmelocu( userid, type )
Parameter:
userid buffer containing the locally logged-on
user ID.
type is a buffer containing the privilege type
of the user who is logged on locally.
type is either:
1 user privilege
2 administrator privilege
9 local administrator privilege
----------------------------------------------------------------------------
upmeusrl
────────
Returns a list of logged on user IDs.
Syntax;
ret = upmeusrl( remotename, remotetype, buffer, dummy, entries, '' )
Parameter:
remotename name identifying the node or domain
from which the logged-on user IDs are
requested.
remotetype is the type for the requested logged-on
user IDs. Valid values are:
types Meaning
1 User IDs logged on to the local
node
2 User IDs logged on to remote
nodes
3 User IDs logged on to the LAN
Server domain.
21 User IDs logged on to the high
performance file system
22 All user IDs
buffer contains the UPM_USER_LOGON
structures.
entries is the number of UPM_USER_LOGON
entries returned in buffer.
----------------------------------------------------------------------------
APPENDICES
──────────
The files
─────────
This package consists of the following files:
RXLAN20.DLL The RexxLan/2 extension DLL for a LAN Server Ver-
sion 2.0 Requester
RXLAN30.DLL The counterpart for a Version 3.0 Requester
DO NOT USE THIS WITH A LAN REQUESTER 2.0
REXXLAN.INF The 'VIEW'able version of the programmers reference (not
in the evaluation package)
README.1ST Any last minute comments. Please read them first.
FORM For the development of further releases of RexxLan/2
and other Network management utilities,
REPORT.BUG For the - hopefully - never occuring case, that you
discover an "anomaly" of RexxLan/2 , please fill in
this form and send it to the technical support.
\SMPLES?0 Some sample REXX files using the REXX?0.DLL The
files are well documented, please read the remarks for
further details.
----------------------------------------------------------------------------
Support
───────
The technical support is provided through electronic mail. You will reach it
at:
CompuServe: 100024,3436 (Leif Braeuer)
Fido: 2:240/5200.13
Internet: 100024.3436@compuserve.com
Maus Net: Leif Braeuer@HH (Germany only)
----------------------------------------------------------------------------
Return codes
────────────
You can consult the OS/2 Online help for further details of the error condition.
To do so, open a OS/2 Command Window and enter HELP SYSxxx for error
code less than 2100, for other enter HELP NETxxxx, where xxxx specfies the
error code returned from the RexxLan/2 API. In your programs,
NetRexxGetMessage() will supply this information.
0 (NERR_Success) Success
Redirector related error codes
50 (ERR_NOT_SUPPORTED) The network request is not supported.
51 (ERR_REM_NOT_LIST) This remote computer is not listening.
52 (ERR_DUP_NAME) A duplicate name exists on the network.
53 (ERR_BAD_NETPATH) The network path cannot be located.
54 (ERR_NETWORK_BUSY) The network is busy.
55 (ERR_DEV_NOT_EXIST) This device does not exist on the net-
work.
56 (ERR_TOO_MANY_CMDS) The network BIOS command limit has been
reached.
57 (ERR_ADAP_HDW_ERR) A network adapter hardware error has
occurred.
58 (ERR_BAD_NET_RESP) The network responded incorrectly.
59 (ERR_UNEXP_NET_ERR) An unexpected network error occurred.
60 (ERR_BAD_REM_ADAP) The remote adapter is not compatible.
61 (ERR_PRINTQ_FULL) The printer queue is full.
62 (ERR_NO_SPOOL_SPACE) Space to store the file waiting to be
printed is not available on the server.
63 (ERR_PRINT_CANCELLED) The requested print file has been can-
celled.
64 (ERR_NETNAME_DELETED) The network name was deleted.
65 (ERR_NETWORK_ACCESS_DENIED) Network access is denied.
66 (ERR_BAD_DEV_TYPE) The network resource type is not cor-
rect.
67 (ERR_BAD_NET_NAME) The network name cannot be found.
68 (ERR_TOO_MANY_NAMES) The name limit for the local computer
network adapter card was exceeded.
69 (ERR_TOO_MANY_SESS) The network BIOS session limit was ex-
ceeded.
70 (ERR_SHARING_PAUSED) File sharing has been temporarily paused.
71 (ERR_REQ_NOT_ACCEP) The network request was not accepted.
72 (ERR_REDIR_PAUSED) Print or disk redirection is tempora-
rily paused.
88 (NET_WRITE_FAULT) A network data fault occurred.
230 (ERR_BAD_PIPE) This is a nonexistent pipe or an inva-
lid operation.
231 (ERR_PIPE_BUSY) The specified pipe is busy.
232 (ERR_NO_DATA) There is no data to be read on a non--
blocking read.
233 (ERR_PIPE_NOT_CONNECTED) The server disconnected the pipe.
234 (ERR_MORE_DATA) Additional data is available.
240 (ERR_VC_DISCONNECTED) The session was cancelled.
2102 (NERR_NetNotStarted) The workstation driver (NETWKSTA.SYS on
OS/2 workstations, NETWKSTA.EXE on DOS
workstations) isn't installed.
2103 (NERR_UnknownServer) The server cannot be located.
2104 (NERR_ShareMem) An internal error occurred. The net-
work cannot access a shared memory
segment.
2105 (NERR_NoNetworkResource) A network resource shortage occurred .
2106 (NERR_RemoteOnly) This operation is not supported on
workstations.
2107 (NERR_DevNotRedirected) The device is not connected.
2114 (NERR_ServerNotStarted) The Server service isn't started.
2115 (NERR_ItemNotFound) The queue is empty.
2116 (NERR_UnknownDevDir) The device or directory does not exist
2117 (NERR_RedirectedPath) The operation is invalid on a redirec-
ted resource.
2118 (NERR_DuplicateShare) The name has already been shared.
2119 (NERR_NoRoom) The server is currently out of the
requested resource.
2121 (NERR_TooManyItems) Requested add of item exceeds maximum
allowed.
2122 (NERR_InvalidMaxUsers) The Peer service supports only two
simultaneous users.
2123 (NERR_BufTooSmall) The API return buffer is too small.
2127 (NERR_RemoteErr) A remote API error occurred.
2131 (NERR_LanmanIniError) An error occurred when opening or read-
ing IBMLAN.INI.
2134 (NERR_OS2IoctlError) An internal error occurred when calling
the workstation driver.
2136 (NERR_NetworkError) A general network error occurred.
2138 (NERR_WkstaNotStarted) The Requester service has not been
started.
2139 (NERR_BrowserNotStarted) The requested information is not avai-
lable.
2140 (NERR_InternalError) An internal LAN Manager error occurred.
2141 (NERR_BadTransactConfig) The server is not configured for trans-
actions.
2142 (NERR_InvalidAPI) The requested API isn't supported on
the remote server.
2143 (NERR_BadEventName) The event name is invalid.
NetConfig related error codes
2146 (NERR_CfgCompNotFound) Could not find the specified component
in IBMLAN.INI.
2147 (NERR_CfgParamNotFound) Could not find the specified parameter
in IBMLAN.INI.
2149 (NERR_LineTooLong) A line in IBMLAN.INI is too long.
Wksta and Logon related error codes
2200 (NERR_AlreadyLoggedOn) This workstation is already logged on
to the local-area network.
2201 (NERR_NotLoggedOn) The workstation isn't logged on to the
local-area network.
2202 (NERR_BadUsername) The username or groupname parameter is
invalid.
2203 (NERR_BadPassword) The password parameter is invalid.
2204 (NERR_UnableToAddName_W) The logon processor did not add the
message alias.
2205 (NERR_UnableToAddName_F) The logon processor did not add the
message alias.
2206 (NERR_UnableToDelName_W) The logoff processor did not delete the
message alias.
2207 (NERR_UnableToDelName_F) The logoff processor did not delete the
message alias.
2209 (NERR_LogonsPaused) Network logons are paused.
2210 (NERR_LogonServerConflict) A centralized logon-server conflict
occurred.
2211 (NERR_LogonNoUserPath) The server is configured without a
valid user path.
2212 (NERR_LogonScriptError) An error occurred while loading or
running the logon script.
2214 (NERR_StandaloneLogon) The logon server was not specified.
Your computer will be logged on as
STANDALONE.
2215 (NERR_LogonServerNotFound) The logon server cannot be found.
2216 (NERR_LogonDomainExists) There is already a logon domain for
this computer.
2217 (NERR_NonValidatedLogon) The logon server could not validate the
logon.
ACF API related (access, user, group) error codes
2219 (NERR_ACFNotFound) The accounts file NET.ACC cannot be
found.
2220 (NERR_GroupNotFound) The groupname cannot be found.
2221 (NERR_UserNotFound) The username cannot be found.
2222 (NERR_ResourceNotFound) The resource name cannot be found.
2223 (NERR_GroupExists) The group already exists.
2224 (NERR_UserExists) The user account already exists.
2225 (NERR_ResourceExists) The resource permission list already
exists.
2226 (NERR_NotPrimary) The UAS database is replicant and will
not allow updates.
2227 (NERR_ACFNotLoaded) The user account system has not been
started.
2228 (NERR_ACFNoRoom) There are too many names in the user
account system.
2229 (NERR_ACFFileIOFail) A disk I/O failure occurred.
2230 (NERR_ACFTooManyLists) The limit of 64 entries per resource
was exceeded.
2231 (NERR_UserLogon) Deleting a user with a session is not
allowed.
2232 (NERR_ACFNoParent) The parent directory cannot be located.
2233 (NERR_CanNotGrowSegment) Unable to grow UAS session cache segment.
2234 (NERR_SpeGroupOp) This operation is not allowed on this
special group.
2235 (NERR_NotInCache) This user is not cached in UAS session
cache.
2236 (NERR_UserInGroup) The user already belongs to this group.
2237 (NERR_UserNotInGroup) The user does not belong to this group.
2238 (NERR_AccountUndefined) This user account is undefined.
2239 (NERR_AccountExpired) This user account has expired.
2240 (NERR_InvalidRequester) The user is not allowed to log on from
this workstation.
2241 (NERR_InvalidLogonHours) The user is not allowed to log on at
this time.
2242 (NERR_PasswordExpired) The password of this user has expired.
2243 (NERR_PasswordCantChange) The password of this user cannot chan-
ge.
2244 (NERR_PasswordHistConflict) This password cannot be used now.
2245 (NERR_PasswordTooShort) The password is shorter than required.
2246 (NERR_PasswordTooRecent) The password of this user is too recent
to change.
2247 (NERR_InvalidDatabase) The UAS database file is corrupted.
2248 (NERR_DatabaseUpToDate) No updates are necessary to this repli-
cant UAS database.
2249 (NERR_SyncRequired) This replicant database is outdated;
synchronization is required.
Use API related error codes
2250 (NERR_UseNotFound) The connection cannot be found.
2251 (NERR_BadAsgType) This asg_type is invalid.
2252 (NERR_DeviceIsShared) This device is currently being shared.
Message Server related error codes
2270 (NERR_NoComputerName) A computername has not been configured.
2271 (NERR_MsgAlreadyStarted) The Messenger service is already star-
ted.
2272 (NERR_MsgInitFailed) The Messenger service failed to start.
2273 (NERR_NameNotFound) The message alias cannot be found on
the local-area network.
2274 (NERR_AlreadyForwarded) This message alias has already been
forwarded.
2275 (NERR_AddForwarded) This message alias has been added but
is still forwarded.
2276 (NERR_AlreadyExists) This message alias already exists lo-
cally.
2277 (NERR_TooManyNames) The maximum number of added message
aliases has been exceeded.
2278 (NERR_DelComputerName) The computername cannot be deleted.
2279 (NERR_LocalForward) Messages cannot be forwarded back to
the same workstation.
2280 (NERR_GrpMsgProcessor) Error in domain message processor
2281 (NERR_PausedRemote) The message was sent, but the recipient
has paused the Messenger service.
2282 (NERR_BadReceive) The message was sent but not received.
2283 (NERR_NameInUse) The message alias is currently in use.
Try again later.
2284 (NERR_MsgNotStarted) The Messenger service has not been
started.
2285 (NERR_NotLocalName) The name is not on the local computer.
2286 (NERR_NoForwardName) The forwarded message alias cannot be
found on the network.
2287 (NERR_RemoteFull) The message alias table on the remote
station is full.
2288 (NERR_NameNotForwarded) Messages for this alias are not cur-
rently being forwarded.
2289 (NERR_TruncatedBroadcast) The broadcast message was truncated.
2294 (NERR_InvalidDevice) This is an invalid devicename.
2295 (NERR_WriteFault) A write fault occurred.
2297 (NERR_DuplicateName) A duplicate message alias exists on the
local-area network.
2298 (NERR_DeleteLater) This message alias will be deleted
later.
2299 (NERR_IncompleteDel) The message alias was not successfully
deleted from all networks.
2300 (NERR_MultipleNets) This operation is not supported on
machines with multiple networks.
Server API related error codes
2310 (NERR_NetNameNotFound) This shared resource does not exist.
2311 (NERR_DeviceNotShared) This device is not shared.
2312 (NERR_ClientNameNotFound) A session does not exist with that
computername.
2314 (NERR_FileIdNotFound) There isn't an open file with that ID
number.
2315 (NERR_ExecFailure) A failure occurred when executing a
remote administration command.
2316 (NERR_TmpFile) A failure occurred when opening a re-
mote temporary file.
2317 (NERR_TooMuchData) The data returned from a remote admini-
stration command has been truncated to
64K.
2318 (NERR_DeviceShareConflict) This device cannot be shared as both a
spooled and a non-spooled resource.
2319 (NERR_BrowserTblIncomplete) The information in the list of servers
may be incorrect.
2320 (NERR_NotLocalDomain) The computer isn't active on this do-
main.
NetErrorLog error codes
2377 (NERR_LogOverflow) This log file exceeds the maximum de-
fined size.
2378 (NERR_LogFileChanged) This log file has changed between
reads.
2379 (NERR_LogFileCorrupt) This log file is corrupt.
Additional UAS and NETLOGON error codes
2450 (NERR_BadUasConfig) The user account system database is not
configured correctly.
2451 (NERR_InvalidUASOp) This operation is not permitted when
the Netlogon service is running.
2452 (NERR_LastAdmin) This operation is not allowed on the
last admin account.
2453 (NERR_DCNotFound) Unable to find domain controller for
this domain.
2454 (NERR_LogonTrackingError) Unable to set logon information for
this user.
2455 (NERR_NetlogonNotStarted) The Netlogon service has not been star-
ted.
2456 (NERR_CanNotGrowUASFile) Unable to grow the user account system
database.
2458 (NERR_PasswordMismatch) A password mismatch has been detected.
Server error codes.
2460 (NERR_NoSuchServer) The server ID does not specify a valid
server.
2461 (NERR_NoSuchSession) The session ID does not specify a valid
session.
2462 (NERR_NoSuchConnection) The connection ID does not specify a
valid connection.
2463 (NERR_TooManyServers) There is no space for another entry in
the table of available servers.
2464 (NERR_TooManySessions) The server has reached the maximum
number of sessions it supports.
2465 (NERR_TooManyConnections) The server has reached the maximum
number of connections it supports.
2466 (NERR_TooManyFiles) The server cannot open more files be-
cause it has reached its maximum num-
ber.
2467 (NERR_NoAlternateServers) There are no alternate servers registe-
red on this server.
UPS error codes.
2480 (NERR_UPSDriverNotStarted) The UPS driver could not be accessed by
the UPS service.