Leaked source code of windows server 2003
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.
 
 
 
 
 
 

68 lines
3.0 KiB

// --------------------------------------------------------------------------
// Module Name: APIConnectionThread.h
//
// Copyright (c) 1999-2000, Microsoft Corporation
//
// A class that listens to an LPC connection port waiting for requests from
// a client to connect to the port or a request which references a previously
// established connection.
//
// History: 1999-11-07 vtan created
// 2000-08-25 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
#ifndef _APIConnectionThread_
#define _APIConnectionThread_
#include "APIRequest.h"
#include "DynamicArray.h"
#include "PortMessage.h"
#include "ServerAPI.h"
// --------------------------------------------------------------------------
// CAPIConnection
//
// Purpose: This class listens to the server connection port for an LPC
// connection request, an LPC request or an LPC connect closed
// message. It correctly handles each request. LPC requests are
// queued to the managing CAPIDispatcher.
//
// History: 1999-11-07 vtan created
// 2000-08-25 vtan moved from Neptune to Whistler
// 2000-11-28 vtan removed thread functionality
// --------------------------------------------------------------------------
class CAPIConnection : public CCountedObject
{
private:
CAPIConnection (void);
public:
CAPIConnection (CServerAPI* pServerAPI);
~CAPIConnection (void);
NTSTATUS ConstructorStatusCode (void) const;
NTSTATUS Listen ( CAPIDispatchSync* pAPIDispatchSync );
NTSTATUS AddAccess (PSID pSID, DWORD dwMask);
NTSTATUS RemoveAccess (PSID pSID);
private:
NTSTATUS ListenToServerConnectionPort (void);
NTSTATUS HandleServerRequest (const CPortMessage& portMessage, CAPIDispatcher *pAPIDispatcher);
NTSTATUS HandleServerConnectionRequest (const CPortMessage& portMessage);
NTSTATUS HandleServerConnectionClosed (const CPortMessage& portMessage, CAPIDispatcher *pAPIDispatcher);
int FindIndexDispatcher (CAPIDispatcher *pAPIDispatcher);
private:
NTSTATUS _status;
bool _fStopListening;
CServerAPI* _pServerAPI;
HANDLE _hPort;
CAPIDispatchSync* _pAPIDispatchSync;
CCriticalSection _dispatchers_lock;
CDynamicCountedObjectArray _dispatchers;
};
#endif /* _APIConnectionThread_ */