Just to clarify what the JobID is used for in Windows.
When a job is created in the spooler it is assigned a unique number that
identifies it for its life time. This ID is returned when the job is
created (depending on the API you use). It is safe to persist it.
All APIs that get or set job attributes or state require this ID.
It is also returned when you enumerate the jobs in a queue.
Without this ID it will be very complex to build the client side so that
it can be slotted into the Windows architecture. The way this would be
done is via a 'print provider'. This is the plug-in component that
services all the client-side Win32 print management APIs (EnumJobs,
GetJob, Setjob, etc.) - the signature of these APIs is defined and
imuttable. If we are unable to do this then none of the existing clients
of these APIs will work, this includes the Windows shell itself.