During development of a printer driver what appears to be a bug with Vista
spooler (client-side) caching of printer Bidirectional data was discovered.
I have a sample application which demonstrates the problem. Sharing a
printer from Vista to XP works fine, but sharing a printer from XP to Vista
experiences the problem.
The problem is that calling DeletePrinterData then GetPrinterData on the
client side results in a error code 2 (file not found). What should occur
however is that the client side spooler should RpcGetPrinterData to the
server side spooler and the server side perform the GetPrinterDataFromPort
call to the server side Language Monitor. It appears that the ChangeId (see
the MS-RPRN spec) has not been invalidated on the client side when the
registry key deletion occurs such that the next time GetPrinterData is called
the client side thinks that nothing changed on the server side and thus it
does not need to call the RpcGetPrinterData to get the data from the server
side.
I do not know if the same issue exists in Windows 7 or 2008 Server or not.
|