TSR Applications Hang While Login.exe Is Running
ID: Q177677
|
The information in this article applies to:
-
Microsoft Windows NT Server versions 3.51, 4.0
-
Microsoft File and Print Services for NetWare version 3.51
-
Microsoft Directory Service Manager for NetWare version 3.51
-
Microsoft Services for NetWare version 4.0
-
Microsoft Windows NT Server version 4.0, Terminal Server Edition
SYMPTOMS
In your enterprise, you have Novell NetWare servers and Windows NT domains.
Your clients are running MS-DOS-based redirectors by Novell. In addition,
you use MS-DOS Terminate and Stay Resident (TSR) tools to enhance your
environment.
For example, you have software that pulls print jobs off a Novell NetWare
print queue for output on a printer attached locally.
When you run Login.exe from your Autoexec.bat or other scripts without
parameters it will wait, prompting you for a user name. You notice that
during this time the TSR application does not perform any work and appears
to stop responding (hang).
You do not experience this behavior when you use Novell's version of
Login.exe.
CAUSE
In MS-DOS, TSR applications are only allowed to do work in the Interrupt
Service Routine (ISR) when the so-called InDOS flag is not set. This flag
can be retrieved through the MS-DOS call INT 21H function 34H.
The Microsoft versions of Login.exe, Attach.exe, Capture.exe, and Map.exe
use INT 21H function 3FH (Read File or Device) to get the user or server
name from the user by means of the keyboard. This function sets the InDOS
flag while it is active.
When the TSR application wakes up because of a timer or another interrupt,
it checks the InDOS flag, sees that it is set and returns without any
action. So, the TSR application cannot do anything while Login.exe waits
for the user name. This problem will happen with any software using INT21H
function 3FH.
Both applications are programmed according to the guidelines of the MS-DOS
operating system. The problem is because of a limitation in the MS-DOS
programming paradigm and, thus, by design.
Novell's version of Login.exe uses INT 21H function 08H (Read Keyboard
without Echo). This is a low-level function (callable from an ISR) that
does not set the InDOS flag and, hence, does not cause the TSR application
to stop responding.
RESOLUTION
To resolve this problem, do one of the following:
Windows NT 3.51
In your scripts, before you call Login.exe, you can either add an echo and
pause statement or a CHOICE call.
Example:
CHOICE Do you want to logon to the company network IF errorlevel 2
GOTO end LOGIN :end
This will prevent the computer from waiting in Login.exe.
Windows NT 4.0
To resolve this problem, obtain the latest service pack for Windows NT 4.0 or Windows NT Server 4.0, Terminal Server Edition. For additional information, please see the following article in the
Microsoft Knowledge Base:
Q152734 How to Obtain the Latest Windows NT 4.0 Service Pack
STATUS
Microsoft has confirmed this to be a problem in Windows NT version 3.51. We
are researching this problem and will post new information here in the
Microsoft Knowledge Base as it becomes available.
Microsoft has confirmed this to be a problem in Windows NT 4.0 and Windows NT Server 4.0, Terminal Server Edition. This problem was first corrected in Windows NT 4.0 Service Pack 4.0 and Windows NT Server 4.0, Terminal Server Edition Service Pack 4.
Keywords : NT4SP4Fix kbbug4.00 kbfix4.00.sp4 kbbug3.51 NTSrv
Version : WinNT:3.51,4.0
Platform : winnt
Issue type : kbbug