http://bugs.winehq.org/show_bug.cgi?id=59783 Bug ID: 59783 Summary: WordPerfect Office X3 (and Office 12): PerfectScript macros silently no-op; pfbc130.pfc!DllGetClassObject returns CLASS_E_CLASSNOTAVAILABLE Product: Wine Version: 9.0 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@list.winehq.org Reporter: em36@columbia.edu Distribution: --- Created attachment 80996 --> http://bugs.winehq.org/attachment.cgi?id=80996 Log file from the attempt to run a WP X3 macro. NB: I am running this under Sikuragur, so the Wine version is wine-9.0 (SikarugirCX 24.0.7) -------- Playing any PerfectScript .wcm macro in WordPerfect (the macro engine is ps130.exe in X3, ps120.exe in Office 12) silently no-ops. The macro engine process is spawned and connects to wpwin via DDE successfully, but a single CoCreateInstance call required to dispatch the macro fails, and WordPerfect then abandons the operation without any user-visible message. This has been confirmed on both: - WordPerfect Office X3 (PerfectScript engine v6), macOS via Sikarugir (a Wineskin-based wrapper) - WordPerfect Office 12 (PerfectScript engine v5), vanilla Wine on Linux Trying a newer Wine engine inside Sikarugir did not change the behavior. Reproducer ---------- 1. Install WordPerfect Office X3 (or Office 12) into a Wine prefix. 2. Launch wpwin13.exe (X3) or wpwin12.exe (Office 12). 3. Tools -> Macro -> Play, choose any supplied .wcm (e.g. EXPNDALL.WCM from ...\Languages\EN\Macros\WPWin\), click Open. 4. Expected: the macro runs. 5. Observed: nothing visible happens. The macro engine launches in the background, connects via DDE, but the macro never executes. What the log shows ------------------ With WINEDEBUG=+module,+loaddll,+process,+ole,+dde,+ddeml: (a) ps130.exe launches successfully as a child of wpwin13.exe: trace:process:CreateProcessInternalW app "C:\Program Files (x86)\WordPerfect Office X3\Programs\ps130.exe" cmdline "...\ps130.exe /# /l-EN" trace:process:NtCreateUserProcess ... ps130.exe ... pid 0134 tid 0138 trace:loaddll:build_module Loaded ...\ps130.exe at 00400000: native (b) WordPerfect and PerfectScript establish DDE conversations: trace:ddeml:WDML_MakeHszFromAtom c0ec => L"WPWin13_Macros" trace:ddeml:WDML_MakeHszFromAtom c0ee => L"WPWin" trace:ddeml:WDML_InvokeCallback ... (callbacks fire on both sides) (c) WordPerfect attempts CoCreateInstance on the CLSID required to dispatch the macro: trace:ole:CoCreateInstance {c0e10002-0031-0006-c0e1-c0e1c0e1c0e1}, 00000000, 0x1 (CLSCTX_INPROC_SERVER), IID_IUnknown trace:ole:apartment_getclassobject added new loaded dll "C:\Program Files (x86)\WordPerfect Office X3\Programs\pfbc130.pfc" err:ole:apartment_getclassobject DllGetClassObject returned error 0x80040111 for dll "...\pfbc130.pfc" err:ole:com_get_class_object no class object {c0e10002-0031-0006-c0e1-c0e1c0e1c0e1} could be created for context 0x1 0x80040111 == CLASS_E_CLASSNOTAVAILABLE, returned by pfbc130.pfc's own DllGetClassObject. Wine is not the proximate cause -- it correctly locates and loads the registered server -- but the server's own code refuses to hand back a class factory. (d) Other CoCreateInstance calls in the same session SUCCEED: {c0e10001-0006-0006-c0e1-c0e1c0e1c0e1} -> ok {c0e10001-0009-0006-c0e1-c0e1c0e1c0e1} -> ok {c0e10004-0001-0006-c0e1-c0e1c0e1c0e1} -> ok Only -0031- fails. This is one specific class in the PerfectFit framework, not a generic load problem. (e) Immediately before DllGetClassObject is called, pfbc130.pfc's DllMain(PROCESS_ATTACH) issues two consecutive anti-debug probes: trace:process:NtQueryInformationProcess (0xffffffffffffffff, 0x0c, ...) trace:process:NtQueryInformationProcess (0xffffffffffffffff, 0x0c, ...) ProcessInformationClass 0x0c is ProcessDebugPort. PerfectFit was Corel's anti-tamper / licensing framework. The probe result is plausibly cached as a flag that gates the class factory for protected CLSIDs. This is a hypothesis -- confirming it requires stepping pfbc130.pfc!DllGetClassObject in winedbg. (f) Side note (probably not the root cause, but worth fixing): Wine's DDEML cannot handle Corel's private DDE clipboard format 0xc0ea used by the wpwin <-> ps130 conversation: fixme:ddeml:WDML_Global2DataHandle Unsupported format (ffffc0ea) for data ..., passing raw information fixme:ddeml:WDML_DataHandle2Global Unsupported format (c0ea) for data ..., passing raw information What this is NOT ---------------- Things ruled out by investigation: - COM registration: the registry has full and correct entries for every PerfectFit CLSID, ProgID, Interface/TypeLib, ProxyStubClsid, and PFBC130/PFOB130/PFQS130/PFSE130/PFDT130/PFVM130 component server, written by Corel's installer. - Wrong DLL registered: pfbc130.pfc *does* contain the failing CLSID in its binary (verified by 16-byte struct grep), along with 42 other CLSIDs in the same Corel-tail family. The registry maps the failing CLSID to the right DLL. - DDE broken: DDE conversations between wpwin and ps130 establish correctly and exchange messages. The Corel-private 0xc0ea format fixme is real but is hit during the conversation, not at setup. - Missing dependency: pfbc130.pfc's DllMain(PROCESS_ATTACH) returns 1 (success). All other DLLs in the dependency chain (MSVCRT, KERNEL32, USER32, GDI32, ADVAPI32, SHELL32, COMCTL32, ole32, OLEAUT32, ThemeManager, CRLUTL114, MFC42) load fine. - DllRegisterServer not run: the prefix has the registration; that's not the issue. Attached -------- wp-x3-macro.log.gz -- full WINEDEBUG=+module,+loaddll,+process,+ole,+dde,+ddeml capture of one wpwin13.exe session in which EXPNDALL.WCM was triggered via Tools->Macro->Play. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.