DOCUMENT:Q177113 10-AUG-2001 [winnt] TITLE :Incomplete Print Jobs Using JetDirect over SPX PRODUCT :Microsoft Windows NT PROD/VER::4.0 OPER/SYS: KEYWORDS:kbWinNT400sp4fix ====================================================================== ------------------------------------------------------------------------------- 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 2001.