KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q177113: Incomplete Print Jobs Using JetDirect over SPX

Article: Q177113
Product(s): Microsoft Windows NT
Version(s): 4.0
Operating System(s): 
Keyword(s): kbWinNT400sp4fix
Last Modified: 10-AUG-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Windows NT Workstation version 4.0 
- Microsoft Windows NT Server version 4.0 
- Microsoft Windows NT Server version 4.0, Terminal Server Edition 
-------------------------------------------------------------------------------


SYMPTOMS
========

If you have a computer running Windows NT Service Pack 2 or 3 and have the HP
JetAdmin utility installed on your computer, you may see only partial print jobs
during periods of intense printer usage. You must be configured to print to an
HP printer through an HP JetDirect card over the NWLink SPX protocol to
experience this problem.

NOTE: JetDirect is no longer supported by HP. They now use SDI (Simple Device
Installation) to install network printers. For more information on this, see:

http://www.hp.com/cgi-bin/cposupport/ccsearch/getdoc?doc=bpj05973
or
http://www.hp.com/cposupport/networking/support_doc/bpj06765.html

HP recommends a new software admin package (TCP/IP / IPX/SPX Based). For further
information see:

http://www.hp.com/cgi-bin/cposupport/ccsearch/getdoc?doc=bpj06723
or
http://www.hp.com/cgi-bin/cposupport/ccsearch/getdoc?doc=bpj06724

CAUSE
=====

Using the NWLink SPX protocol, the printer will signal the client computer that
the printer is ready for more information by incrementing the allocation number.
If the allocation number increments, then the client is free to send another
packet of printing data over SPX.

If the printer fails to increment the allocation number in the next packet of a
printing sequence, then this should signal to the client that the printer
buffers are full. The client should respond appropriately by refraining to send
any further data packets until the printer signals its buffers are clear and it
is ready to receive more data.

This printing sequence was broken by a bug introduced beginning with Service Pack
2 for Windows NT 4.0. After applying either Service Pack 2 or 3, NWLink SPX no
longer looks at the allocation number in the packet received from the printer.
Instead it ignores the allocation number and continues to send data.

RESOLUTION
==========

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 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.


MORE INFORMATION
================

The following lines from a Network Monitor trace illustrate the problem. The
first sequence illustrates the failure.

5    CLIENT   PRINTER   0x99E4 -> 0xFFFF, Seq = 0, Ack = 0, Alloc = 3
6    PRINTER  CLIENT    0x3C8E -> 0x99E4, Seq = 0, Ack = 0, Alloc = 0
7    PRINTER  CLIENT    0x3C8E -> 0x99E4, Seq = 0, Ack = 0, Alloc = 0
8    CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 0, Ack = 1, Alloc = 4
9    CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 0, Ack = 1, Alloc = 4
10   PRINTER  CLIENT    0x3C8E -> 0x99E4, Seq = 1, Ack = 1, Alloc = 1
11   PRINTER  CLIENT    0x3C8E -> 0x99E4, Seq = 1, Ack = 1, Alloc = 1
12   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 1, Ack = 2, Alloc = 5
13   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 1, Ack = 2, Alloc = 5
14   PRINTER  CLIENT    0x3C8E -> 0x99E4, Seq = 2, Ack = 2, Alloc = 2
15   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 2, Ack = 2, Alloc = 5
16   PRINTER  CLIENT    0x3C8E -> 0x99E4, Seq = 2, Ack = 3, Alloc = 3
17   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 3, Ack = 2, Alloc = 5
18   PRINTER  CLIENT    0x3C8E -> 0x99E4, Seq = 2, Ack = 4, Alloc = 3
19   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
20   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
21   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
22   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
23   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
24   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
25   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
26   CLIENT   PRINTER   0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
.
.
.
51    CLIENT   PRINTER  Diag Request: Exclude 0 Addresses
52    PRINTER  CLIENT   Diag Resp: Ver 1.0, SPX Socket = 0x4801, 2 Components
53    CLIENT   PRINTER  Diag Request: Exclude 0 Addresses
54    PRINTER  CLIENT   Diag Resp: Ver 1.0, SPX Socket = 0x4801, 2 Components
55    CLIENT   PRINTER  0x99E5 -> 0xFFFF, Seq = 0, Ack = 0, Alloc = 3
56    PRINTER  CLIENT   0xBA22 -> 0x99E5, Seq = 0, Ack = 0, Alloc = 0

Notice that in frame 18 the Printer increments the ACK to 4, but the allocation
number remains at 3. The client should stop sending at this point, but in frames
19 through 26 the client continues to send data.

After a short time, in frame 51, the client begins negotiating a new session, but
as long as there is a "buffer full" situation, the new session will also
terminate. This process continues until the print sequence completes without
encountering the "buffer full" signal from the printer.

The second trace sequence below illustrates the correct behavior.

131   CLIENT    PRINTER    0x1870 -> 0xFFFF, Seq = 0, Ack = 0, Alloc = 3
132   PRINTER   CLIENT     0x3CBA -> 0x1870, Seq = 0, Ack = 0, Alloc = 0
133   PRINTER   CLIENT     0x3CBA -> 0x1870, Seq = 0, Ack = 0, Alloc = 0
134   CLIENT    PRINTER    0x1870 -> 0x3CBA, Seq = 0, Ack = 1, Alloc = 4
135   CLIENT    PRINTER    0x1870 -> 0x3CBA, Seq = 0, Ack = 1, Alloc = 4
136   PRINTER   CLIENT     0x3CBA -> 0x1870, Seq = 1, Ack = 1, Alloc = 1
137   PRINTER   CLIENT     0x3CBA -> 0x1870, Seq = 1, Ack = 1, Alloc = 1
138   CLIENT    PRINTER    0x1870 -> 0x3CBA, Seq = 1, Ack = 2, Alloc = 5
.
.
.
141   CLIENT    PRINTER    0x1870 -> 0x3CBA, Seq = 1, Ack = 2, Alloc = 5
142   PRINTER   CLIENT     0x3CBA -> 0x1870, Seq = 2, Ack = 2, Alloc = 2
143   CLIENT    PRINTER    0x1870 -> 0x3CBA, Seq = 2, Ack = 2, Alloc = 5
144   PRINTER   CLIENT     0x3CBA -> 0x1870, Seq = 2, Ack = 3, Alloc = 3
145   CLIENT    PRINTER    0x1870 -> 0x3CBA, Seq = 3, Ack = 2, Alloc = 5
146   PRINTER   CLIENT     0x3CBA -> 0x1870, Seq = 2, Ack = 4, Alloc = 3

The printer increments the allocation numbers as expected up frame 146. After
this frame, the client temporarily discontinues sending data until it gets the
buffers clear signal from the printer. This occurs in the sequence below:

316   PRINTER   CLIENT     0x3CBA -> 0x1870, Seq = 2, Ack = 4, Alloc = 4
317   CLIENT    PRINTER    0x1870 -> 0x3CBA, Seq = 4, Ack = 2, Alloc = 5
.
.
.

In frame 316, the printer finally increments the allocation number, and the
client immediately responds in frame 317 with more data. At that point, the
print job continues uninterrupted until its completion.

For additional information, please see the following article in the Microsoft
Knowledge Base:

ARTICLE-ID: Q151677
TITLE : NWLink SPX Ignores Allocation Number Sent By Peer

The Hewlett-Packard products discussed here are manufactured by Hewlett- Packard,
a vendor independent of Microsoft; we make no warranty, implied or otherwise,
regarding the products' performance or reliability.

Additional query words: novell ipx/spx failure partial output

======================================================================
Keywords          : kbWinNT400sp4fix 
Technology        : kbWinNTsearch kbWinNTWsearch kbWinNTW400 kbWinNTW400search kbWinNT400search kbWinNTSsearch kbWinNTS400search kbWinNTS400 kbNTTermServ400 kbNTTermServSearch
Version           : :4.0
Hardware          : ALPHA x86
Issue type        : kbbug
Solution Type     : kbfix

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.