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.
|
|
//
// MODULE: APGTSPL.H
//
// PURPOSE: Pool Queue shared variables
//
// PROJECT: Generic Troubleshooter DLL for Microsoft AnswerPoint
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 [email protected]
//
// AUTHOR: Roman Mach
//
// ORIGINAL DATE: 8-2-96
//
// NOTES:
// 1. Based on Print Troubleshooter DLL
//
// Version Date By Comments
//--------------------------------------------------------------------
// V0.1 - RM Original
// V3.0 9/21/98 JM Pull out of apgts.h to separate header file.
// Working on encapsulation
//
#ifndef _H_APGTSPL
#define _H_APGTSPL
#include <windows.h>
#include <vector>
using namespace std;
// forward references
class CDBLoadConfiguration; class CHTMLLog; class CAbstractECB;
//
//
typedef struct _GTS_STATISTIC // for gathering DLL statistics
{ DWORD dwQueueItems; DWORD dwWorkItems; DWORD dwRollover; // unique per request while this DLL is loaded
} GTS_STATISTIC;
//
// promoting this from a struct to a class 1/4/99 JM. However, not fully encapsulating it.
class WORK_QUEUE_ITEM { WORK_QUEUE_ITEM(); // do not instantiate. No default constructor.
public: HANDLE hImpersonationToken; // security thread should use while
// processing this work item
CAbstractECB *pECB; // ISAPI uses an EXTENSION_CONTROL_BLOCK
// to wrap CGI data. We have further
// abstracted this.
CDBLoadConfiguration *pConf; // registry, DSC files, all that stuff
CHTMLLog *pLog; // logging
GTS_STATISTIC GTSStat; // for gathering DLL statistics
WORK_QUEUE_ITEM( HANDLE hImpersonationTokenIn, CAbstractECB *pECBIn, CDBLoadConfiguration *pConfIn, CHTMLLog *pLogIn ) : hImpersonationToken(hImpersonationTokenIn), pECB(pECBIn), pConf(pConfIn), pLog(pLogIn) {} ~WORK_QUEUE_ITEM() {} };
class CPoolQueue { public: CPoolQueue(); ~CPoolQueue();
DWORD GetStatus(); void Lock(); void Unlock(); void PushBack(WORK_QUEUE_ITEM * pwqi); WORK_QUEUE_ITEM * GetWorkItem(); void DecrementWorkItems(); DWORD WaitForWork(); DWORD GetTotalWorkItems(); DWORD GetTotalQueueItems(); time_t GetTimeLastAdd(); time_t GetTimeLastRemove(); protected: CRITICAL_SECTION m_csQueueLock; // must lock to add or delete from either list or to affect
// m_cInProcess or the various time_t variables.
HANDLE m_hWorkSem; // NT Semaphore handle for distributing requests to threads
// Wait on this semaphore for a work item from this queue
DWORD m_dwErr; // NOTE: once this is set nonzero, it can never be cleared.
vector<WORK_QUEUE_ITEM *> m_WorkQueue; // vector of WORK_QUEUE_ITEMs (queued up by
// APGTSExtension::StartRequest for working threads)
DWORD m_cInProcess; // # of items waiting in process (being worked on, vs.
// still in queue). Arbitrary, but acceptable, decision
// to track m_cInProcess in this class. JM 11/30/98
time_t m_timeLastAdd; // time last added an item to the queue
time_t m_timeLastRemove; // time an item was last removed from the queue
};
#endif // _H_APGTSPL
|