diff --git a/dll/win32/rpcrt4/ndr_marshall.c b/dll/win32/rpcrt4/ndr_marshall.c index ee58b60a552..6356fb9d984 100644 --- a/dll/win32/rpcrt4/ndr_marshall.c +++ b/dll/win32/rpcrt4/ndr_marshall.c @@ -5745,11 +5745,16 @@ static unsigned char *union_arm_marshall(PMIDL_STUB_MESSAGE pStubMsg, unsigned c pStubMsg->Buffer = saved_buffer + 4; } break; + case RPC_FC_IP: + /* must be dereferenced first */ + m(pStubMsg, *(unsigned char **)pMemory, desc); + break; default: m(pStubMsg, pMemory, desc); } } - else FIXME("no marshaller for embedded type %02x\n", *desc); + else if (*desc) + FIXME("no marshaller for embedded type %02x\n", *desc); } return NULL; } @@ -5814,11 +5819,16 @@ static unsigned char *union_arm_unmarshall(PMIDL_STUB_MESSAGE pStubMsg, pStubMsg->Buffer = saved_buffer + 4; } break; + case RPC_FC_IP: + /* must be dereferenced first */ + m(pStubMsg, *(unsigned char ***)ppMemory, desc, fMustAlloc); + break; default: m(pStubMsg, ppMemory, desc, fMustAlloc); } } - else FIXME("no marshaller for embedded type %02x\n", *desc); + else if (*desc) + FIXME("no marshaller for embedded type %02x\n", *desc); } return NULL; } @@ -5868,11 +5878,16 @@ static void union_arm_buffer_size(PMIDL_STUB_MESSAGE pStubMsg, pStubMsg->BufferLength = saved_buffer_length; } break; + case RPC_FC_IP: + /* must be dereferenced first */ + m(pStubMsg, *(unsigned char **)pMemory, desc); + break; default: m(pStubMsg, pMemory, desc); } } - else FIXME("no buffersizer for embedded type %02x\n", *desc); + else if (*desc) + FIXME("no buffersizer for embedded type %02x\n", *desc); } } @@ -5920,7 +5935,8 @@ static ULONG union_arm_memory_size(PMIDL_STUB_MESSAGE pStubMsg, return m(pStubMsg, desc); } } - else FIXME("no marshaller for embedded type %02x\n", *desc); + else if (*desc) + FIXME("no marshaller for embedded type %02x\n", *desc); } TRACE("size %d\n", size); @@ -5955,6 +5971,10 @@ static void union_arm_free(PMIDL_STUB_MESSAGE pStubMsg, case RPC_FC_FP: PointerFree(pStubMsg, *(unsigned char **)pMemory, desc); break; + case RPC_FC_IP: + /* must be dereferenced first */ + m(pStubMsg, *(unsigned char **)pMemory, desc); + break; default: m(pStubMsg, pMemory, desc); } diff --git a/dll/win32/rpcrt4/rpc_server.c b/dll/win32/rpcrt4/rpc_server.c index d1b5d64ecea..91de3b95fa3 100644 --- a/dll/win32/rpcrt4/rpc_server.c +++ b/dll/win32/rpcrt4/rpc_server.c @@ -1220,7 +1220,8 @@ RPC_STATUS WINAPI RpcServerUnregisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid EnterCriticalSection(&server_cs); LIST_FOR_EACH_ENTRY(cif, &server_interfaces, RpcServerInterface, entry) { - if ((!IfSpec || !memcmp(&If->InterfaceId, &cif->If->InterfaceId, sizeof(RPC_SYNTAX_IDENTIFIER))) && + if (((!IfSpec && !(cif->Flags & RPC_IF_AUTOLISTEN)) || + (IfSpec && !memcmp(&If->InterfaceId, &cif->If->InterfaceId, sizeof(RPC_SYNTAX_IDENTIFIER)))) && UuidEqual(MgrTypeUuid, &cif->MgrTypeUuid, &status)) { list_remove(&cif->entry); TRACE("unregistering cif %p\n", cif); diff --git a/media/doc/README.WINE b/media/doc/README.WINE index 4e58c6349ff..32a8639dc3a 100644 --- a/media/doc/README.WINE +++ b/media/doc/README.WINE @@ -160,7 +160,7 @@ reactos/dll/win32/rasapi32 # Synced to WineStaging-3.3 reactos/dll/win32/resutils # Synced to WineStaging-3.3 reactos/dll/win32/riched20 # Synced to WineStaging-3.9 reactos/dll/win32/riched32 # Synced to WineStaging-3.3 -reactos/dll/win32/rpcrt4 # Synced to WineStaging-3.3 +reactos/dll/win32/rpcrt4 # Synced to WineStaging-3.9 reactos/dll/win32/rsabase # Synced to WineStaging-3.3 reactos/dll/win32/rsaenh # Synced to WineStaging-2.9 reactos/dll/win32/sccbase # Synced to WineStaging-3.3