|
|
/**********************************************************************/ /** 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
|