[Samba] Printer driver interface different

Martin Zielinski mz at seh.de
Tue Aug 12 13:45:21 GMT 2008


Gerald (Jerry) Carter schrieb:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Matthew Forrest wrote:
>>> Does this driver contain a file names UNIDRV.DLL ?  It's probably a
>>> difference in behavior between EMF and RAW printing.
>>>
>> It doesn't contain UNIDRV.DLL
>> It looks like it uses the generic windows PS driver PSCRIPT5.DLL with a
>> bunch of extras - for the UI?
>> The only difference between rpcclient -c 'enumdrivers 3' on samba vs
>> win2k is that the win2k driver has a Monitorname: [RICOH Language
>> Monitor2] entry.
>>
>> Printer Driver Info 3:
>>     Version: [3]
>>     Driver Name: [RICOH Aficio Color5560 PS]
>>     Architecture: [Windows NT x86]
>>     Driver Path: [\\\\LOCALHOST\print$\W32X86\3\PSCRIPT5.DLL]
>>     Datafile: [\\\\LOCALHOST\print$\W32X86\3\RIC55603.PPD]
>>     Configfile: [\\\\LOCALHOST\print$\W32X86\3\PS5UI.DLL]
>>     Helpfile: [\\\\LOCALHOST\print$\W32X86\3\PSCRIPT.HLP]
> 
> Matthew,
> 
> Set the print processor to RAW on the Windows print server
> and see if the appearance looks the same.
> 
[...]

Matthew,

The reason for the gui that is different from the local installation is 
a missing registry value.
It's: "PrinterDriverData\DocUiHideFlags" REG_DWORD 000001

I didn't succeed in copying the settings via printui.dll, but I wrote a 
little program to set the missing value. I think, this list cuts off the 
attachments, so I put it inline. If you cannot compile it, I can send 
you a binary as well.

I can't test, if the printer will work as expected, cause I have no 
ricoh printer - but the GUI looks the same as the local installation.

Greets,
Martin

--------------------
main.cxx:

#include <windows.h>
#include <stdio.h>

int main (int argc, char *argv[])
{
	if (!argv[1] || *argv[1] == '/') {
	printf ("Usage:   ricoh <printer>\nExample: ricoh 
\\\\MYSERVER\\MYPRINTER\n");
		exit (0);
	}

	HANDLE hPrinter;
	PRINTER_DEFAULTS Default = { 0, 0, PRINTER_ACCESS_ADMINISTER };
	DWORD on = 1;

	if (!OpenPrinter(argv[1], &hPrinter, &Default)) {
		printf ("OpenPrinter %s failed\n", argv[1]);
		exit (1);
	}

	BOOL rc =SetPrinterDataEx( hPrinter, "PrinterDriverData", 
"DocUiHideFlags", REG_DWORD, (LPBYTE)&on, 4 ) ;
	ClosePrinter (hPrinter);

	printf ("Setting printer data to %s: %s\n", argv[1], rc?"ERROR":"SUCCESS");

	return rc;
}
--------

Makefile:
CXX      =  cl
LINK	 =	link
CXXFLAGS = /nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_CONSOLE" /D "_MBCS" /YX  /FD /GZ /c /D_WIN32_WINNT=0x0500
LFLAGS =  /nologo /subsystem:console /incremental:yes 
/pdb:"nwprinter.pdb" /debug /machine:I386 /out:"ricoh.exe" /pdbtype:sept
LIBS = kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib version.lib

.SUFFIXES: .cxx

{.}.cxx{}.obj::
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo @<<
	$<
<<

{src}.cxx{}.obj::
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo @<<
	$<
<<

TARGET = ricoh.exe
OBJECTS = main.obj

$(TARGET) : $(OBJECTS)
     $(LINK) @<<
   $(LFLAGS) $(OBJECTS) $(LIBS)
<<

all: $(TARGET)
main.obj: main.cxx

-- 
Martin Zielinski 			mz at seh.de		
Softwareentwicklung			T +49 (0)521 94226 76	

SEH Computertechnik GmbH 		www.seh.de



More information about the samba mailing list