windows-nt/Source/XPSP1/NT/admin/netui/common/h/lmoesvc.hxx
2020-09-26 16:20:57 +08:00

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