405 lines
8.5 KiB
C++
405 lines
8.5 KiB
C++
/**********************************************************************/
|
||
/** Microsoft Windows NT **/
|
||
/** Copyright(c) Microsoft Corp., 1993 **/
|
||
/**********************************************************************/
|
||
|
||
/*
|
||
rpcsupp.cxx
|
||
|
||
This module contains support routines for the W3 Service RPC
|
||
interface.
|
||
|
||
|
||
FILE HISTORY:
|
||
KeithMo 23-Mar-1993 Created.
|
||
|
||
*/
|
||
|
||
|
||
#include "w3p.hxx"
|
||
#include "w3svci_s.h"
|
||
#include <timer.h>
|
||
#include <time.h>
|
||
|
||
|
||
//
|
||
// Private globals.
|
||
//
|
||
|
||
//
|
||
// Private prototypes.
|
||
//
|
||
|
||
BOOL
|
||
WriteParams(
|
||
W3_CONFIG_INFO * pConfig
|
||
);
|
||
|
||
//
|
||
// Public functions.
|
||
//
|
||
|
||
NET_API_STATUS
|
||
NET_API_FUNCTION
|
||
W3rSetAdminInformation(
|
||
IN LPWSTR pszServer OPTIONAL,
|
||
IN W3_CONFIG_INFO * pConfig
|
||
)
|
||
{
|
||
return ERROR_NOT_SUPPORTED;
|
||
}
|
||
|
||
NET_API_STATUS
|
||
NET_API_FUNCTION
|
||
W3rGetAdminInformation(
|
||
IN LPWSTR pszServer OPTIONAL,
|
||
OUT LPW3_CONFIG_INFO * ppConfig
|
||
)
|
||
{
|
||
return ERROR_NOT_SUPPORTED;
|
||
}
|
||
|
||
/*******************************************************************
|
||
|
||
NAME: W3rEnumerateUsers
|
||
|
||
SYNOPSIS: Enumerates the connected users. This is a server-side
|
||
worker routine for RPC.
|
||
|
||
ENTRY: pszServer - Target server (unused).
|
||
|
||
pBuffer - Will receive the number of entries and a
|
||
pointer to the enumeration buffer.
|
||
|
||
RETURNS: NET_API_STATUS - Net status code, NERR_Success if OK.
|
||
|
||
HISTORY:
|
||
KeithMo 23-Mar-1993 Created.
|
||
|
||
********************************************************************/
|
||
NET_API_STATUS
|
||
NET_API_FUNCTION
|
||
W3rEnumerateUsers( W3_IMPERSONATE_HANDLE pszServer,
|
||
LPW3_USER_ENUM_STRUCT pBuffer )
|
||
{
|
||
APIERR err;
|
||
//DWORD cbBuffer;
|
||
|
||
DBG_ASSERT( pBuffer != NULL );
|
||
|
||
UNREFERENCED_PARAMETER(pszServer);
|
||
|
||
IF_DEBUG( RPC )
|
||
{
|
||
DBGPRINTF(( DBG_CONTEXT,
|
||
"in W3rEnumerateUsers\n" ));
|
||
}
|
||
|
||
//
|
||
// Check for proper access.
|
||
//
|
||
|
||
err = TsApiAccessCheck( TCP_ENUMERATE_USERS );
|
||
|
||
if( err != NO_ERROR )
|
||
{
|
||
IF_DEBUG( RPC )
|
||
{
|
||
DBGPRINTF(( DBG_CONTEXT,
|
||
"W3rEnumerateUsers failed access check, error %lu\n",
|
||
err ));
|
||
}
|
||
|
||
return (NET_API_STATUS)err;
|
||
}
|
||
|
||
#if 0
|
||
//
|
||
// Lock the user database.
|
||
//
|
||
|
||
LockUserDatabase();
|
||
|
||
//
|
||
// Determine the necessary buffer size.
|
||
//
|
||
|
||
pBuffer->EntriesRead = 0;
|
||
pBuffer->Buffer = NULL;
|
||
|
||
cbBuffer = 0;
|
||
err = NERR_Success;
|
||
|
||
EnumerateUsers( pBuffer, &cbBuffer );
|
||
|
||
if( cbBuffer > 0 )
|
||
{
|
||
//
|
||
// Allocate the buffer. Note that we *must*
|
||
// use midl_user_allocate/midl_user_free.
|
||
//
|
||
|
||
pBuffer->Buffer = (W3_USER_INFO *) MIDL_user_allocate( (unsigned int)cbBuffer );
|
||
|
||
if( pBuffer->Buffer == NULL )
|
||
{
|
||
err = ERROR_NOT_ENOUGH_MEMORY;
|
||
}
|
||
else
|
||
{
|
||
//
|
||
// Since we've got the user database locked, there
|
||
// *should* be enough room in the buffer for the
|
||
// user data. If there isn't, we've messed up
|
||
// somewhere.
|
||
//
|
||
|
||
TCP_REQUIRE( EnumerateUsers( pBuffer, &cbBuffer ) );
|
||
}
|
||
}
|
||
|
||
//
|
||
// Unlock the user database before returning.
|
||
|
||
UnlockUserDatabase();
|
||
|
||
#endif //0
|
||
|
||
return (NET_API_STATUS)err;
|
||
|
||
} // W3rEnumerateUsers
|
||
|
||
/*******************************************************************
|
||
|
||
NAME: W3rDisconnectUser
|
||
|
||
SYNOPSIS: Disconnects a specified user. This is a server-side
|
||
worker routine for RPC.
|
||
|
||
ENTRY: pszServer - Target server (unused).
|
||
|
||
idUser - Identifies the user to disconnect. If 0,
|
||
then disconnect ALL users.
|
||
|
||
RETURNS: NET_API_STATUS - Net status code, NERR_Success if OK.
|
||
|
||
HISTORY:
|
||
KeithMo 23-Mar-1993 Created.
|
||
|
||
********************************************************************/
|
||
NET_API_STATUS
|
||
NET_API_FUNCTION
|
||
W3rDisconnectUser( W3_IMPERSONATE_HANDLE pszServer,
|
||
DWORD idUser )
|
||
{
|
||
APIERR err = NERR_Success;
|
||
|
||
UNREFERENCED_PARAMETER(pszServer);
|
||
|
||
IF_DEBUG( RPC )
|
||
{
|
||
DBGPRINTF(( DBG_CONTEXT,
|
||
"in W3rDisconnectUser\n" ));
|
||
}
|
||
|
||
//
|
||
// Check for proper access.
|
||
//
|
||
|
||
err = TsApiAccessCheck( TCP_DISCONNECT_USER );
|
||
|
||
if( err != NO_ERROR )
|
||
{
|
||
IF_DEBUG( RPC )
|
||
{
|
||
DBGPRINTF(( DBG_CONTEXT,
|
||
"W3rDisconnectUser failed access check, error %lu\n",
|
||
err ));
|
||
}
|
||
|
||
return (NET_API_STATUS)err;
|
||
}
|
||
|
||
//
|
||
// Do it.
|
||
//
|
||
|
||
if( idUser == 0 )
|
||
{
|
||
CLIENT_CONN::DisconnectAllUsers();
|
||
}
|
||
else
|
||
{
|
||
#if 0
|
||
if( !DisconnectUser( idUser ) )
|
||
{
|
||
err = NERR_UserNotFound;
|
||
}
|
||
#endif
|
||
}
|
||
|
||
return (NET_API_STATUS)err;
|
||
|
||
} // W3rDisconnectUser
|
||
|
||
/*******************************************************************
|
||
|
||
NAME: W3rQueryStatistics
|
||
|
||
SYNOPSIS: Queries the current server statistics. This is a
|
||
server-side worker routine for RPC.
|
||
|
||
ENTRY: pszServer - Target server (unused).
|
||
|
||
Level - Info level. Currently only level 0 is
|
||
supported.
|
||
|
||
pBuffer - Will receive a poitner to the statistics
|
||
structure.
|
||
|
||
RETURNS: NET_API_STATUS - Net status code, NERR_Success if OK.
|
||
|
||
HISTORY:
|
||
KeithMo 02-Jun-1993 Created.
|
||
|
||
********************************************************************/
|
||
NET_API_STATUS
|
||
NET_API_FUNCTION
|
||
W3rQueryStatistics( W3_IMPERSONATE_HANDLE pszServer,
|
||
DWORD Level,
|
||
LPSTATISTICS_INFO pBuffer )
|
||
{
|
||
APIERR err;
|
||
|
||
TCP_ASSERT( pBuffer != NULL );
|
||
|
||
UNREFERENCED_PARAMETER(pszServer);
|
||
|
||
IF_DEBUG( RPC )
|
||
{
|
||
TCP_PRINT(( DBG_CONTEXT,
|
||
"in W3rQueryStatistics, level %lu\n", Level ));
|
||
}
|
||
|
||
//
|
||
// Check for proper access.
|
||
//
|
||
|
||
err = TsApiAccessCheck( TCP_QUERY_STATISTICS );
|
||
|
||
if( err != NO_ERROR )
|
||
{
|
||
IF_DEBUG( RPC )
|
||
{
|
||
TCP_PRINT(( DBG_CONTEXT,
|
||
"W3rQueryStatistics failed access check, error %lu\n",
|
||
err ));
|
||
}
|
||
|
||
return (NET_API_STATUS)err;
|
||
}
|
||
|
||
#if 0
|
||
//
|
||
// Return the proper statistics based on the infolevel.
|
||
//
|
||
|
||
switch( Level )
|
||
{
|
||
case 0 :
|
||
{
|
||
LPW3_STATISTICS_0 pstats0;
|
||
|
||
pstats0 = (W3_STATISTICS_0 *) MIDL_user_allocate( sizeof(W3_STATISTICS_0) );
|
||
|
||
if( pstats0 == NULL )
|
||
{
|
||
err = ERROR_NOT_ENOUGH_MEMORY;
|
||
}
|
||
else
|
||
{
|
||
LockStatistics();
|
||
RtlCopyMemory( pstats0, &W3Stats, sizeof(W3_STATISTICS_0) );
|
||
UnlockStatistics();
|
||
|
||
pBuffer->W3Stats0 = pstats0;
|
||
pstats0->TimeOfLastClear = GetCurrentTimeInSeconds() -
|
||
pstats0->TimeOfLastClear;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default :
|
||
err = ERROR_INVALID_LEVEL;
|
||
break;
|
||
}
|
||
#else
|
||
err = ERROR_NOT_SUPPORTED;
|
||
#endif
|
||
return (NET_API_STATUS)err;
|
||
|
||
} // W3rQueryStatistics
|
||
|
||
|
||
/*******************************************************************
|
||
|
||
NAME: W3rClearStatistics
|
||
|
||
SYNOPSIS: Clears current server statistics. This is a
|
||
server-side worker routine for RPC.
|
||
|
||
ENTRY: pszServer - Target server (unused).
|
||
|
||
RETURNS: NET_API_STATUS - Net status code, NERR_Success if OK.
|
||
|
||
HISTORY:
|
||
KeithMo 02-Jun-1993 Created.
|
||
|
||
********************************************************************/
|
||
NET_API_STATUS
|
||
NET_API_FUNCTION
|
||
W3rClearStatistics( W3_IMPERSONATE_HANDLE pszServer )
|
||
{
|
||
APIERR err;
|
||
|
||
UNREFERENCED_PARAMETER(pszServer);
|
||
|
||
IF_DEBUG( RPC )
|
||
{
|
||
TCP_PRINT(( DBG_CONTEXT,
|
||
"in W3rClearStatistics\n" ));
|
||
}
|
||
|
||
//
|
||
// Check for proper access.
|
||
//
|
||
|
||
err = TsApiAccessCheck( TCP_CLEAR_STATISTICS );
|
||
|
||
if( err != NO_ERROR )
|
||
{
|
||
IF_DEBUG( RPC )
|
||
{
|
||
TCP_PRINT(( DBG_CONTEXT,
|
||
"W3rClearStatistics failed access check, error %lu\n",
|
||
err ));
|
||
}
|
||
|
||
return (NET_API_STATUS)err;
|
||
}
|
||
|
||
#if 0
|
||
//
|
||
// Clear the statistics.
|
||
//
|
||
|
||
ClearStatistics();
|
||
|
||
#else
|
||
err = ERROR_NOT_SUPPORTED;
|
||
#endif
|
||
return (NET_API_STATUS)err;
|
||
|
||
} // W3rClearStatistics
|
||
|
||
|