170 lines
5 KiB
C++
170 lines
5 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft LAN Manager **/
|
||
|
/** Copyright(c) Microsoft Corp., 1990, 1991 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
lmoesvc.hxx
|
||
|
This file contains the class declarations for the SERVICE_ENUM
|
||
|
enumerator class and its associated iterator class.
|
||
|
|
||
|
The SERVICE_ENUM class is used to enumerate the services installed
|
||
|
on a target (possibly remote) server.
|
||
|
|
||
|
NOTE: This class uses the Win32 Service Control API.
|
||
|
|
||
|
|
||
|
FILE HISTORY:
|
||
|
KeithMo 17-Jan-1992 Created.
|
||
|
KeithMo 31-Jan-1992 Changes from code review on 29-Jan-1992
|
||
|
attended by ChuckC, EricCh, TerryK.
|
||
|
KeithMo 04-Jun-1992 Handle NT & LM servers differently.
|
||
|
KeithMo 11-Nov-1992 Added DisplayName goodies.
|
||
|
|
||
|
*/
|
||
|
|
||
|
#ifndef _LMOESVC_HXX
|
||
|
#define _LMOESVC_HXX
|
||
|
|
||
|
|
||
|
//
|
||
|
// NOTE!
|
||
|
//
|
||
|
// We must enumerate the servers differently for NT vs LM servers.
|
||
|
// To make life somewhat simpler on the client side, we'll map the
|
||
|
// NT and LM enumerations to a common structure (ENUM_SVC_STATUS).
|
||
|
// It is VERY IMPORTANT that sizeof(ENUM_SVC_STATUS) be <=
|
||
|
// sizeof(ENUM_SERVICE_STATUS).
|
||
|
//
|
||
|
|
||
|
typedef struct _ENUM_SVC_STATUS
|
||
|
{
|
||
|
const TCHAR * pszServiceName;
|
||
|
const TCHAR * pszDisplayName;
|
||
|
ULONG nCurrentState;
|
||
|
ULONG nControlsAccepted;
|
||
|
ULONG nStartType;
|
||
|
|
||
|
} ENUM_SVC_STATUS;
|
||
|
|
||
|
|
||
|
|
||
|
/*************************************************************************
|
||
|
|
||
|
NAME: SERVICE_ENUM
|
||
|
|
||
|
SYNOPSIS: This is class is used to enumerate installed services.
|
||
|
|
||
|
INTERFACE: SERVICE_ENUM - Class constructor.
|
||
|
|
||
|
~SERVICE_ENUM - Class destructor.
|
||
|
|
||
|
CallAPI() - Invoke the enumeration API.
|
||
|
|
||
|
PARENT: LOC_LM_ENUM
|
||
|
|
||
|
HISTORY:
|
||
|
KeithMo 17-Jan-1992 Created.
|
||
|
|
||
|
**************************************************************************/
|
||
|
DLL_CLASS SERVICE_ENUM : public LOC_LM_ENUM
|
||
|
{
|
||
|
private:
|
||
|
UINT _ServiceType;
|
||
|
BOOL _fIsNtServer;
|
||
|
NLS_STR _nlsGroupName;
|
||
|
|
||
|
virtual APIERR CallAPI( BYTE ** ppbBuffer,
|
||
|
UINT * pcEntriesRead );
|
||
|
|
||
|
APIERR EnumNtServices( BYTE ** ppbBuffer,
|
||
|
UINT * pcEntriesRead );
|
||
|
|
||
|
APIERR EnumLmServices( BYTE ** ppbBuffer,
|
||
|
UINT * pcEntriesRead );
|
||
|
|
||
|
VOID CountServices( BYTE * pbBuffer,
|
||
|
UINT * pcServices,
|
||
|
UINT * pcbServiceNames );
|
||
|
|
||
|
VOID MapLmStatusToNtState( DWORD dwLmStatus,
|
||
|
ULONG * pnCurrentState,
|
||
|
ULONG * pnControlsAccepted );
|
||
|
|
||
|
public:
|
||
|
SERVICE_ENUM( const TCHAR * pszServer,
|
||
|
BOOL fIsNtServer,
|
||
|
UINT ServiceType = SERVICE_WIN32,
|
||
|
const TCHAR * pszGroupName = NULL );
|
||
|
|
||
|
~SERVICE_ENUM();
|
||
|
|
||
|
}; // class SERVICE_ENUM
|
||
|
|
||
|
|
||
|
|
||
|
/*************************************************************************
|
||
|
|
||
|
NAME: SERVICE_ENUM_OBJ
|
||
|
|
||
|
SYNOPSIS: This is basically the return type from the
|
||
|
SERVICE_ENUM_ITER iterator.
|
||
|
|
||
|
INTERFACE: QueryServiceName - Returns the name of the service.
|
||
|
|
||
|
QueryCurrentState - Returns the current state of
|
||
|
the service (SERVICE_*).
|
||
|
|
||
|
QueryControlsAccepted - Bitmask indicating which operations
|
||
|
(stop,pause,continue) may be
|
||
|
performed (SERVICE_ACCEPT_*).
|
||
|
|
||
|
PARENT: ENUM_OBJ_BASE
|
||
|
|
||
|
NOTE: The QueryCurrentState & QueryControlsAccepted accessor
|
||
|
return WIN32-style values, *not* LM-style values!
|
||
|
|
||
|
HISTORY:
|
||
|
KeithMo 17-Jan-1992 Created.
|
||
|
|
||
|
**************************************************************************/
|
||
|
DLL_CLASS SERVICE_ENUM_OBJ : public ENUM_OBJ_BASE
|
||
|
{
|
||
|
friend class SERVICE_ENUM_ITER;
|
||
|
|
||
|
protected:
|
||
|
|
||
|
//
|
||
|
// Provide properly casted buffer query/set methods.
|
||
|
//
|
||
|
|
||
|
const ENUM_SVC_STATUS * QueryBufferPtr( VOID ) const
|
||
|
{ return (const ENUM_SVC_STATUS *)ENUM_OBJ_BASE::QueryBufferPtr(); }
|
||
|
|
||
|
VOID SetBufferPtr( const ENUM_SVC_STATUS * pBuffer )
|
||
|
{ ENUM_OBJ_BASE::SetBufferPtr( (const BYTE *)pBuffer ); }
|
||
|
|
||
|
public:
|
||
|
|
||
|
//
|
||
|
// Accessors.
|
||
|
//
|
||
|
|
||
|
DECLARE_ENUM_ACCESSOR( QueryServiceName, const TCHAR *, pszServiceName );
|
||
|
DECLARE_ENUM_ACCESSOR( QueryDisplayName, const TCHAR *, pszDisplayName );
|
||
|
DECLARE_ENUM_ACCESSOR( QueryCurrentState, UINT, nCurrentState );
|
||
|
DECLARE_ENUM_ACCESSOR( QueryControlsAccepted, UINT, nControlsAccepted );
|
||
|
DECLARE_ENUM_ACCESSOR( QueryStartType, UINT, nStartType );
|
||
|
|
||
|
BOOL IsEnabled( VOID ) const
|
||
|
{ return QueryStartType() != SERVICE_DISABLED; }
|
||
|
|
||
|
}; // class SERVICE_ENUM_OBJ
|
||
|
|
||
|
|
||
|
DECLARE_LM_ENUM_ITER_OF( SERVICE, ENUM_SVC_STATUS )
|
||
|
|
||
|
|
||
|
#endif // _LMOESVC_HXX
|
||
|
|