Module: wine Branch: master Commit: 31676530c2ec59886c167404467e1eb8840337f5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=31676530c2ec59886c16740446...
Author: Rob Shearman rob@codeweavers.com Date: Mon Jan 7 15:19:57 2008 +0000
rpcrt4: Set the ProcNum of RPC_MESSAGE in NdrClientInitializeNew to include RPC_VALID_FLAGS_BIT.
Mask out RPC_VALID_FLAGS_BIT from ProcNum when it is used to build a packet to send to the server.
---
dlls/rpcrt4/ndr_clientserver.c | 2 +- dlls/rpcrt4/rpc_message.c | 3 ++- dlls/rpcrt4/tests/ndr_marshall.c | 1 - include/rpcdcep.h | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/dlls/rpcrt4/ndr_clientserver.c b/dlls/rpcrt4/ndr_clientserver.c index 809d4cb..8cce9d7 100644 --- a/dlls/rpcrt4/ndr_clientserver.c +++ b/dlls/rpcrt4/ndr_clientserver.c @@ -54,7 +54,7 @@ void WINAPI NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pRpcMessage, pStubMsg, pStubDesc, ProcNum);
pRpcMessage->Handle = NULL; - pRpcMessage->ProcNum = ProcNum; + pRpcMessage->ProcNum = ProcNum | RPC_FLAGS_VALID_BIT; pRpcMessage->RpcInterfaceInformation = pStubDesc->RpcInterfaceInformation; pRpcMessage->RpcFlags = 0; pRpcMessage->DataRepresentation = NDR_LOCAL_DATA_REPRESENTATION; diff --git a/dlls/rpcrt4/rpc_message.c b/dlls/rpcrt4/rpc_message.c index 9f0df05..c7282e7 100644 --- a/dlls/rpcrt4/rpc_message.c +++ b/dlls/rpcrt4/rpc_message.c @@ -1000,7 +1000,8 @@ RPC_STATUS WINAPI I_RpcSend(PRPC_MESSAGE pMsg) if (status != RPC_S_OK) return status;
hdr = RPCRT4_BuildRequestHeader(pMsg->DataRepresentation, - pMsg->BufferLength, pMsg->ProcNum, + pMsg->BufferLength, + pMsg->ProcNum & ~RPC_FLAGS_VALID_BIT, &bind->ObjectUuid); if (!hdr) { diff --git a/dlls/rpcrt4/tests/ndr_marshall.c b/dlls/rpcrt4/tests/ndr_marshall.c index eebed49..c9b8fa9 100644 --- a/dlls/rpcrt4/tests/ndr_marshall.c +++ b/dlls/rpcrt4/tests/ndr_marshall.c @@ -901,7 +901,6 @@ static void test_client_init(void) ok(rpcMsg.Handle == NULL, "rpcMsg.Handle should have been NULL instead of %p\n", rpcMsg.Handle); TEST_POINTER_UNSET(Buffer); ok(rpcMsg.BufferLength == 0xcccccccc, "rpcMsg.BufferLength should have been unset instead of %d\n", rpcMsg.BufferLength); - todo_wine ok(rpcMsg.ProcNum == 0x8001, "rpcMsg.ProcNum should have been 0x8001 instead of 0x%x\n", rpcMsg.ProcNum); TEST_POINTER_UNSET(TransferSyntax); ok(rpcMsg.RpcInterfaceInformation == Object_StubDesc.RpcInterfaceInformation, diff --git a/include/rpcdcep.h b/include/rpcdcep.h index b93c9a6..f0b78c1 100644 --- a/include/rpcdcep.h +++ b/include/rpcdcep.h @@ -48,6 +48,9 @@ typedef struct _RPC_MESSAGE unsigned long RpcFlags; } RPC_MESSAGE, *PRPC_MESSAGE;
+/* or'd with ProcNum */ +#define RPC_FLAGS_VALID_BIT 0x00008000 + #define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *)0xfffff00d)
#define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS 0x00000000