199 lines
No EOL
14 KiB
C++
199 lines
No EOL
14 KiB
C++
// ==========================================================================
|
||
// Class Specification : COXIteratorService
|
||
// ==========================================================================
|
||
// Header file : OXIteratorService.h
|
||
// This software along with its related components, documentation and files ("The Libraries")
|
||
// is ?1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
||
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
||
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
||
// to obtain this file, or directly from our office. For a copy of the license governing
|
||
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
||
//
|
||
// Version: 9.3
|
||
//
|
||
// Properties:
|
||
// NO Abstract class (does not have any objects)
|
||
// NO Derived from CObject
|
||
//
|
||
// NO Is a CWnd.
|
||
// NO Two stage creation (constructor & Create())
|
||
// NO Has a message map
|
||
// NO Needs a resource (template)
|
||
//
|
||
// NO Persistent objects (saveable on disk)
|
||
// NO Uses exceptions
|
||
//
|
||
// Description:
|
||
// This class is derived from COXService. It can be used to iterate
|
||
// through a list of services. Because the iterator object is itself
|
||
// a service, it is easy to apply functions to each service in a list.
|
||
//
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
#ifndef __OXITERATORSERVICE_H__
|
||
#define __OXITERATORSERVICE_H__
|
||
|
||
#if _MSC_VER >= 1000
|
||
#pragma once
|
||
#endif // _MSC_VER >= 1000
|
||
|
||
#include "OXDllExt.h"
|
||
|
||
#include "OXService.h"
|
||
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
class OX_CLASS_DECL COXIteratorService : public COXService
|
||
{
|
||
// Data members -------------------------------------------------------------
|
||
public:
|
||
protected:
|
||
CStringArray m_SrvKeyNames;
|
||
CStringArray m_SrvDspNames;
|
||
int m_nPos;
|
||
private:
|
||
|
||
// Member functions ---------------------------------------------------------
|
||
public:
|
||
COXIteratorService(LPCTSTR pszKeyName = NULL);
|
||
// --- In : pszKeyName, the service key name to start with
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : Constructor
|
||
|
||
COXIteratorService(const COXService& service);
|
||
// --- In : service, the service to copy
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : Constructor
|
||
|
||
COXIteratorService(const COXIteratorService& iteratorService);
|
||
// --- In : iteratorService, the iterator service to copy
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : Constructor
|
||
|
||
COXIteratorService& operator=(const COXService& service);
|
||
// --- In : service, the service to copy
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : copy a serice
|
||
|
||
COXIteratorService& operator=(const COXIteratorService& iteratorService);
|
||
// --- In : iteratorService, the iterator service to copy
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : copy an iterator service
|
||
|
||
BOOL StartIteration(DWORD dwServiceType = SERVICE_WIN32 | SERVICE_DRIVER,
|
||
DWORD dwServiceState = SERVICE_STATE_ALL);
|
||
// --- In : dwServiceType, service type to set filter on
|
||
// dwServiceState, service state to set filter on
|
||
// --- Out :
|
||
// --- Returns : TRUE if successful (even though it may be empty());
|
||
// FALSE otherwise (use GetLastError() to check).
|
||
// --- Effect : starts the iteration. You can specify some filters
|
||
// (which type and state you are interested in).
|
||
// This object will get the new value. When this object is
|
||
// empty, the end of the iteration has been reached.
|
||
|
||
BOOL StartDependentIteration(DWORD dwServiceState = SERVICE_STATE_ALL);
|
||
// --- In : dwServiceState, service state to set filter on
|
||
// --- Out :
|
||
// --- Returns : TRUE if successful (even though it may be empty());
|
||
// FALSE otherwise (use GetLastError() to check).
|
||
// --- Effect : starts the iteration. It will iterate the services that
|
||
// depend on this service. Note that this service must
|
||
// already been given a key name. You can specify which
|
||
// state you are interested in. This object will get the
|
||
// new value. When this object is empty, the end of the
|
||
// iteration has been reached.
|
||
// The returned services entries are ordered in the reverse
|
||
// order of the start order, with group order taken into
|
||
// account. If you need to stop the dependent services,
|
||
// you can use this order to stop the dependent services
|
||
// in the proper order.
|
||
|
||
BOOL Next();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns : TRUE if successful; FALSE if already at the end (this
|
||
// will be empty)
|
||
// --- Effect : move to next service in the iteration
|
||
|
||
BOOL Prev();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns : TRUE if successful; FALSE if already at the beginning
|
||
// (this will be empty)
|
||
// --- Effect : move to previous service in the iteration
|
||
|
||
COXIteratorService& operator++();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns : resulted current service
|
||
// --- Effect : move to next service in the iteration
|
||
// if over the end, no error occurs (this will be empty).
|
||
|
||
COXIteratorService operator+(int nOffset);
|
||
// --- In : nOffset, the offset to move forward
|
||
// --- Out :
|
||
// --- Returns : resulted current service
|
||
// --- Effect : move forward nOffset positions in the iteration
|
||
// if over the end, this will be empty, and
|
||
// no error occurs. if over the beginning (when nOffset is
|
||
// negative), this will be empty, and no error occurs.
|
||
|
||
COXIteratorService& operator--();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns : resulted current service
|
||
// --- Effect : move to previous service in the iteration
|
||
// if over the beginning, no error occurs (this will be empty).
|
||
|
||
COXIteratorService operator-(int nOffset);
|
||
// --- In : nOffset, the offset to move backward
|
||
// --- Out :
|
||
// --- Returns : resulted current service
|
||
// --- Effect : move backward nOffset positions in the iteration
|
||
// if over the beginning, this will be empty, and no error
|
||
// occurs. if over the end (when nOffset is negative), this
|
||
// will be empty, and no error occurs.
|
||
|
||
void GetKeyNames(CStringArray& sBuffer);
|
||
// --- In : sBuffer, the string array to store returned key names
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : get all key names from the current iteration
|
||
|
||
void GetDisplayNames(CStringArray& sBuffer);
|
||
// --- In : sBuffer, the string array to store returned display names
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : get all display names from the current iteration
|
||
|
||
int GetServiceCount();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns : the number of services in the iteration
|
||
// --- Effect : get number of services in the iteration
|
||
|
||
void End();
|
||
// --- In :
|
||
// --- Out :
|
||
// --- Returns :
|
||
// --- Effect : terminate current iteration
|
||
|
||
protected:
|
||
void GetNamesFromESSArray(LPENUM_SERVICE_STATUS pESSArray,
|
||
DWORD dwServicesReturned);
|
||
|
||
private:
|
||
};
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
#endif // __OXITERATORSERVICE_H__
|
||
|
||
// end of OXIteratorService.h
|