Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
svcinfo.hxx
Abstract:
contains class definitions for service location classes.
Author:
Madan Appiah (madana) 15-May-1995
Environment:
User Mode - Win32
Revision History:
--*/
#ifndef _SVCINFO_
#define _SVCINFO_
/*++
Class Description:
Class definition for internet service info.
Private Member functions:
ComputeServiceInfoSize : computes the size of embedded service info buffer.
CopyServiceInfo : copies the service info structure to emdedded service info buffer.
Public Member functions:
EMBED_SERVICE_INFO : constructs a service info object.
~EMBED_SERVICE_INFO : destructs a service info object.
GetStatus : returns status of the object.
SetServiceInfo : updates the service info object.
SetServiceState :updates service state in the service info object.
GetServiceMask : retrieves service mask.
GetServiceInfoLength : retrieves the size of the embedded service info.
GetServiceInfoBuffer : retrieves the buffer pointer of the embedded service info.
GetServiceInfo : unmarshells the embedded buffer and retrieves service info structure.
--*/ class EMBED_SERVICE_INFO {
private:
DWORD _Status; DWORD _ServiceInfoLength; LPBYTE _ServiceInfoBuffer; DWORD _AllottedBufferSize;
INET_SERVICE_STATE *_ServiceState; LPSTR _ServiceComment; ULONGLONG UNALIGNED *_ServiceMask;
CRITICAL_SECTION _ServiceObjCritSect;
DWORD ComputeServiceInfoSize( LPINET_SERVICE_INFO ServiceInfo ); VOID CopyServiceInfo( LPINET_SERVICE_INFO ServiceInfo );
VOID LockServiceObj( VOID ) { EnterCriticalSection( &_ServiceObjCritSect ); }
VOID UnlockServiceObj( VOID ) { LeaveCriticalSection( &_ServiceObjCritSect ); }
public:
EMBED_SERVICE_INFO( LPINET_SERVICE_INFO ServiceInfo ); EMBED_SERVICE_INFO( LPBYTE InfoBuffer, DWORD InfoBufferLength );
~EMBED_SERVICE_INFO( VOID );
DWORD GetStatus( VOID ) { return( _Status ); }
DWORD SetServiceInfo( LPINET_SERVICE_INFO ServiceInfo ); VOID SetServiceState( INET_SERVICE_STATE SvcState ) { *_ServiceState = SvcState; return; }
ULONGLONG GetServiceMask( VOID ) { return( *_ServiceMask ); }
DWORD GetServiceInfoLength( VOID ) { return( _ServiceInfoLength ); }
DWORD GetServiceInfoBuffer( LPBYTE Buffer, DWORD BufferLength, DWORD *ReturnBufferLength ) {
LockServiceObj(); if( BufferLength < _ServiceInfoLength ) { UnlockServiceObj(); return( ERROR_INSUFFICIENT_BUFFER ); }
memcpy(Buffer, _ServiceInfoBuffer, _ServiceInfoLength ); *ReturnBufferLength = _ServiceInfoLength;
UnlockServiceObj(); return( ERROR_SUCCESS ); }
DWORD GetServiceInfo( LPINET_SERVICE_INFO *ServiceInfo ); }
typedef EMBED_SERVICE_INFO, *LPSERVICE_OBJECT;
//
// service object list entry.
//
typedef struct _EMBED_SERVICE_ENTRY { LIST_ENTRY NextEntry ; LPSERVICE_OBJECT ServiceObject; } EMBED_SERVICE_ENTRY, *LPEMBED_SERVICE_ENTRY;
/*++
Class Description:
Class definition for internet server info.
Private Member functions:
IsServiceEntryExist : finds a service is in the server services list.
Public Member functions:
EMBED_SERVER_INFO : constructs a server info object.
~EMBED_SERVER_INFO : destructs a server info object.
GetStatus : returns status of the object.
SetServerLoad : sets server load value in the server info object.
AddService : adds a new service or updates the info existing server in the server info object.
RemoveService :removes a service from the server info object.
SetServiceState : sets the state of the existing service in the server info object.
ComputeResponseLength : computes the length of the response message (containing server info and all services info in the embeded formatted) sent to a client.
MakeResponseMessage : makes a response message sent to a client.
--*/ class EMBED_SERVER_INFO {
private:
DWORD _Status; DWORD _ServerInfoLength; LPBYTE _ServerInfoBuffer; DWORD _AllottedBufferSize;
INET_VERSION_NUM *_VersionNum; DWORD *_ServerLoad; ULONGLONG UNALIGNED *_ServicesMask; LPSTR _ServerName;
DWORD *_NumServices; LIST_ENTRY _ServicesList;
CRITICAL_SECTION _ServerObjCritSect;
BOOL IsServiceEntryExist( ULONGLONG ServiceMask, LPEMBED_SERVICE_ENTRY *ServiceEntry );
VOID LockServerObj( VOID ) { EnterCriticalSection( &_ServerObjCritSect ); }
VOID UnlockServerObj( VOID ) { LeaveCriticalSection( &_ServerObjCritSect ); }
public:
EMBED_SERVER_INFO( WORD MajorVersion, WORD MinorVersion, LPSTR ServerName );
EMBED_SERVER_INFO( LPBYTE ResponseBuffer, DWORD ResponseBufferLength );
~EMBED_SERVER_INFO( VOID );
DWORD GetStatus( VOID ) { return( _Status ); }
VOID SetServerLoad ( DWORD SrvLoad ) { *_ServerLoad = SrvLoad; return; }
ULONGLONG GetServicesMask( VOID ) { return(*_ServicesMask); }
DWORD AddService ( LPINET_SERVICE_INFO ServiceInfo ); DWORD RemoveService( ULONGLONG ServiceMask ); DWORD SetServiceState( ULONGLONG ServiceMask, INET_SERVICE_STATE ServiceState );
DWORD ComputeResponseLength( VOID ); DWORD MakeResponseMessage( LPBYTE MessageBuffer, DWORD BufferLength );
DWORD GetServerInfo( LPINET_SERVER_INFO *ServerInfo ); };
#endif // _SVCINFO_
|