diff --git a/dll/win32/rpcrt4/msvc.S b/dll/win32/rpcrt4/msvc.S index ca7d77430aa..fca5ee5e612 100644 --- a/dll/win32/rpcrt4/msvc.S +++ b/dll/win32/rpcrt4/msvc.S @@ -13,24 +13,25 @@ EXTERN _ndr_client_call:PROC PUBLIC _call_stubless_func _call_stubless_func: - mov ecx,[esp+4] /* This Pointer */ - mov ecx,[ecx] /* This->lpVtbl */ - mov ecx,[ecx-8] /* MIDL_STUBLESS_PROXY_INFO */ - mov edx,[ecx+8] /* Info->FormatStringOffset */ - mov edx,[edx+eax*2] /* FormatStringOffset[index] */ - and edx, 0000FFFFh - add edx,[ecx+4] /* info->ProcFormatString + offset */ - mov eax, [edx+8] /* arguments size */ - and eax, 0000FFFFh + mov ecx, [esp+4] /* This Pointer */ + mov ecx, [ecx] /* This->lpVtbl */ + mov ecx, [ecx-8] /* MIDL_STUBLESS_PROXY_INFO */ + mov edx, [ecx+8] /* Info->FormatStringOffset */ + movzx edx, word ptr [edx+eax*2] /* FormatStringOffset[index] */ + add edx, [ecx+4] /* info->ProcFormatString + offset */ + movzx eax, byte ptr [edx+1] /* Oi_flags */ + and eax, 8 /* Oi_HAS_RPCFLAGS */ + shr eax, 1 + movzx eax, word ptr [edx+eax+4] /* arguments size */ push eax - lea eax, [esp+8] /* &This */ + lea eax, [esp+8] /* &This */ push eax - push edx /* format string */ - push [ecx] /* info->pstubdesc */ + push edx /* format string */ + push [ecx] /* info->pstubdesc */ call _ndr_client_call lea esp, [esp+12] - pop edx /* arguments size */ - mov ecx, [esp] /* return address */ + pop edx /* arguments size */ + mov ecx, [esp] /* return address */ add esp, edx jmp ecx