[Bug 38756] FutureMark SystemInformation diagnostics (.NET 4.0 app) crashes when clicking 'connect' (COM support for 'new' moniker and ' BIND_OPTS3' missing)

wine-bugs at winehq.org wine-bugs at winehq.org
Mon Mar 18 09:03:36 CDT 2019


https://bugs.winehq.org/show_bug.cgi?id=38756

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                URL|http://www.gamershell.com/n |https://web.archive.org/web
                   |ews_116756.html             |/20190318134120/http://ftp.
                   |                            |airnet.ne.jp/pub/pc/forest/
                   |                            |p/pcmark/10493/PCMark_7_v10
                   |                            |4_installer.zip
          Component|-unknown                    |ole32

--- Comment #1 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

revisiting, still present.

Adding stable link to snapshot via Internet archive.

https://web.archive.org/web/20190318134120/http://ftp.airnet.ne.jp/pub/pc/forest/p/pcmark/10493/PCMark_7_v104_installer.zip

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/Futuremark/Futuremark SystemInfo

$ WINEDEBUG=+seh,+relay,+ole,+variant wine ./FMSIDiag.exe >>log.txt 2>&1
...
004b:Call ole32.CoGetObject(01050ff8
L"new:{f9c82199-b002-41b4-8b00-0f1eca89425f}",05b2e31c,05b2e398,05b2e314)
ret=05052408
004b:trace:ole:CreateBindCtx (0,0x5b2e244)
004b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000034) ret=7e24277c
004b:Ret  ntdll.RtlAllocateHeap() retval=0588a8e8 ret=7e24277c
004b:trace:ole:BindCtxImpl_Construct (0x588a8e8)
004b:Call KERNEL32.GetThreadLocale() ret=7e242670
004b:Ret  KERNEL32.GetThreadLocale() retval=00000409 ret=7e242670
004b:trace:ole:BindCtxImpl_QueryInterface (0x588a8e8
{0000000e-0000-0000-c000-000000000046} 0x5b2e244)
004b:trace:ole:BindCtxImpl_AddRef (0x588a8e8)
004b:trace:ole:BindCtxImpl_SetBindOptions (0x588a8e8,0x5b2e31c)
004b:warn:ole:BindCtxImpl_SetBindOptions invalid size
004b:trace:ole:BindCtxImpl_Release (0x588a8e8)
004b:trace:ole:BindCtxImpl_ReleaseBoundObjects (0x588a8e8)
004b:trace:ole:BindCtxImpl_Destroy (0x588a8e8)
004b:Call ntdll.RtlFreeHeap(00110000,00000000,00000000) ret=7e2416ad
004b:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=7e2416ad
004b:Call ntdll.RtlFreeHeap(00110000,00000000,0588a8e8) ret=7e2416cd
004b:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=7e2416cd
004b:Ret  ole32.CoGetObject() retval=80070057 ret=05052408 
...
--- snip ---

Also interesting (Delphi based test app source snippet):

http://elists.org/pipermail/delphi/2006-May/028508.html

--- quote ---
Hello,

I wonder whether anybody already managed to run an elevated instance
of a COM object as mentioned in msdn article below, paragraph
"Shield Implementation and APIs"?

http://msdn.microsoft.com/windowsvista/default.aspx?pull=/library/en-us/dnlong/html/AccProtVista.asp

CoCreateInstanceAsAdmin() is described here:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/html/1595ebb8-65af-4609-b3e7-a21209e64391.asp

I get it working only when I'm logged in as Admin and the 'consent prompt'
pops up. As a limited User the Elevation UI (login prompt) is displayed,
login succeeds, however my method ShowMessage() isn't shown/executed, why??
Since I'm not familar with COM I may miss something simple, any help is
appreciated.

Arno Garrels


///////////////////////////////////////

uses
    Windows, Sysutils, ActiveX;

type
    PBindOpts3 = ^TBindOpts3;
    {$EXTERNALSYM tagBIND_OPTS3}
    tagBIND_OPTS3 = record
        cbStruct: DWORD;
        grfFlags: DWORD;
        grfMode: DWORD;
        dwTickCountDeadline: DWORD;
        dwTrackFlags: DWORD;
        dwClassContext: DWORD;
        locale: LCID;
        pServerInfo: Pointer; //DUMMY!! //COSERVERINFO * ;
        hwnd: HWND;
    end;
    TBindOpts3 = tagBIND_OPTS3;
    {$EXTERNALSYM BIND_OPTS3}
    BIND_OPTS3 = TBindOpts3;

function CoCreateInstanceAsAdmin(WndHandle: HWND; clsid: TCLSID;
                                 iid: TIID; out ppv): HRESULT;

implementation

function NewCoGetObject(pazName: PWideChar; pBindOptions: PBindOpts3;
         const iid: TIID; out ppv): HResult; stdcall; external 'ole32.dll'
         name 'CoGetObject';

function CoCreateInstanceAsAdmin(WndHandle: HWND; clsid: TCLSID;
    iid: TIID; out ppv): HRESULT;
var
    Bo      : TBindOpts3;
    Moniker : PWideChar;
begin
    Moniker := PWideChar(WideString('Elevation:Administrator!new:' +
                                    GuidToString(clsid)));
    FillChar(Bo, SizeOf(Bo), #0);
    Bo.hwnd           := WndHandle;
    Bo.cbStruct       := SizeOf(Bo);
    Bo.dwClassContext := CLSCTX_LOCAL_SERVER;
    Result            := NewCoGetObject(Moniker, @Bo, iid, ppv);
end;
////////////////////////////////////////////////


procedure TForm1.Button1Click(Sender: TObject);
var
    MyComObj : IDisplaySomething;
begin
    OleCheck(CoCreateInstanceAsAdmin(Self.Handle,
                                     Class_DisplaySomething,
                                     IDisplaySomething,
                                     MyComObj));
    MyComObj.Display('OK!');
end;
--- quote ---

$ sha1sum PCMark_7_v104_installer.zip 
d3620c2b336dbffa5a93c381fe03f252a874416a6  PCMark_7_v104_installer.zip

$ du -sh PCMark_7_v104_installer.zip 
304M    PCMark_7_v104_installer.zip

$ wine --version
wine-4.4

Regards

-- 
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.


More information about the wine-bugs mailing list