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.
System programmer
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
Trackbacks