249 lines
5.1 KiB
C
249 lines
5.1 KiB
C
/*++
|
||
|
||
Copyright (c) 1990 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
wrappers.c
|
||
|
||
Abstract:
|
||
|
||
This file contains all SAM rpc binding routines.
|
||
|
||
Author:
|
||
|
||
Jim Kelly (JimK) 4-July-1991
|
||
|
||
Environment:
|
||
|
||
User Mode - Win32
|
||
|
||
Revision History:
|
||
|
||
|
||
--*/
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Includes //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
|
||
#include "samclip.h"
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// private service prototypes //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Routines //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
RPC_BINDING_HANDLE
|
||
PSAMPR_SERVER_NAME_bind (
|
||
PSAMPR_SERVER_NAME ServerName
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine calls a common bind routine that is shared by all services.
|
||
This routine is called from SamConnect server stub to connect to the
|
||
server.
|
||
|
||
Arguments:
|
||
|
||
ServerName - A pointer to a string containing the name of the server
|
||
to bind with.
|
||
|
||
Return Value:
|
||
|
||
The binding handle is returned to the stub routine. If the
|
||
binding is unsuccessful, a NULL will be returned.
|
||
|
||
--*/
|
||
{
|
||
RPC_BINDING_HANDLE BindingHandle;
|
||
|
||
RpcpBindRpc (
|
||
ServerName,
|
||
L"samr",
|
||
0,
|
||
&BindingHandle
|
||
);
|
||
|
||
|
||
return( BindingHandle);
|
||
}
|
||
|
||
|
||
|
||
void
|
||
PSAMPR_SERVER_NAME_unbind (
|
||
PSAMPR_SERVER_NAME ServerName,
|
||
RPC_BINDING_HANDLE BindingHandle
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine calls a common unbind routine that is shared by
|
||
all services.
|
||
|
||
This routine is called from the SamConnect client stub to
|
||
unbind from the SAM client.
|
||
|
||
|
||
Arguments:
|
||
|
||
ServerName - This is the name of the server from which to unbind.
|
||
|
||
BindingHandle - This is the binding handle that is to be closed.
|
||
|
||
Return Value:
|
||
|
||
none.
|
||
|
||
--*/
|
||
{
|
||
UNREFERENCED_PARAMETER(ServerName); // This parameter is not used
|
||
|
||
|
||
RpcpUnbindRpc ( BindingHandle );
|
||
return;
|
||
}
|
||
|
||
RPC_BINDING_HANDLE
|
||
SampSecureBind(
|
||
LPWSTR ServerName,
|
||
ULONG AuthnLevel
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine calls a common bind routine that is shared by all services.
|
||
This routine is called from SamConnect server stub to connect to the
|
||
server.
|
||
|
||
Arguments:
|
||
|
||
ServerName - A pointer to a string containing the name of the server
|
||
to bind with.
|
||
|
||
AuthnLevel - Authentication level to bind with.
|
||
|
||
Return Value:
|
||
|
||
The binding handle is returned to the stub routine. If the
|
||
binding is unsuccessful, a NULL will be returned.
|
||
|
||
--*/
|
||
{
|
||
RPC_BINDING_HANDLE BindingHandle = NULL;
|
||
RPC_STATUS RpcStatus;
|
||
|
||
#if 1
|
||
RpcpBindRpc ( ServerName,
|
||
L"samr",
|
||
0,
|
||
&BindingHandle
|
||
);
|
||
#else
|
||
LPWSTR StringBinding;
|
||
RpcStatus = RpcStringBindingComposeW(
|
||
0,
|
||
L"ncacn_spx",
|
||
ServerName+2,
|
||
NULL, // dynamic endpoint
|
||
NULL, // no options
|
||
&StringBinding
|
||
);
|
||
if (RpcStatus != 0)
|
||
{
|
||
return(NULL);
|
||
}
|
||
RpcStatus = RpcBindingFromStringBindingW(
|
||
StringBinding,
|
||
&BindingHandle
|
||
);
|
||
RpcStringFreeW(&StringBinding);
|
||
|
||
#endif
|
||
|
||
|
||
if ( (BindingHandle != NULL) &&
|
||
(AuthnLevel != RPC_C_AUTHN_LEVEL_NONE) ) {
|
||
|
||
RpcStatus = RpcBindingSetAuthInfoW(
|
||
BindingHandle,
|
||
NULL, // server principal name
|
||
AuthnLevel,
|
||
RPC_C_AUTHN_WINNT,
|
||
NULL,
|
||
RPC_C_AUTHZ_DCE
|
||
);
|
||
if (RpcStatus != 0) {
|
||
RpcBindingFree(&BindingHandle);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
return( BindingHandle);
|
||
}
|
||
|
||
|
||
|
||
void
|
||
SampSecureUnbind (
|
||
RPC_BINDING_HANDLE BindingHandle
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine calls a common unbind routine that is shared by
|
||
all services.
|
||
|
||
This routine is called from the SamConnect client stub to
|
||
unbind from the SAM client.
|
||
|
||
|
||
Arguments:
|
||
|
||
BindingHandle - This is the binding handle that is to be closed.
|
||
|
||
Return Value:
|
||
|
||
none.
|
||
|
||
--*/
|
||
{
|
||
|
||
|
||
RpcpUnbindRpc ( BindingHandle );
|
||
return;
|
||
}
|
||
|