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.
 
 
 
 
 
 

265 lines
5.2 KiB

//+--------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
//
// File: wkstore.h
//
// Contents:
//
// History:
//
//---------------------------------------------------------------------------
#ifndef __WORKSTORAGE_H__
#define __WORKSTORAGE_H__
#include "tlsjob.h"
//--------------------------------------------------------------
//
// Work Object initialization function, each work object
// must supply its own initialization routine to work
// manager.
//
typedef CWorkObject* (WINAPI *PWorkObjectInitFunc)(
CWorkManager* pWkMgr,
PBYTE pbInitData,
DWORD cbInitData
);
typedef void (WINAPI *PWorkObjectDeleteFunc)(CWorkObject* ptr);
//------------------------------------------------------
//
// Work object initialization routine
//
typedef struct _WorkObjectInitFunc {
DWORD m_WorkType;
PWorkObjectInitFunc m_WorkInitFunc;
} WORKOBJECTINITFUNC;
typedef enum {
WORKITEM_ADD=1,
WORKITEM_BEGINPROCESSING,
WORKITEM_RESCHEDULE,
WORKITEM_DELETE
} WORKITEM_OPERATION;
class CPersistentWorkStorage : public CWorkStorage {
private:
DWORD m_dwStartupTime;
CSafeCounter m_dwNumJobs;
CSafeCounter m_dwJobsInProcesssing;
//
// m_hNextJobLock guard ...
//
CCriticalSection m_hTableLock;
CSafeCounter m_dwNextJobTime;
CWorkObject* m_pNextWorkObject;
//PBYTE m_pbCurrentBookmark;
//DWORD m_cbCurrentBookmark;
//
// Table must be updatable,
//
WorkItemTable* m_pWkItemTable;
void
UpdateNextJobTime(DWORD dwTime) { m_dwNextJobTime=dwTime; }
DWORD
StartupUpdateExistingJobTime();
//
//
//
BOOL
ReturnJobToQueue(
IN DWORD dwTime,
IN CWorkObject* ptr
);
//
//
//
BOOL
DeleteErrorJob(
IN CWorkObject* ptr
);
BOOL
UpdateJobEntry(
IN WorkItemTable* pTable,
IN PBYTE pbBookmark,
IN DWORD cbBoolmark,
IN WORKITEMRECORD& wkItem
);
BOOL
AddJobEntry(
IN WorkItemTable* pTable,
IN WORKITEMRECORD& wkItem
);
BOOL
DeleteJobEntry(
IN WorkItemTable* pTable,
IN PBYTE pbBookmark,
IN DWORD cbBookmark,
IN WORKITEMRECORD& wkItem
);
BOOL
UpdateWorkItemEntry(
IN WorkItemTable* pTable,
IN WORKITEM_OPERATION opCode,
IN PBYTE pbBookmark,
IN DWORD cbBookmark,
IN DWORD dwRestartTime,
IN DWORD dwTime,
IN DWORD dwJobType,
IN PBYTE pbJobData,
IN DWORD cbJobData
);
BOOL
IsValidWorkObject(
CWorkObject* ptr
);
DWORD
GetCurrentBookmarkEx(
IN WorkItemTable* pTable,
IN OUT PBYTE* ppbData,
IN OUT PDWORD pcbData
);
DWORD
GetCurrentBookmark(
IN WorkItemTable* pTable,
IN PBYTE ppbData,
IN OUT PDWORD pcbData
);
DWORD
SetCurrentBookmark(
IN WorkItemTable* pTable,
IN PBYTE pbData,
IN DWORD cbData
);
BOOL
RescheduleJob(
CWorkObject* ptr
);
CWorkObject*
GetCurrentJob(
PDWORD pdwTime
);
DWORD
FindNextJob();
CWorkObject*
InitializeWorkObject(
DWORD dwWorkType,
PBYTE pbData,
DWORD cbData
);
BOOL
DeleteWorkObject(
CWorkObject* ptr
);
public:
CPersistentWorkStorage(
WorkItemTable* pUpdateWkItemTable = NULL
);
~CPersistentWorkStorage();
//--------------------------------------------------------
BOOL
AttachTable(
IN WorkItemTable* pWkTable
)
/*++
--*/
{
if(pWkTable != NULL)
{
m_pWkItemTable = pWkTable;
}
else
{
SetLastError(ERROR_INVALID_PARAMETER);
}
return pWkTable != NULL;
}
//--------------------------------------------------------
BOOL
IsGood();
//--------------------------------------------------------
virtual BOOL
Startup(
IN CWorkManager* pWkMgr
);
//--------------------------------------------------------
virtual BOOL
Shutdown();
//--------------------------------------------------------
virtual BOOL
AddJob(
DWORD dwJobTime,
CWorkObject* ptr
);
//--------------------------------------------------------
virtual DWORD
GetNextJobTime();
//--------------------------------------------------------
virtual CWorkObject*
GetNextJob(
PDWORD pdwTime
);
//--------------------------------------------------------
virtual BOOL
EndProcessingJob(
IN ENDPROCESSINGJOB_CODE opCode,
IN DWORD dwOriginalTime,
IN CWorkObject* ptr
);
//--------------------------------------------------------
virtual DWORD
GetNumJobs()
{
return m_dwNumJobs;
}
//-------------------------------------------------------
virtual BOOL
BeginProcessingJob(
CWorkObject* pJob
);
};
#endif