windows-nt/Source/XPSP1/NT/shell/services/lpc/serverapi.h
2020-09-26 16:20:57 +08:00

63 lines
2.5 KiB
C++

// --------------------------------------------------------------------------
// Module Name: ServerAPI.h
//
// Copyright (c) 1999-2000, Microsoft Corporation
//
// An abstract base class containing virtual functions that allow the basic
// port functionality code to be reused to create another server. These
// virtual functions create other objects with pure virtual functions which
// the basic port functionality code invokes thru the v-table.
//
// History: 1999-11-07 vtan created
// 2000-08-25 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
#ifndef _ServerAPI_
#define _ServerAPI_
#include "APIDispatcher.h"
#include "CountedObject.h"
#include "PortMessage.h"
class CAPIConnection; // This would be circular otherwise
// --------------------------------------------------------------------------
// CServerAPI
//
// Purpose: The abstract base class which the server connection monitor
// thread uses to determine whether server connection should be
// accepted or rejected as well as creating threads to process
// client requests.
//
// History: 1999-11-07 vtan created
// 2000-08-25 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CServerAPI : public CCountedObject
{
protected:
CServerAPI (void);
virtual ~CServerAPI (void);
public:
virtual const WCHAR* GetPortName (void) = 0;
virtual const TCHAR* GetServiceName (void) = 0;
virtual bool ConnectionAccepted (const CPortMessage& portMessage) = 0;
virtual CAPIDispatcher* CreateDispatcher (const CPortMessage& portMessage) = 0;
virtual NTSTATUS Connect (HANDLE* phPort) = 0;
NTSTATUS Start (void);
NTSTATUS Stop (void);
bool IsRunning (void);
bool IsAutoStart (void);
NTSTATUS Wait (DWORD dwTimeout);
static NTSTATUS StaticInitialize (void);
static NTSTATUS StaticTerminate (void);
protected:
static bool IsClientTheSystem (const CPortMessage& portMessage);
static bool IsClientAnAdministrator (const CPortMessage& portMessage);
};
#endif /* _ServerAPI_ */