http://bugs.winehq.org/show_bug.cgi?id=21987
--- Comment #5 from Anastasius Focht focht@gmx.net 2012-05-06 07:05:21 CDT --- Hello,
after commit: http://source.winehq.org/git/wine.git/commitdiff/0cf0c28d168ffdb084b6a28386c... the installer still shows the message.
--- snip --- 0015:Call winspool.drv.GetPrinterA(00000001,00000008,00d955d0,000000e8,019ee84c) ret=004d562a ... 0015:trace:winspool:GetPrinterW (0x1,8,0xd956c0,232,0x19ee84c) 0015:Call advapi32.RegCreateKeyW(80000002,f7218880 L"System\CurrentControlSet\Control\Print\Printers",019ee438) ret=f71ff906 ... 0015:trace:winspool:GetPrinterW returning 1 needed = 232 0015:trace:winspool:convert_printerinfo_W_to_A (0xd955d0, 0xd956c0, 8, 232, 1) 0015:trace:winspool:convert_printerinfo_W_to_A (8) #0 ... 0015:Call KERNEL32.WideCharToMultiByte(00000000,00000000,00d956c4 L"Adobe PDF",ffffffff,00d957b0,00000020,00000000,00000000) ret=f71fd6b2 0015:Ret KERNEL32.WideCharToMultiByte() retval=0000000a ret=f71fd6b2 ... 0015:Ret winspool.drv.GetPrinterA() retval=00000001 ret=004d562a ... 0015:Call user32.MessageBoxA(00000000,004d9e60 "This Postscript Driver or Windows Platform (Win9x/Me) not supported",004d9ea4 "Setup Devmode",00000010) ret=004d5778 --- snip ---
Debugging that custom action "SetupDeviceMode" reveals it expects private driver data to be returned.
Annotated code snippet from custom action dll (SetupDeviceMode -> CustomizeDevMode):
--- snip --- ... .text:004D55F3 cmp [ebp+var_40], ebx .text:004D55F6 lea eax, [ebp+pcbNeeded] .text:004D55F9 push eax ; pcbNeeded .text:004D55FA push ebx ; cbBuf .text:004D55FB push ebx ; pPrinter .text:004D55FC jnz short loc_4D562E .text:004D55FE push 8 ; Level .text:004D5600 push [ebp+hPrinter] ; hPrinter .text:004D5603 call GetPrinterA ; get required buffer size .text:004D5608 push [ebp+pcbNeeded] ; dwBytes .text:004D560B push 40h ; uFlags .text:004D560D call ds:GlobalAlloc .text:004D5613 mov edi, eax .text:004D5615 lea eax, [ebp+pcbNeeded] .text:004D5618 push eax ; pcbNeeded .text:004D5619 mov [ebp+pPrinter], edi .text:004D561C push [ebp+pcbNeeded] ; cbBuf .text:004D561F push edi ; pPrinter .text:004D5620 push 8 ; Level .text:004D5622 push [ebp+hPrinter] ; hPrinter .text:004D5625 call GetPrinterA ; get level 8 data .text:004D562A mov eax, [edi] .text:004D562C jmp short loc_4D565D ... .text:004D565D movzx edi, word ptr [eax+24h] ; dmSize .text:004D5661 add edi, eax ; offset to private area .text:004D5663 cmp word ptr [eax+22h], 500h ; dmDriverVersion > 0x500 .text:004D5669 mov [ebp+pDevModeInput], eax .text:004D566C jbe _error_driver_os_unsupp .text:004D5672 cmp edi, ebx .text:004D5674 jz _error_driver_os_unsupp .text:004D567A cmp word ptr [edi+96h], 10h ; priv_area+0x96 ?? .text:004D5682 jnz _error_driver_os_unsupp .text:004D5688 cmp dword ptr [edi], 'VIRP' ; priv_area+0: 'PRIV' .text:004D568E jnz _error_driver_os_unsupp --- snip ---
For the "dmDriverVersion" field it expects > 0x500. Next problems are fields in private driver data area. Apparently this isn't handled in registry yet.
There are a couple of FIXME's related to winspool, some of them seem harmless and some might contribute to failures.
--- snip --- 0015:Call winspool.drv.SetPrinterA(00000001,00000002,00d955d0,00000000) ret=004d5407 ... 0015:trace:winspool:SetPrinterW (0x1, 2, 0xd957b8, 0) ... 0015:fixme:winspool:SetPrinterW Unimplemented level 2 ... 0015:Ret winspool.drv.SetPrinterA() retval=00000000 ret=004d5407 ... --- snip ---
Regards