HP Ink Cartridge Expiration Patch
English-speaking users: Patch instructions are found at the end of the blog post.
Wir haben hier im Büro einen HP Businessjet Farbtintenstrahldrucker, welcher sich vor einigen Tagen plötzlich weigerte zu drucken. Als Statusinformation am Display des Druckers kam: “Tintenpatrone abgelaufen”.
Nach einigen Recherchen in Google fand ich dann eine Beschreibung der Problematik auf dieser Seite von HP.
HP versieht also scheinbar bei einigen seiner Druckermodelle die Tintenpatronen mit einem Chip, auf welchem das Ablaufdatum der Patrone gespeichert wird und wenn man die Patrone länger benutzt als 2 Jahre, dann verweigert der Drucker den Dienst und besteht auf den Tausch der entsprechenden Patrone.
Nachdem es für mich inakzeptabel ist, dass HP mir vorschreiben will, wie lang ich die Patrone benutzen darf, habe ich versucht, das Problem zu analysieren.
Im Internet finden sich etliche Seiten, welche diese Problematik beschreiben, beispielsweise dieser mit reichlichen Kommentaren versehene Blog Eintrag. Viele Leute lösen das Problem auf mechanische Weise, indem sie die Druckerbatterie entfernen und somit den Drucker resetten, was dazu zu führen scheint, dass dieser “vergisst”, dass die PAtrone abgelaufen ist. Auch das Abdecken des Chips der Patrone soll zum Erfolg führen. Der Tip eines Kommentarschreibers, dass man nach dem Einschalten des Druckers einmal mit zurückgestelltem Datum drucken muss und anschließend während der aktuellen Sitzung normal weiterdrucken kann, hat mich auf die Idee gebracht, dass das Ganze wohl auch einfach Softwaretechnisch zu lösen sein muss. Scheinbar bekommt also der Drucker das aktuelle Datum vom Treiber zugesendet und verwendet dies dann für seine Ablaufdatumsberechnung.
Folglich habe ich mir einmal angesehen, was der Druckertreiber dem Drucker so an Informationen sendet, indem ich den Anschlussport des Druckers in den Druckeroptionen auf FILE: umgestellt und mir die Rohdaten angesehen habe. Dabei sticht folgendes PJL Kommando heraus:
@PJL SET TIMESTAMP="20091005153634"
Hier wird also der aktuelle Zeitstempel an den Drucker übertragen und aufgrund von entsprechenden Versuchen mit modifizierten Dumpfiles konnte ich herausfinden, dass der Drucker auch ohne diesem PJL Kommando funktioniert und folglich keinen Fehler beim Drucken mehr anzeigt.
Kleiner Tip am Rande: Man kann dem Drucker Rohdaten senden, indem man den Drucker freigibt, ihn anschließend mittels
net use lpt1 \hostprinter
einem Port zuordnet und anschließend die Rohdaten mit
copy /b rawdump lpt1
sendet. Damit ist einfaches Testen möglich.
Folglich kann man das Problem also am Einfachsten lösen, indem man den Druckertreiber derart modifiziert, dass er den Zeitstempel nicht an den Drucker sendet. Leider ist jeder Druckertreiber anders aufgebaut, sodass dies keine universelle Lösung ist, auch wenn das einfache Überspringen der Kommandoausgabe sicher die “sauberste” Lösung darstellt. Durch weitere Versuche stellte sich jedoch auch heraus, dass der Drucker ungültige PJL-Kommandos stillschweigend ignoriert. Daher kann man also einen universellen Patch bauen, indem man einfach im Druckertreiber nach dem oben genannten PJL-String sucht und diesen leicht modifiziert (z.B. indem man das Schlüsselwort TIMESTAMP in TIMESTAMX ändert – schon erkennt es der Drucker nicht mehr).
Ich habe einen kleinen Patcher gebaut, welcher einige Druckertreiber “kennt” und dort das Senden des TIMESTAMPs einfach überspringt. Für alle HP Druckertreiber, die er nicht kennt, benutzt er die eben erwähnte universelle Methode, indem er einfach den TIMESTAMP-String ändert. Der Patcher kann die von ihm getätigten Änderungen auch wieder rückgängig machen, falls diese zu Problemen führen sollten. Ich hoffe, dass man das Problem damit umgehen kann und jemand den Patcher brauchen kann.
Instructions for patching:
I have been notified that this patch may not work on other printer models (I can only confirm that it works on my HP Business Inkjet 2300). so I recommend that you first verify if your printer can be tricked by the following procedure:
1) Turn off your printer
2) Set back system date to prior to the printer cartridge expiration date
3) Turn your printer on again
4) Try to print
5) Reset system date to current date
If printing works with these steps then the driver patch should work too. If it doesn’t, there may be some extra safeguards in your printer model. Sorry.
I don’t own other HP printers with expiring cartridges that I can try out, so I can only hope that the trick works for your printer as well.
1) Turn off your printer so that the internal date gets reset. At least this works for HP Businessjet.
2) Apply patch and check if at least one printer driver file gets patched.
3) Either restart the spooling service or restart your computer just to be sure that the patched driver DLL gets loaded.
4) Turn on your printer again and see if you can print with the expired cartridge.
Update 07.04.2010: Incorporated deden’s patch into the patcher, maybe this helps for some printer models…
Feedback via Comments is welcome.
Comments
Ich sehe schon die ersten Klagen eintrudeln weil der Absatz von Tintenpatronen zurückgeht 🙂
It does not work on my FP deskjet all in one 4280. It might be that the cartridge chip and the memory in the printer motherboard sre the one to be hacked not the printer driver. I observed that even when you remove the USB connection bet. printer and PC, the printer can still detect expired cartridges
Thank you
edwin lacuesta: Please refer to the instructions above.
If the trick with changing back system time works, the patch should work too.
Did the patcher find a driver to patch? (If you are not sure, just paste the output)
Yes . The driver has been patched. The patch dissable the toolbox settings of the 4280. Now you can not perform cleaning aligning of printhead and others. If you click any of the tools the message “Printer is disconnected” appears. I can still print. Changing of the date does not work with this printer. I disassembled the printer using flat screw head that fits the torx screws looking for the battery but I can not find it. Pull out all the plugs and cables that are connected to the printer board, hoping that I can cut off electrical supply to the memory to erase contents. The hack must be done in the printer or the cartidge. The 3 cartridges and taping works for me 2 times only for the the 2 expired cartidges. It seems that the printer remembers all the taping procedures that was run in all the cartridges.
Wow, HP really seems to put a lot of effort into this. So I guess I was just lucky that my printer model (Business Inkjet 2300) can be convinced to use the expired cartridge so easily. I guess the method differs from printer model to printer model. For example on my Business Inkjet, the pencheck parameter didn’t exist whereas other users reported that it was easy to turn the check off just by using this parameter on other printers.
To patch your driver back to original state, just use [R]estore, it changes the patched byte back to the old state.
Well, thanks for the feedback, now at least I know it’s not working for all printer models. Damn, this would have been too easy 😉
I also change the parameters of the printer driver by using the pencheck method – changing the parameters to 0000. It doesn’t work with this printer. What it does is just to prevent reading the status of the caridges: the cartridges are unknown or with question mark and the ink level can not be read or detected.
Just about all chips controlling printers,toner,etc,(including those in the cartridges/toners almost surely) use flash memory which does not require any backup battery.
As for the expiry date, even a small capacitor will keep a cpu clock alive for an enormous amount of time.
Even if the printer forgets the date/time I am sure the driver will update along the way, even possibly in encrypted form. The RFID tags in OKI toner cartridges are scam+++ too. Must fix the com link to the RFID tags one day. – when I get time.
I am having problems downloading this patch for my Business Inkjet, it says patch not found. I would really like to try this as I am very frustrated at my printer not working. Thanks!
Have you tried the test procedure described in order to check if your printer model supports this trick?
Hi Dose,
nice try, but it does not work for me… My HP Bussines InkJet 1200 still binkin’ like a Christmas Tree and says “Cartridges Expired” :-(.
The TIMESTAMP was patched in “hpzvip12.dll”, but it didn’t help.
I should note that my HP is connected via WiFi and the trick with the system date makes it print OK on my WinXP SP3.
Interestingly Vista built-in drivers are not crippled this way and I can print without any problems… I also might try to observe the network traffic and see if I’m able to tell the difference between XP and Vista, but I’m short of time.
Good Luck!
Update:
I’ve been able to patch a wifi-connected HP Business InkJet 1200 on XP. All thanks go to Dose, his idea pointed me in the right direction!
Altering the PJL “TIMESTAMP” string alone doesn’t work as the WinXP driver sends the actual time also in PCL3 part of the communication (more specifically in so-called PCL passthrough to PML), pobably.
Unfortunately, HP’s PML is not very well documented and may vary from model to model, which renders my patch much less useful…
Well here it goes:
In the same dll where the effective TIMESTAMP string is located, there should be also string like “&b20WPML [04 00 04 01 01 02 11 14 07]”, where numbers in [] are hexadecimal representation of characters. By changing this to “&b20WPML xxxxxxxxx” one achieves the goal. Fortunately, the printer doesn’t go mad from this :-).
Dose could upgraded his patch to take this into account, but this is not guaranteed to work for every version of the HP BIJ 1200 driver…
Any clues for the officejet Pro L7580? as I have the same problem?
I incorporated your patch into the patcher, thanks for your great analysis! I als owas unable to find out what this PML-Command is for, there really seems to be a lack of documentation in this area.
I credited you by writing “Patched WPML [by deden] (Generic)”, I hope that’s OK for you.
Hopefully your patch will help some users.
Does the patcher find the generic patch patterin in your driver and patch it?
You may also retry with deden’s fix now, maybe this helps?
Super. das funktioniert mit meinem alten Business inkjet1200 !!! Man sollte den patch allerdings im abgesicherten Modus ausführen.
jetzt kann ich meine Patronen noch alle verwerten.
Auch die baugleichen 88er Typen nach Austausch bzw. Beibehaltung des 11er Chips.
Danke für den Patch!!
Thank you very much for this patch! I had a HP CP1700 and now have a HP Business Inkjet 2800. I have been using continuous ink refilling systems for years and often had problems with the cartridge chips (even “auto reset” ones) giving “expired” messages. I have set up the chips outside the printer to make it easier to change them.
This happened recently with an “auto reset” chip in use for 18 months. Setting back the computer date worked so I tried your patch, and it worked on the second attempt.
Why doesn’t anyone make printers with continuous ink systems? It saves so much money I would be willing to pay a lot more for such a printer instead of paying many times the printer price in ink cartridges every year.
Thank you!!!
better way to do it is not to alter the TIMESTAMP strring, but the “%s” that follows it and replace it with a fixed string containing a date in the past. if you need my patcher, email me at gikam@yahoo.com, put FixHP in the subject
Ich hatte meinen HP Business Inkjet 2300n mit einem ‘CISS – Continuous Ink Supply System’ nachgerüstet, in der Hoffnung nun endgültig auf den Nachkauf von Patronen verzichten zu können.
Irrtum! Die Chips an den CISS- Patronen suggerieren zwar zum einen dem Drucker einen stetigen 100%igen Patronenfüllstand, zum anderen besitzen sie jedoch ebenfalls ein Verfallsdatum von ca. 36 Monaten. Ein Ausdruck der Business Inkjet Konfigurationsseite gibt Auskunft über das genaue Datum. Bei mir fing der Drucker dann ca. zwei Wochen vor dem Ablaufdatum an zu streiken. Ab dann konnte ich jeweils nur noch eine Seite ausdrucken, bevor er abstürzte und erneut aus- und eingeschaltet werden mußte.
Nachforschungen auf der Homepage von ‘HP’ unter dem Stichwort ‘Ink Expiration’ beraubten mich dann der Hoffnung auf eine einfache Lösung meines Problems.
Nach langem Suchen fand ich Ihren ‘Expiration Patch’. Er ließ sich problemlos installieren und seitdem kann ich wieder ohne Einschränkungen drucken.
Großes Dankeschön!!!
Sie haben mir vielen Ärger und Reparaturaufwand erspart.
Thanks for the patch.
My F2480 sometimes work with the “Refill cartridge” after patch, seems new safeguards by HP added.
The trick need extra cartridge to cheat, at least 2 pcs of ink each (color/black).
Thanks again!
I’m not sure if this works in all cases. What if there are not enough NULL-padding bytes after the string to write a complete date to it?
Also sprintf may have problems when you add a parameter to the stack that isn’t used in the format string (as you remove the %s).
But apparently it works for you 🙂
I ran your hpfix.exe patch for my K850 printer, and though it found and modified the driver file, it did not change “SET TIMESTAMP” to “SET TIMESTAMX” as in your notes…it changed another byte in a very different location. Thankfully, your [R]estore option worked to put things back the way they were. Then I used a binary editor on the same driver file (Hpz3r42i.dll), and manually changed “@PJL SET TIMESTAMP” to “@PJL SET TIMESTAMX” as in your notes, restarted, and now it works fine — no more ink expiration errors! Thanks!
[HP tech. support & mgmt. was absolutely a waste of time on this — no respect for even good customers. Will avoid all HP in future.]
Excellent! This works great for HP Business Inkjet 2800. The Patch modified the file hpz6r043.dll.
Works great on my HP Business Inkjet 2800.
I had to do the patch manually though because of the file protection system of Windows7
The modified file is: hpz5r3zk.dll
Thanks!!!
Works great on my HP Inkjet 1200! Took me 2 days to find this solution.
Thanks!
Hello,
I ran the HP fixer but as sam as JW modified something but did not work
Could you please tell me where is
your [R]estore option worked to put things back the way they were?
Many thanks,
Claudia
CLauia: Just run the patcher again and it will offer the restore-option.
Thank you!
HP Business Deskjet 2800 now running perfectly with so-called expired print cartridge
Hello Dose
My HP2800DTN with the HP2800PS Driver works with your Patch now perfekt.
But i can’t Patch the HB2800 PCL6 Driver with is intalled in Windows XP.
Can you help me??
Thanks Max from Swiss
Toll!
HP2300 druckt wieder, Patronen waren abgelaufen aber noch gut.
Danke!
Hi, I’ve tried this and it worked perfectly on my K5400. Thanks a lot.
But unfortunately, Apple Mac OSX still doesn’t work. Is there a way to apply the patch on OSX?
Thanks again.
I’ve tried to share the printer to OSX from Windows computer, but still doesn’t work.
Thanks for this great patch fix 🙂
I run XP sp3 in Cz language and the patch didn’t work but when I changed it to English and run as administrator the patch worked!
The same trick works with Windows 7
I use a HP business inkjet 2800dtn forgot to mention in above post.
I get ink from 123INK and just had a problem. Ran patch and works fine for me.
HP business Inkjet 2300
HP Business Inkjet 1000:
Es scheint als würde der Drucker bei jedem Auftrag das aktuelle Datum ans System anpassen. Das bedeutet, bevor man patcht, muss man zuvor einmal mit zurückgestelltem Datum drucken… Dann klappts allerdings! Die Datei, die es zu editieren gilt ist hier: hpwtvip0.dll
Danke für den Tip, hat mir jetzt doch noch Zeit erspart…
Gruß, Flo
You can search for SET TIMESTAMP text to find out which dll is setting that. Then use Hex editor like (Hex Editor XVI32) and change text TIMESTAMP to something else like ZEROSTAMP. It works every time because printer does not understand the command and it is ignorring it 😉
Thanks for the keyword. I have successfully used this on HP OfficeJet Pro K5400dn.
I am running Windows 7 Home edition 64 bit and the Patch couldn’t find anything to change. Are they in a diferent folder?
Thanks
Forgot to mention I have a HP Business Inkjet 2800 dtn
Wayne: Maybe they are in Windows\system32\spool\DRIVERS\x64, but I don’t know as I don’t have any 64bit OS.
Super- funktioniert. Bin begeistert Danke!!!!!
Wonderful! Works perfectly on my hp 2800 dtn. Win XP
Einen GANZ HERZLICHEN DANK an den Autor! HP BIJ 1000 hat es sich nach dem Patch anders überlegt. Fühl dich geknuddelt!
HPFIX Works on HP K8600.
Wonderful!
Manual patch (changigng word TIMESTAMP with a hex editor) works on HP Business Inkjet 2300. File to patch is hpz6r2i0.dll. Thank you.
Works great on k8600 pro. Thanks.
HP Business Inkjet 2800
Bin dankbar & begeistert!
Hatte erst Angst wegen Gefahr von Viren Trojanern etc. im Patch. Habe alles wie in Beschreibung durchgeführt und nun funktioniert meine fast volle aber “zeitabgelaufene” Druckpatrone schwarz wieder tadelos.
Start Patch dann p wählen alles andere läuft automatisch…
The patch worked for my HP Officejet Pro K8600.
It patched hpz3r5k2.dll
After the patch with deden addon, I printed a short Notepad txt file but directed the output to a file called TRYIT.PRN instead of to the K8600. The TRYIT file was then analysed using a PRN analyser with the following results:
For those who go thru the below analysis will see that the embedded PML codes ( 3 places ) are all SET Requests and are type 1.1.2.18 and 1.1.2.17 (deden’s deletion) and 1.4.1.4.1.6
The dotted identifiers (OID’s) are part of the printers MIB. But I am unable to find any reference to these OID’s. THEY ARE HP PRIVATE.
Can anyone offer explanation for these three OID’s ??? Thanks
PRN ANALYSIS
—————-
000004b0 PCL Simple E Printer Reset
000004b2 PCL Parameterised %-12345X Universal Exit Language (UEL)
Comment Switch language to PJL
000004bb PJL Command @PJL SET STRINGCODESET=UTF8
000004d7 PJL Command @PJL JOB NAME=”PRINTPJL.BAT – Notepad”
*** Warning *** Following PJL command name not terminated by space or tab character:
000004fe PJL Command @PJL COMMENT =”HP Officejet Pro K8600 Series (61.72.244.0); Mic
rosoft Windows XP 5.1.2600.1; Unidrv 0.3.6001.2211
6″
*** Warning *** Following PJL command name not terminated by space or tab character:
00000571 PJL Command @PJL COMMENT =”Username: ROGER; App Filename: PRINTPJL.BAT – No
tepad; 4-13-2014″
000005c1 PJL Command @PJL SET JOBATTR=”JobAcct1=ROGER”
000005e3 PJL Command @PJL SET JOBATTR=”JobAcct2=HULK”
00000604 PJL Command @PJL SET JOBATTR=”JobAcct3=HULK”
00000625 PJL Command @PJL SET JOBATTR=”JobAcct4=20140413072617″
00000650 PJL Command @PJL SET JOBATTR=”JobAcct5=8e3e5249-cc94-4ba1-ab03-3a53b33
c080e”
00000691 PJL Command @PJL SET TIMESTAMX=”20140413072617″
My note here, the driver patch did its thing on TIMESTAMP
000006b5 PJL Command @PJL SET USERNAME=”ROGER”
000006cf PJL Command @PJL USAGE = EIGN,60ac,d414,00,20,01,01
000006f8 PJL Command @PJL SET COUNTRY CODE=US
00000711 PJL Command @PJL SET LANG=en
00000722 PJL Command @PJL SET MINIMIZEBOTTOMMARGIN=OFF
00000744 PJL Command @PJL ENTER LANGUAGE=PCL3GUI
Comment Switch language to PCL3GUI
00000761 PCL Simple E Printer Reset
00000763 PCL Parameterised &b14W Configuration (I/O) (data length = 14)
00000769 PCL Binary [ 14 bytes ]
>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Comment Start analysis of embedded PML string
Comment of size 14 bytes
01:00000769 PML Intro 0x504d4c20 PML
01:0000076d PML Request 0x04 SetRequest
01:0000076e PML Data Type/Length 0x0004 Object Identifier / 4
01:00000770 Value 0x01010212 1.1.2.18
01:00000774 PML Data Type/Length 0x0401 Enumeration / 1
01:00000776 Value 0x02 2
Comment End analysis of embedded PML string
Comment of size 14 bytes
<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
00000777 Data
00000778 PCL Parameterised &b20W Configuration (I/O) (data length = 20)
0000077e PCL Binary [ 20 bytes ]
>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Comment Start analysis of embedded PML string
Comment of size 20 bytes
01:0000077e PML Intro 0x504d4c20 PML
01:00000782 PML Request 0x58 *** Unknown tag ***
01:00000783 PML Data Type/Length 0x5858 *** Unknown tag *** / 88
*** Warning *** Structure suspect
My note here. This is as a result of deden’s XXXXXXXXX addon. The analyzer sees it as defective code.
Comment End analysis of embedded PML string
Comment of size 20 bytes
<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
00000792 Data 0071A11
0000079b PCL Parameterised *o5W Driver Configuration (data length = 5)
000007a0 PCL Binary [ 5 bytes ]
000007a5 PCL Parameterised &b16W Configuration (I/O) (data length = 16)
000007ab PCL Binary [ 16 bytes ]
>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Comment Start analysis of embedded PML string
Comment of size 16 bytes
01:000007ab PML Intro 0x504d4c20 PML
01:000007af PML Request 0x04 SetRequest
01:000007b0 PML Data Type/Length 0x0006 Object Identifier / 6
01:000007b2 Value 0x01040104 1.4.1.4
01:000007b6 0x0106 .1.6
01:000007b8 PML Data Type/Length 0x0801 Signed Integer / 1
01:000007ba Value 0x00 0
Comment End analysis of embedded PML string
Comment of size 16 bytes
<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
000007bb PCL Parameterised &l0S Simplex/Duplex: Simplex
000007c0 PCL Parameterised *o5W Driver Configuration (data length = 5)
000007c5 PCL Binary [ 5 bytes ]
000007ca PCL Parameterised *r4800S Raster Width: Source (4800 pixels)
000007d2 PCL Parameterised &l0M Media Type: Plain Paper
000007d7 PCL Parameterised *o5W Driver Configuration (data length = 5)
000007dc PCL Binary [ 5 bytes ]
000007e1 PCL Parameterised &l1H Paper Source: id 1 is Printer Dependent
000007e6 PCL Parameterised &l2A Page Size: Letter
000007eb PCL Parameterised &l0E Top Margin (0 lines)
000007f0 PCL Parameterised &l0L Perforation Skip: Disable
000007f5 PCL Parameterised &u600D Unit-of-Measure (600 PCL units per inch)
000007fc PCL Parameterised *o-1M Print Quality: Draft
00000802 PCL Parameterised &l-2H Paper Source: id -2 is Printer Dependent
00000808 PCL Parameterised &l0O Orientation: Portrait
didn`t find anything to patch, sorry
habe einen 2800 und finde in keiner hp datei
den schlüssel timestamp ???
zvonko: Lädt man von HP den PCL 6-Treiber für diesen Drucker, so findet man den String in der Datei hpz6r043.dll
Does anyone here know if there are still inkjet printers without this limitation? We need a new printer and just won’t buy a HP or other brands that work with cartidges with expiration dates.
Thank you. It worked for me. I have an HP business inkjet 2800. For windows 10, I used the driver file bi2800_pcl5_x64.exe and I used your patch hpfix.exe to get rid of the “ink cartridge expired” message. Thanks.
Thanks, this utility enabled an hp business inkjet 1100 to work with both xp & an xp POS os system, for which there are only HP drivers . Reluctant to buy another HP inkjet after this experience – full original date expired carts.
HPFIX.EXE and XP
Doesn’t work unless …. evil grin
You change hpz5r043.dll that is located in the main and subdirectories under
/windows/system32/spool/drivers/w32x86
and locate the expression TIMESTAMP. Change it to TIMESTAMX and voila,
no more nagging “cartridges expired” on the printer display.
Side note:
The 3 versions of hpz5r043.dll are identical, nevertheless each has to be modified.
Their use depends on the choice of printer emulation you make during driver installation (PCL5/PCL6/PS)
Trackbacks