There is something weird with passing parameters to COM objects via interfaces.
Code: Select all
HRESULT AddToSnapshotSet(
[in] VSS_PWSZ pwszVolumeName,
[in] VSS_ID ProviderId,
[out] VSS_ID *pidSnapshot
);
Code: Select all
AddToSnapshotSet(pwszVolumeName, ProviderId_Part1.q, ProviderId_Part2.q, *pidSnapshot)
from \Windows7\Source\vscopy.asm
Code: Select all
coinvoke pBackupComponent,IVssBackupComponents,AddToSnapshotSet,\
buffer,0,0,0,0,pSnapShotId
Code: Select all
MACRO coinvoke
MARG ppv :REQ,interface :REQ,member :REQ,params :VARARG
FOR arg IN: params REV DO
push arg
ENDM
mov eax,[ppv]
push eax
mov eax,DWORD PTR [eax]
call [eax+&interface.&member]
ENDM
And why does it works as expected for PB x64?