82 lines
2 KiB
C
82 lines
2 KiB
C
|
/********************************************************************/
|
|||
|
/** Copyright(c) 1989 Microsoft Corporation. **/
|
|||
|
/********************************************************************/
|
|||
|
|
|||
|
//***
|
|||
|
//
|
|||
|
// Filename: rpcutil.c
|
|||
|
//
|
|||
|
// Description: Contains RPC utiliry routines.
|
|||
|
//
|
|||
|
// History:
|
|||
|
// May 11,1992. NarenG Created original version.
|
|||
|
//
|
|||
|
#include "client.h"
|
|||
|
|
|||
|
|
|||
|
//**
|
|||
|
//
|
|||
|
// Call: AfpRPCBind
|
|||
|
//
|
|||
|
// Returns: NO_ERROR - success
|
|||
|
// ERROR_NOT_ENOUGH_MEMORY
|
|||
|
// AFPERR_InvalidComputername
|
|||
|
// non-sero returns from RPC calls.
|
|||
|
//
|
|||
|
// Description: This routine is called when it is necessary to bind to a server.
|
|||
|
// The binding is done to allow impersonation by the server since
|
|||
|
// that is necessary for the API calls.
|
|||
|
//
|
|||
|
DWORD
|
|||
|
AfpRPCBind(
|
|||
|
IN LPWSTR lpwsServerName,
|
|||
|
OUT PAFP_SERVER_HANDLE phAfpServer
|
|||
|
)
|
|||
|
{
|
|||
|
RPC_STATUS RpcStatus;
|
|||
|
LPWSTR lpwsStringBinding;
|
|||
|
LPWSTR lpwsEndpoint;
|
|||
|
|
|||
|
// We need to concatenate \pipe\ to the front of the service
|
|||
|
// name.
|
|||
|
//
|
|||
|
lpwsEndpoint = (LPWSTR)LocalAlloc( 0, sizeof(NT_PIPE_PREFIX) +
|
|||
|
((STRLEN(AFP_SERVICE_NAME)+1)*sizeof(WCHAR)));
|
|||
|
if ( lpwsEndpoint == NULL)
|
|||
|
return( ERROR_NOT_ENOUGH_MEMORY );
|
|||
|
|
|||
|
STRCPY( lpwsEndpoint, NT_PIPE_PREFIX );
|
|||
|
STRCAT( lpwsEndpoint, AFP_SERVICE_NAME );
|
|||
|
|
|||
|
RpcStatus = RpcStringBindingCompose(
|
|||
|
NULL,
|
|||
|
TEXT("ncacn_np"),
|
|||
|
lpwsServerName,
|
|||
|
lpwsEndpoint,
|
|||
|
TEXT("Security=Impersonation Static True"),
|
|||
|
&lpwsStringBinding);
|
|||
|
LocalFree( lpwsEndpoint );
|
|||
|
|
|||
|
if ( RpcStatus != RPC_S_OK )
|
|||
|
return( I_RpcMapWin32Status( RpcStatus ) );
|
|||
|
|
|||
|
RpcStatus = RpcBindingFromStringBinding( lpwsStringBinding,
|
|||
|
(handle_t *)phAfpServer );
|
|||
|
|
|||
|
RpcStringFree( &lpwsStringBinding );
|
|||
|
|
|||
|
if ( RpcStatus != RPC_S_OK ) {
|
|||
|
|
|||
|
if ( ( RpcStatus == RPC_S_INVALID_ENDPOINT_FORMAT )
|
|||
|
||
|
|||
|
( RpcStatus == RPC_S_INVALID_NET_ADDR ) )
|
|||
|
|
|||
|
return( (DWORD)AFPERR_InvalidComputername );
|
|||
|
else
|
|||
|
return( I_RpcMapWin32Status( RpcStatus ) );
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
return( NO_ERROR );
|
|||
|
}
|