diff --git a/dlls/rpcrt4/ndr_stubless.c b/dlls/rpcrt4/ndr_stubless.c index 346cc594756..cce0840b89b 100644 --- a/dlls/rpcrt4/ndr_stubless.c +++ b/dlls/rpcrt4/ndr_stubless.c @@ -344,7 +344,11 @@ static PFORMAT_STRING client_get_handle( *phBinding = *pStubMsg->StubDesc->IMPLICIT_HANDLE_INFO.pPrimitiveHandle; break; case RPC_FC_CALLBACK_HANDLE: /* implicit callback */ - FIXME("RPC_FC_CALLBACK_HANDLE\n"); + TRACE("RPC_FC_CALLBACK_HANDLE\n"); + /* server calls callback procedures only in response to remote call, and most recent + binding handle is used. Calling back to a client can potentially result in another + callback with different current handle. */ + *phBinding = I_RpcGetCurrentCallHandle(); break; case RPC_FC_AUTO_HANDLE: /* implicit auto handle */ /* strictly speaking, it isn't necessary to set hBinding here diff --git a/dlls/rpcrt4/ndr_stubless.h b/dlls/rpcrt4/ndr_stubless.h index 61bc60682c1..5b0add0d95d 100644 --- a/dlls/rpcrt4/ndr_stubless.h +++ b/dlls/rpcrt4/ndr_stubless.h @@ -35,7 +35,8 @@ typedef struct _NDR_PROC_HEADER * RPC_FC_BIND_PRIMITIVE = 32 - Implicit handle using handle_t created by * calling application * RPC_FC_AUTO_HANDLE = 33 - Automatic handle - * RPC_FC_CALLBACK_HANDLE = 34 - undocumented + * RPC_FC_CALLBACK_HANDLE = 34 - Implicit handle used for a callback: current handle + * from last remote call */ unsigned char handle_type;