93 lines
3.4 KiB
C
93 lines
3.4 KiB
C
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
|
|
/****************************************************************************
|
|
Microsoft RPC
|
|
|
|
Cluuid Example
|
|
|
|
FILE: cluuidp.c
|
|
|
|
PURPOSE: Remote procedures that are linked with the server
|
|
side of RPC distributed application
|
|
|
|
FUNCTIONS: HelloProc() - prints "hello, world" or other string
|
|
HelloProc2() - prints string backwards
|
|
|
|
COMMENTS: This sample program demonstrates how to supply
|
|
multiple implementations of the remote procedure
|
|
specified in the interface. It also demonstrates
|
|
how the client selects among the implementations
|
|
by providing a client object uuid.
|
|
|
|
The server calls RpcObjectSetType to associate a
|
|
client object uuid with the object uuid in the
|
|
Object Registry Table. The server initializes a
|
|
manager entry point vector (manager epv) and
|
|
then calls RpcRegisterIf to associate the interface
|
|
uuid and the object uuid with the manager epv in the
|
|
Interface Registry Table.
|
|
|
|
When the client makes a remote procedure call,
|
|
the client object uuid is mapped to the object uuid
|
|
in the Object Registry Table. The resulting
|
|
object uuid and the interface uuid are mapped to
|
|
a manager entry point vector in the Interface
|
|
Registry Table.
|
|
|
|
By default, in this example, the server registers
|
|
two implementations of the "hello, world" function
|
|
HelloProc and HelloProc2. The HelloProc2
|
|
implementation is associated with the object uuid
|
|
"11111111-1111-1111-1111-111111111111". When
|
|
the client makes a procedure call with a null
|
|
uuid, the client's request is mapped to the
|
|
original HelloProc. When the client makes a
|
|
procedure call with the client object uuid
|
|
"11111111-1111-1111-1111-11111111111", the
|
|
client's request is mapped to HelloProc2 (which
|
|
prints the string in reverse).
|
|
|
|
****************************************************************************/
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "cluuid.h" // header file generated by MIDL compiler
|
|
|
|
void HelloProc(IN RPC_BINDING_HANDLE hBinding,unsigned char * pszString)
|
|
{
|
|
printf_s("%s\n", pszString);
|
|
}
|
|
|
|
void HelloProc2(IN RPC_BINDING_HANDLE hBinding,unsigned char * pszString)
|
|
{
|
|
printf_s("%s\n", _strrev(pszString));
|
|
}
|
|
|
|
void Shutdown(IN RPC_BINDING_HANDLE hBinding)
|
|
{
|
|
RPC_STATUS status;
|
|
|
|
printf_s("Calling RpcMgmtStopServerListening\n");
|
|
status = RpcMgmtStopServerListening(NULL);
|
|
printf_s("RpcMgmtStopServerListening returned: 0x%x\n", status);
|
|
if (status) {
|
|
exit(status);
|
|
}
|
|
|
|
printf_s("Calling RpcServerUnregisterIf\n");
|
|
status = RpcServerUnregisterIf(NULL, NULL, FALSE);
|
|
printf_s("RpcServerUnregisterIf returned 0x%x\n", status);
|
|
if (status) {
|
|
exit(status);
|
|
}
|
|
}
|
|
|
|
/* end of file cluuidp.c */
|