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.
|
|
//*****************************************************************************
//
// WBEMTSS.H
//
// Copyright (c) 1996-1999, Microsoft Corporation, All rights reserved
//
// This file defines the classes used by the Timer Subsystem.
//
// Classes defined:
//
// RecurrenceInstruction Complex recurrence information.
// TimerInstruction Single instruction for the timer
//
//
//
// 26-Nov-96 raymcc Draft
// 28-Dec-96 a-richm Alpha PDK Release
// 12-Apr-97 a-levn Extensive changes
//
//*****************************************************************************
#ifndef _WBEMTSS_H_
#define _WBEMTSS_H_
#include <wbemidl.h>
#include <wbemint.h>
#include <stdio.h>
#include "sync.h"
#include "statsync.h"
#include "CWbemTime.h"
#include "parmdefs.h"
#include "tss.h"
#include "wstring.h"
//*****************************************************************************
//
// class CTimerInstruction
//
// Generic timer instruction class. Has a name (m_wsTimerId) and knows
// whether events that were missed due to the system being halted or dead
// should be fired.
//
// Derived classes must be able to tell when their next firing time is.
//
//*****************************************************************************
class CEss; class CWinMgmtTimerGenerator; class CWBEMTimerInstruction : public CTimerInstruction { protected: long m_lRefCount;
CWinMgmtTimerGenerator* m_pGenerator; IWbemServices* m_pNamespace; WString m_wsNamespace; WString m_wsTimerId; BOOL m_bSkipIfPassed;
BOOL m_bRemoved;
public: CWBEMTimerInstruction(); virtual ~CWBEMTimerInstruction();
void AddRef() {InterlockedIncrement(&m_lRefCount);} void Release() {if(InterlockedDecrement(&m_lRefCount) == 0) delete this;}
BOOL SkipIfPassed() const {return m_bSkipIfPassed;} void SetSkipIfPassed(BOOL bSkip) {m_bSkipIfPassed = bSkip;}
INTERNAL LPCWSTR GetTimerId() {return m_wsTimerId;} INTERNAL LPCWSTR GetNamespace() {return m_wsNamespace;} void SetTimerId(LPCWSTR wszTimerId) { m_wsTimerId = wszTimerId; }
public: static HRESULT CheckObject(IWbemClassObject* pObject); static HRESULT LoadFromWbemObject(LPCWSTR wszNamespace, ADDREF IWbemServices* pNamespace, CWinMgmtTimerGenerator* pGenerator, IN IWbemClassObject* pObject, OUT RELEASE_ME CWBEMTimerInstruction*& pInstruction);
virtual CWbemTime GetNextFiringTime(CWbemTime LastFiringTime, OUT long* plFiringCount) const; virtual CWbemTime GetFirstFiringTime() const; virtual HRESULT Fire(long lNumTimes, CWbemTime NextFitingTime); virtual HRESULT MarkForRemoval(); virtual int GetInstructionType() {return INSTTYPE_WBEM;} HRESULT StoreNextFiring(CWbemTime When); CWbemTime GetStartingFiringTime(CWbemTime OldTime) const;
protected: CWbemTime SkipMissed(CWbemTime Firing, long* plMissedCount = NULL) const;
virtual CWbemTime ComputeNextFiringTime(CWbemTime LastFiringTime) const = 0; virtual CWbemTime ComputeFirstFiringTime() const = 0; virtual HRESULT LoadFromWbemObject(IN IWbemClassObject* pObject) = 0;
protected: static CStaticCritSec mstatic_cs; };
//*****************************************************************************
//
// class CAbsoluteTimerInstruction
//
// A type of timer instruction which only fires once --- at the preset time.
//
//*****************************************************************************
class CAbsoluteTimerInstruction : public CWBEMTimerInstruction { protected: CWbemTime m_When;
public: CAbsoluteTimerInstruction() : CWBEMTimerInstruction(){} CWbemTime GetFiringTime() const{return m_When;} void SetFiringTime(CWbemTime When) {m_When = When;}
public: CWbemTime ComputeNextFiringTime(CWbemTime LastFiringTime) const; CWbemTime ComputeFirstFiringTime() const;
static HRESULT CheckObject(IWbemClassObject* pObject); HRESULT LoadFromWbemObject(IN IWbemClassObject* pObject); static INTERNAL LPCWSTR GetWbemClassName() {return L"__AbsoluteTimerInstruction";} virtual HRESULT Fire(long lNumTimes, CWbemTime NextFitingTime); };
//*****************************************************************************
//
// class CIntervalTimerInstruction
//
// A type of timer instruction which fires every N milliseconds starting at
// a given time.
//
//*****************************************************************************
class CIntervalTimerInstruction : public CWBEMTimerInstruction { protected: CWbemTime m_Start; // not used
CWbemInterval m_Interval;
public: CIntervalTimerInstruction() : CWBEMTimerInstruction(), m_Start(), m_Interval() {}
CWbemTime GetStart() const {return m_Start;} void SetStart(CWbemTime Start) {m_Start = Start;}
CWbemInterval GetInterval() const {return m_Interval;} void SetInterval(CWbemInterval Interval) {m_Interval = Interval;}
public: static HRESULT CheckObject(IWbemClassObject* pObject) {return S_OK;} CWbemTime ComputeNextFiringTime(CWbemTime LastFiringTime) const; CWbemTime ComputeFirstFiringTime() const;
HRESULT LoadFromWbemObject(IN IWbemClassObject* pObject); static INTERNAL LPCWSTR GetWbemClassName() {return L"__IntervalTimerInstruction";} };
//*****************************************************************************
//
// class CRecurringInstruction
//
// A more complex recurrence instruction. TBD
//
//*****************************************************************************
class CRecurringTimerInstruction : public CWBEMTimerInstruction { // TBD
public: CWbemTime ComputeNextFiringTime(CWbemTime LastFiringTime) const {return CWbemTime::GetInfinity();} CWbemTime ComputeFirstFiringTime() const {return CWbemTime::GetInfinity();}
HRESULT LoadFromWbemObject(IN IWbemClassObject* pObject) {return E_UNEXPECTED;} static INTERNAL LPCWSTR GetWbemClassName() {return L"__RecurringTimerInstruction";} static HRESULT CheckObject(IWbemClassObject* pObject) {return S_OK;} };
class CWinMgmtTimerGenerator : public CTimerGenerator { public: CWinMgmtTimerGenerator(CEss* pEss); HRESULT LoadTimerEventQueue(LPCWSTR wszNamespace, IWbemServices* pNamespace); HRESULT LoadTimerEventObject(LPCWSTR wszNamespace, IWbemServices* pNamespace, IWbemClassObject * pTimerInstruction, IWbemClassObject * pNextFiring = NULL); HRESULT LoadTimerEventObject(LPCWSTR wszNamespace, IWbemClassObject * pTimerInstruction); HRESULT CheckTimerInstruction(IWbemClassObject* pInst);
HRESULT Remove(LPCWSTR wszNamespace, LPCWSTR wszId); HRESULT Remove(LPCWSTR wszNamespace); HRESULT FireInstruction(CWBEMTimerInstruction* pInst, long lNumFirings); virtual HRESULT Shutdown(); HRESULT SaveAndRemove(LONG bIsSystemShutDown); void DumpStatistics(FILE* f, long lFlags);
protected: class CIdTest : public CInstructionTest { protected: LPCWSTR m_wszId; LPCWSTR m_wszNamespace; public: CIdTest(LPCWSTR wszNamespace, LPCWSTR wszId) : m_wszId(wszId), m_wszNamespace(wszNamespace) {} BOOL operator()(CTimerInstruction* pInst); };
class CNamespaceTest : public CInstructionTest { protected: LPCWSTR m_wszNamespace; public: CNamespaceTest(LPCWSTR wszNamespace) : m_wszNamespace(wszNamespace) {} BOOL operator()(CTimerInstruction* pInst); }; protected:
CEss* m_pEss; };
#endif
|