The following tables show the steps taken by the RPC run-time library to dispatch a remote procedure call to a server-manager routine.
Assume a simple case where the server registers the default manager EPV, as described in the following tables:
Interface registry table
Interface UUID | Manager type UUID | Entry-point vector |
---|---|---|
uuid1 | Nil | Default EPV |
Object registry table
Object UUID | Object type |
---|---|
Nil | Nil |
(Any other object UUID) | Nil |
Mapping the binding handle to an entry-point vector
Interface UUID (from client binding handle) | Object UUID (from client binding handle) | Object type (from object registry table) | Manager EPV (from interface registry table) |
---|---|---|---|
uuid1 | Nil | Nil | Default EPV |
Same as above | uuidA | Nil | Default EPV |
The following steps describe the actions taken by the RPC server run-time library:
See the following function reference entries for discussions of how an object UUID is set into a binding handle:
If the server did not register the interface using RpcServerRegisterIf*, the remote procedure call returns to the caller with an RPC_S_UNKNOWN_IF status code.
Assume that the server offers multiple interfaces and multiple implementations of each interface, as described in the following tables:
Interface registry table
Interface UUID | Manager type UUID | Entry-point vector |
---|---|---|
uuid1 | Nil | epv1 |
uuid1 | uuid3 | epv4 |
uuid2 | uuid4 | epv2 |
uuid2 | uuid7 | epv3 |
Object registry table
Object UUID | Object type |
---|---|
uuidA | uuid3 |
uuidB | uuid7 |
uuidC | uuid7 |
uuidD | uuid3 |
uuidE | uuid3 |
uuidF | uuid8 |
Nil | Nil |
(Any other UUID) | Nil |
Mapping the binding handle to an entry-point vector
Interface UUID (from client binding handle) | Object UUID (from client binding handle) | Object type (from object registry table) |
Manager EPV (from interface registry table) |
---|---|---|---|
uuid1 | Nil | Nil | epv1 |
uuid1 | uuidA | uuid3 | epv4 |
uuid1 | uuidD | uuid3 | epv4 |
uuid1 | uuidE | uuid3 | epv4 |
uuid2 | uuidB | uuid7 | epv3 |
uuid2 | uuidC | uuid7 | epv3 |
The following steps describe the actions taken by the server's run-time library as shown in the preceding tables when called by a client with interface UUID uuid2 and object UUID uuidC:
In this example, the server calls the RpcObjectSetType routine six times.
The routines in epv2 will never be executed because the server has not called the RpcObjectSetType routine to add any objects with a type UUID of uuid4 to the object registry table.
A remote procedure call with interface UUID uuid2 and object UUID uuidF returns to the caller with an RPC_S_UNKNOWN_MGR_TYPE status code because the server did not call the RpcServerRegisterIf* routine to register the interface with a manager type of uuid8.
Value | Meaning |
---|---|
RPC_S_OK | Success |
RPC_S_TYPE_ALREADY_REGISTERED | Type UUID already registered |
RpcBindingFromStringBinding, RpcBindingSetObject, RpcNsBindingExport, RpcNsBindingImportBegin, RpcNsBindingLookupBegin, RpcObjectSetType, RpcServerRegisterIfEx, RpcServerRegisterIf, RpcServerUnregisterIf