windows-nt/Source/XPSP1/NT/termsrv/admtools/utilsub/desnote.txt

48 lines
2.2 KiB
Plaintext
Raw Normal View History

2020-09-26 03:20:57 -05:00
Brief design note on utilities DLL (utilsub.dll)
By John Richardson CITRIX Systems, 1993.
A large part of the library are functions for processing command lines, strings,
etc. ported from the OS/2 product on an as needed basis. The only unique
part here is a complete UNICODE version of ParseCommandLine(), and the many
subroutines it calls upon to handle file name expansion and such.
The more interesting part are the "helper" functions that do a lot of the
work that was in MumProc() on OS/2. This allows querying NT and CITRIX supplied
system objects such as users, winstations, processes, etc. A lot of time
was spent chasing down various ways of doing things, as well as implementation
of base support (such as winsta.dll). The functions in the library handle
common needs that come up in the implementation of system programs.
CACHES:
In order to be efficient, the DLL makes use of caching of various information
gotten from the system and objects. For "one shot" command line utilities,
this cache does not pose any problems. But for monitoring utilities that
do not exit, there is a need to flush these caches whenever up to date
system information is needed. IE: The top of its monitoring loop after an
interval wakeup, or event. The main flush function is RefreshAllCaches(),
but specific caches may be dumped by calling refresh routines specific to
the group of routines. See the tail end of utils\citrix\inc\utilsub.h for
the various cache dumping routines.
Universal Object Name Matching:
The current OS/2 product makes use of techniques in which the user can
supply the name of a user, workstation, or id to the various utilities and
the system will try to match this against a valid name. In order to be
consistent, as well as make maintanence easier, this DLL provides Object
name match functions that adhere to the lookup rules in the system.
Currently, the name is validated as a workstation, and if not, it is checked
as a workstation integer id. If this is still invalid, it is checked as a
valid user name.
For the ProcessObjectMatch routine, an additional flag is supplied to
specify whether to treat an integer identifier as an NT process, or a
CITRIX WinStation.