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.
866 lines
27 KiB
866 lines
27 KiB
/*++
|
|
|
|
Copyright (C) 1996-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
SVCQ.H
|
|
|
|
Abstract:
|
|
|
|
Declarations for asynchronous request queue classes.
|
|
|
|
Classes defined:
|
|
|
|
CAsyncReq and derivatives Asynchrnous requests to WINMGMT.
|
|
CAsyncServiceQueue The queue of such requests.
|
|
|
|
History:
|
|
|
|
a-raymcc 16-Jul-96 Created.
|
|
a-levn 12-Sep-96 Implemented a few requests.
|
|
Added LoadProviders
|
|
|
|
--*/
|
|
|
|
#ifndef _ASYNC_Q_H_
|
|
#define _ASYNC_Q_H_
|
|
|
|
class CWbemNamespace;
|
|
class CBasicObjectSink;
|
|
class CStdSink;
|
|
class CWbemObject;
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq
|
|
//
|
|
// Represents an asynchrnous request to WINMGMT, such as GetObjectAsync.
|
|
// This class is derived from CExecRequest (execq.h), a generic request for
|
|
// execution queues. For more information on queues and requests, see execq.h
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Contructor
|
|
//
|
|
// Every asynchrnous request has an IWbemObjectSink pointer associated with it.
|
|
// In addition, assigns a unique integer to this object which becomes its
|
|
// request handle.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IWbemObjectSink* pHandler The handler associated with this request.
|
|
// AddRefs and stores this pointer.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Destructor
|
|
//
|
|
// Releases the stored handler.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// GetRequestHandle
|
|
//
|
|
// Returns the unique request handle assigned to this request in constructor.
|
|
//
|
|
// RETURN VALUES:
|
|
//
|
|
// long
|
|
//
|
|
//******************************************************************************
|
|
|
|
class CAsyncReq : public CWbemRequest
|
|
{
|
|
protected:
|
|
CStdSink *m_pHandler;
|
|
long m_lRequestHandle;
|
|
|
|
void SetRequestHandle(long lHandle) {m_lRequestHandle = lHandle;}
|
|
void SetNoAuthentication(IWbemObjectSink* pHandler);
|
|
public:
|
|
CAsyncReq(IWbemObjectSink* pHandler, IWbemContext* pContext,
|
|
bool bSeparatelyThreaded = false);
|
|
virtual ~CAsyncReq();
|
|
virtual HRESULT Execute() = 0;
|
|
|
|
virtual CWbemQueue* GetQueue();
|
|
virtual BOOL IsInternal() {return TRUE;}
|
|
void TerminateRequest(HRESULT hRes);
|
|
HRESULT SetTaskHandle(_IWmiCoreHandle *phTask);
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncServiceQueue
|
|
//
|
|
// This class represents the queue of asynchrnous requests into WINMGMT (every
|
|
// request into WINMGMT becomes asynchronous, since synchronous methods call
|
|
// asynchrnous ones and wait). There is almost no additional functionality
|
|
// here, see CExecQueue in execq.h for all details
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor
|
|
//
|
|
// In addition to normal CExecQueue construction, launches the processing
|
|
// thread by calling Run.
|
|
//
|
|
//******************************************************************************
|
|
|
|
class CAsyncServiceQueue : public CWbemQueue
|
|
{
|
|
private:
|
|
BOOL m_bInit;
|
|
public:
|
|
CAsyncServiceQueue(_IWmiArbitrator * pArb);
|
|
HRESULT InitializeThread();
|
|
void UninitializeThread();
|
|
void IncThreadLimit();
|
|
void DecThreadLimit();
|
|
BOOL IsInit(){ return m_bInit; };
|
|
};
|
|
|
|
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CNamespaceReq
|
|
//
|
|
// Another abstract class, albeit derived from CAsyncReq. This one is for
|
|
// asynchrnous requests to a particular namespace.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// In addition to the CAsyncReq's IWbemObjectSink*, takes the
|
|
// namespace pointer against which the request is to be executed. Most of
|
|
// the time, the execute function calls one of Exec_... members of
|
|
// CWbemNamespace.
|
|
//
|
|
//******************************************************************************
|
|
class CNamespaceReq : public CAsyncReq
|
|
{
|
|
protected:
|
|
CWbemNamespace* m_pNamespace;
|
|
public:
|
|
CNamespaceReq(CWbemNamespace* pNamespace, IWbemObjectSink* pHandler,
|
|
IWbemContext* pContext, bool bSeparatelyThreaded = false);
|
|
virtual ~CNamespaceReq();
|
|
virtual HRESULT Execute() = 0;
|
|
static WCHAR s_DumpBuffer[128];
|
|
};
|
|
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_DeleteClassAsync
|
|
//
|
|
// Encapsulates a request to execute DeleteClassAsync against a particular
|
|
// namespace. Does it by calling Exec_DeleteClass and converting the
|
|
// results to the asynchrnous format.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN LPWSTR wszClass The class to delete.
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
class CAsyncReq_DeleteClassAsync : public CNamespaceReq
|
|
{
|
|
WString m_wsClass;
|
|
LONG m_lFlags;
|
|
|
|
public:
|
|
CAsyncReq_DeleteClassAsync(
|
|
ADDREF CWbemNamespace *pNamespace,
|
|
READONLY LPWSTR wszClass,
|
|
LONG lFlags,
|
|
ADDREF IWbemObjectSink *pHandler,
|
|
IWbemContext* pContext
|
|
) : CNamespaceReq(pNamespace, pHandler, pContext),
|
|
m_wsClass(wszClass), m_lFlags(lFlags)
|
|
{}
|
|
|
|
HRESULT Execute();
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo(){ return (WCHAR *)m_wsClass; };
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_DeleteInstanceAsync
|
|
//
|
|
// Encapsulates a request to execute DeleteInstanceAsync against a particular
|
|
// namespace. Does it by calling Exec_DeleteInstance and converting the
|
|
// results to the asynchrnous format.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN LPWSTR wszObjectPath The path to the instance to delete.
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
class CAsyncReq_DeleteInstanceAsync : public CNamespaceReq
|
|
{
|
|
WString m_wsPath;
|
|
LONG m_lFlags;
|
|
|
|
public:
|
|
CAsyncReq_DeleteInstanceAsync(
|
|
ADDREF CWbemNamespace *pNamespace,
|
|
READONLY LPWSTR wszPath,
|
|
LONG lFlags,
|
|
ADDREF IWbemObjectSink *pHandler,
|
|
IWbemContext* pContext
|
|
) : CNamespaceReq(pNamespace, pHandler, pContext), m_wsPath(wszPath),
|
|
m_lFlags(lFlags)
|
|
{}
|
|
|
|
HRESULT Execute();
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo(){ return (WCHAR *)m_wsPath; };
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_PutClassAsync
|
|
//
|
|
// Encapsulates a request to execute PutClassAsync against a particular
|
|
// namespace. Does it by calling Exec_PutClass and converting the
|
|
// results to the asynchrnous format.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN IWbemClassObject* pClass The class to put.
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
class CAsyncReq_PutClassAsync : public CNamespaceReq
|
|
{
|
|
IWbemClassObject* m_pClass;
|
|
LONG m_lFlags;
|
|
|
|
public:
|
|
CAsyncReq_PutClassAsync(
|
|
ADDREF CWbemNamespace *pNamespace,
|
|
ADDREF IWbemClassObject* pClass,
|
|
LONG lFlags,
|
|
ADDREF IWbemObjectSink *pHandler,
|
|
ADDREF IWbemContext* pContext
|
|
) : CNamespaceReq(pNamespace, pHandler, pContext), m_pClass(pClass),
|
|
m_lFlags(lFlags)
|
|
{
|
|
m_pClass->AddRef();
|
|
}
|
|
|
|
~CAsyncReq_PutClassAsync()
|
|
{
|
|
m_pClass->Release();
|
|
}
|
|
HRESULT Execute();
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo()
|
|
{
|
|
_variant_t varClass;
|
|
if (FAILED(m_pClass->Get(L"__CLASS",0,&varClass,0,0))) return L"";
|
|
if (VT_BSTR == V_VT(&varClass))
|
|
{
|
|
StringCchCopyW(CNamespaceReq::s_DumpBuffer,LENGTH_OF(CNamespaceReq::s_DumpBuffer)-1,V_BSTR(&varClass));
|
|
return CNamespaceReq::s_DumpBuffer;
|
|
}
|
|
else return L"";
|
|
};
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_PutInstanceAsync
|
|
//
|
|
// Encapsulates a request to execute PutInstanceAsync against a particular
|
|
// namespace. Does it by calling Exec_PutInstance and converting the
|
|
// results to the asynchrnous format.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN IWbemClassObject* pInstance The instance to put.
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
class CAsyncReq_PutInstanceAsync : public CNamespaceReq
|
|
{
|
|
IWbemClassObject* m_pInstance;
|
|
LONG m_lFlags;
|
|
|
|
public:
|
|
CAsyncReq_PutInstanceAsync(
|
|
ADDREF CWbemNamespace *pNamespace,
|
|
ADDREF IWbemClassObject* pInstance,
|
|
LONG lFlags,
|
|
ADDREF IWbemObjectSink *pHandler,
|
|
ADDREF IWbemContext* pContext
|
|
) : CNamespaceReq(pNamespace, pHandler, pContext),
|
|
m_pInstance(pInstance), m_lFlags(lFlags)
|
|
{
|
|
m_pInstance->AddRef();
|
|
}
|
|
|
|
~CAsyncReq_PutInstanceAsync()
|
|
{
|
|
m_pInstance->Release();
|
|
}
|
|
HRESULT Execute();
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo()
|
|
{
|
|
_variant_t varRelPath;
|
|
if (FAILED(m_pInstance->Get(L"__RELPATH",0,&varRelPath,0,0))) return L"";
|
|
if (VT_BSTR == V_VT(&varRelPath))
|
|
{
|
|
StringCchCopyW(CNamespaceReq::s_DumpBuffer,LENGTH_OF(CNamespaceReq::s_DumpBuffer)-1,V_BSTR(&varRelPath));
|
|
return CNamespaceReq::s_DumpBuffer;
|
|
}
|
|
else return L"";
|
|
};
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_CreateClassEnumAsync
|
|
//
|
|
// Encapsulates a request to execute CreateClassEnumAsync against a particular
|
|
// namespace. Does it by calling Exec_CreateClassEnum and converting the
|
|
// results to the asynchrnous format.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN BSTR Parent The name of the parent class. If NULL,
|
|
// start at the top level.
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
class CAsyncReq_CreateClassEnumAsync : public CNamespaceReq
|
|
{
|
|
WString m_wsParent;
|
|
LONG m_lFlags;
|
|
|
|
public:
|
|
CAsyncReq_CreateClassEnumAsync(CWbemNamespace* pNamespace,
|
|
BSTR Parent, LONG lFlags, ADDREF IWbemObjectSink* pHandler,
|
|
ADDREF IWbemContext* pContext
|
|
) : CNamespaceReq(pNamespace, pHandler, pContext), m_wsParent(Parent),
|
|
m_lFlags(lFlags)
|
|
{}
|
|
HRESULT Execute();
|
|
virtual BOOL IsLongRunning() {return TRUE;}
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo(){ return (WCHAR *)m_wsParent; };
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_CreateInstanceEnumAsync
|
|
//
|
|
// Encapsulates a request to execute CreateInstanceEnumAsync against a
|
|
// particular
|
|
// namespace. Does it by calling Exec_CreateInstanceEnum and converting the
|
|
// results to the asynchrnous format.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN BSTR Class The name of the class.
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
|
|
class CAsyncReq_CreateInstanceEnumAsync : public CNamespaceReq
|
|
{
|
|
WString m_wsClass;
|
|
LONG m_lFlags;
|
|
public:
|
|
CAsyncReq_CreateInstanceEnumAsync(
|
|
CWbemNamespace* pNamespace, BSTR Class, LONG lFlags,
|
|
ADDREF IWbemObjectSink *pHandler,
|
|
ADDREF IWbemContext* pContext)
|
|
: CNamespaceReq(pNamespace, pHandler, pContext), m_wsClass(Class),
|
|
m_lFlags(lFlags)
|
|
{}
|
|
HRESULT Execute();
|
|
virtual BOOL IsLongRunning() {return TRUE;}
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo(){ return (WCHAR *)m_wsClass; };
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_GetObjectByPathAsync
|
|
//
|
|
// Encapsulates a request to execute GetObjectAsync against a
|
|
// particular
|
|
// namespace. Does it by calling Exec_GetObjectByPath and converting the
|
|
// results to the asynchrnous format.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN BSTR ObjectPath The path to the object to get.
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
class CAsyncReq_GetObjectAsync : public CNamespaceReq
|
|
{
|
|
WString m_wsObjectPath;
|
|
long m_lFlags;
|
|
|
|
public:
|
|
CAsyncReq_GetObjectAsync(
|
|
CWbemNamespace* pNamespace, BSTR ObjectPath, long lFlags,
|
|
ADDREF IWbemObjectSink *pHandler, ADDREF IWbemContext* pContext) :
|
|
CNamespaceReq(pNamespace, pHandler, pContext),
|
|
m_wsObjectPath(ObjectPath), m_lFlags(lFlags)
|
|
{}
|
|
|
|
HRESULT Execute();
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo(){ return (WCHAR *)m_wsObjectPath; };
|
|
};
|
|
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_ExecMethodAsync
|
|
//
|
|
// Encapsulates a request to execute ExecMethodAsync against a
|
|
// particular
|
|
// namespace. Does it by calling Exec_ExecMethodAsync and converting the
|
|
// results to the asynchrnous format.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN BSTR ObjectPath The path to the object to get.
|
|
// IN BSTR MethodName The name of the method
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemClassObject* pInParams The in-parameter of the method
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
class CAsyncReq_ExecMethodAsync : public CNamespaceReq
|
|
{
|
|
WString m_wsObjectPath;
|
|
WString m_wsMethodName;
|
|
IWbemClassObject* m_pInParams;
|
|
long m_lFlags;
|
|
|
|
public:
|
|
CAsyncReq_ExecMethodAsync(
|
|
CWbemNamespace* pNamespace,
|
|
BSTR ObjectPath,
|
|
BSTR MethodName,
|
|
long lFlags,
|
|
IWbemClassObject* pInParams,
|
|
ADDREF IWbemObjectSink *pHandler,
|
|
ADDREF IWbemContext* pContext)
|
|
: CNamespaceReq(pNamespace, pHandler, pContext),
|
|
m_wsObjectPath(ObjectPath), m_wsMethodName(MethodName),
|
|
m_pInParams(pInParams), m_lFlags(lFlags)
|
|
{
|
|
if(m_pInParams)
|
|
m_pInParams->AddRef();
|
|
}
|
|
|
|
~CAsyncReq_ExecMethodAsync()
|
|
{
|
|
if(m_pInParams)
|
|
m_pInParams->Release();
|
|
}
|
|
HRESULT Execute();
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo(){ return (WCHAR *)m_wsMethodName; };
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_ExecQueryAsync
|
|
//
|
|
// Encapsulates a request to execute ExecQueryAsync against a
|
|
// particular
|
|
// namespace. Does it by calling CQueryEngine::ExecQuery and converting the
|
|
// results to the asynchrnous format.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN BSTR QueryFormat The query language
|
|
// IN BSTR Query The query string.
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
class CAsyncReq_ExecQueryAsync : public CNamespaceReq
|
|
{
|
|
WString m_wsQueryFormat;
|
|
WString m_wsQuery;
|
|
long m_lFlags;
|
|
|
|
public:
|
|
CAsyncReq_ExecQueryAsync(CWbemNamespace* pNamespace,
|
|
BSTR QueryFormat, BSTR Query, long lFlags,
|
|
IWbemObjectSink *pHandler, IWbemContext* pContext) :
|
|
CNamespaceReq(pNamespace, pHandler, pContext),
|
|
m_wsQueryFormat(QueryFormat), m_wsQuery(Query), m_lFlags(lFlags)
|
|
{}
|
|
HRESULT Execute();
|
|
virtual BOOL IsLongRunning() {return TRUE;}
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo(){ return (WCHAR *)m_wsQuery; };
|
|
};
|
|
|
|
|
|
//******************************************************************************
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
class CCallResult;
|
|
class CAsyncReq_OpenNamespace : public CAsyncReq
|
|
{
|
|
CWbemNamespace* m_pParentNs;
|
|
WString m_wsNamespace;
|
|
long m_lSecurityFlags;
|
|
DWORD m_dwPermission;
|
|
CCallResult* m_pResult;
|
|
bool m_bForClient;
|
|
|
|
public:
|
|
CAsyncReq_OpenNamespace(CWbemNamespace* pParentNs, LPWSTR wszNamespace,
|
|
long lSecurityFlags, DWORD dwPermission,
|
|
IWbemContext* pContext, CCallResult* pResult, bool bForClient);
|
|
~CAsyncReq_OpenNamespace();
|
|
HRESULT Execute();
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo(){ return (WCHAR *)m_wsNamespace; };
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_ExecNotificationQueryAsync
|
|
//
|
|
// Encapsulates a request to execute ExecNotificationQueryAsync against a
|
|
// particular
|
|
// namespace. Does it by calling ESS RegisterNotificationSink.
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
// IN CWbemNamespace* pNamespace The namespace to execute against.
|
|
// IN BSTR QueryFormat The query language
|
|
// IN BSTR Query The query string.
|
|
// IN LONG lFlags Flags
|
|
// IN IWbemObjectSink* pHandler The handler to put results in.
|
|
//
|
|
//******************************************************************************
|
|
class CAsyncReq_ExecNotificationQueryAsync : public CNamespaceReq
|
|
{
|
|
WString m_wsQueryFormat;
|
|
WString m_wsQuery;
|
|
long m_lFlags;
|
|
HRESULT *m_phRes;
|
|
IWbemEventSubsystem_m4* m_pEss;
|
|
HANDLE m_hEssDoneEvent;
|
|
|
|
public:
|
|
CAsyncReq_ExecNotificationQueryAsync(CWbemNamespace* pNamespace,
|
|
IWbemEventSubsystem_m4* pEss,
|
|
BSTR QueryFormat, BSTR Query, long lFlags,
|
|
IWbemObjectSink *pHandler, IWbemContext* pContext, HRESULT* phRes,
|
|
HANDLE hEssApprovalEvent
|
|
);
|
|
~CAsyncReq_ExecNotificationQueryAsync();
|
|
HRESULT Execute();
|
|
virtual BOOL IsLongRunning() {return TRUE;}
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo(){ return (WCHAR *)m_wsQuery; };
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_CancelAsyncCall
|
|
//
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
//
|
|
//******************************************************************************
|
|
|
|
class CAsyncReq_CancelAsyncCall : public CAsyncReq
|
|
{
|
|
protected:
|
|
HRESULT* m_phres;
|
|
IWbemObjectSink* m_pSink;
|
|
|
|
public:
|
|
CAsyncReq_CancelAsyncCall(IWbemObjectSink* pSink, HRESULT* phres);
|
|
~CAsyncReq_CancelAsyncCall();
|
|
HRESULT Execute();
|
|
void DumpError(){ DEBUGTRACE((LOG_WBEMCORE,
|
|
"CAsyncReq_CancelAsyncCall call failed\n"));};
|
|
LPCWSTR GetReqInfo()
|
|
{
|
|
StringCchPrintfW(CNamespaceReq::s_DumpBuffer,LENGTH_OF(CNamespaceReq::s_DumpBuffer)-1,L"CancelAsyncCall for sink %p",m_pSink);
|
|
return CNamespaceReq::s_DumpBuffer;
|
|
};
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_CancelProvAsyncCall
|
|
//
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
//
|
|
//******************************************************************************
|
|
|
|
class CAsyncReq_CancelProvAsyncCall : public CAsyncReq
|
|
{
|
|
protected:
|
|
IWbemServices* m_pProv;
|
|
IWbemObjectSink* m_pSink;
|
|
IWbemObjectSink* m_pStatusSink;
|
|
|
|
public:
|
|
CAsyncReq_CancelProvAsyncCall( IWbemServices* pProv, IWbemObjectSink* pSink,
|
|
IWbemObjectSink* pStatusSink );
|
|
~CAsyncReq_CancelProvAsyncCall();
|
|
HRESULT Execute();
|
|
void DumpError(){ DEBUGTRACE((LOG_WBEMCORE,
|
|
"CAsyncReq_CancelProvAsyncCall call failed\n"));};
|
|
LPCWSTR GetReqInfo()
|
|
{
|
|
StringCchPrintfW(CNamespaceReq::s_DumpBuffer,LENGTH_OF(CNamespaceReq::s_DumpBuffer)-1,L"CancelProvAsyncCall for sink %p",m_pProv);
|
|
return CNamespaceReq::s_DumpBuffer;
|
|
};
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_DynAux_GetInstances
|
|
//
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
//
|
|
// READONLY CWbemObject *pClassDef,
|
|
// long lFlags,
|
|
// IWbemContext* pCtx,
|
|
// CBasicObjectSink* pSink
|
|
//
|
|
//******************************************************************************
|
|
|
|
class CAsyncReq_DynAux_GetInstances : public CNamespaceReq
|
|
{
|
|
private:
|
|
|
|
CWbemObject *m_pClassDef ;
|
|
IWbemContext *m_pCtx ;
|
|
long m_lFlags ;
|
|
CBasicObjectSink *m_pSink ;
|
|
|
|
public:
|
|
|
|
CAsyncReq_DynAux_GetInstances (
|
|
CWbemNamespace *pNamespace ,
|
|
CWbemObject *pClassDef ,
|
|
long lFlags ,
|
|
IWbemContext *pCtx ,
|
|
CBasicObjectSink *pSink);
|
|
|
|
~CAsyncReq_DynAux_GetInstances();
|
|
|
|
HRESULT Execute ();
|
|
virtual BOOL IsLongRunning() {return TRUE;}
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo()
|
|
{
|
|
_variant_t varClass;
|
|
if (FAILED(m_pClassDef->Get(L"__CLASS",0,&varClass,0,0))) return L"";
|
|
if (VT_BSTR == V_VT(&varClass))
|
|
{
|
|
StringCchCopyW(CNamespaceReq::s_DumpBuffer,LENGTH_OF(CNamespaceReq::s_DumpBuffer)-1,V_BSTR(&varClass));
|
|
return CNamespaceReq::s_DumpBuffer;
|
|
}
|
|
else return L"";
|
|
};
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CAsyncReq_DynAux_ExecQueryAsync
|
|
//
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor.
|
|
//
|
|
// PARAMETERS:
|
|
//
|
|
//
|
|
// CWbemNamespace *pNamespace ,
|
|
// CWbemObject *pClassDef ,
|
|
// LPWSTR Query,
|
|
// LPWSTR QueryFormat,
|
|
// long lFlags ,
|
|
// IWbemContext *pCtx ,
|
|
// CBasicObjectSink *pSink
|
|
//
|
|
//******************************************************************************
|
|
|
|
class CAsyncReq_DynAux_ExecQueryAsync : public CNamespaceReq
|
|
{
|
|
private:
|
|
CWbemObject *m_pClassDef ;
|
|
LPWSTR m_Query ;
|
|
LPWSTR m_QueryFormat ;
|
|
IWbemContext *m_pCtx ;
|
|
long m_lFlags ;
|
|
CBasicObjectSink *m_pSink ;
|
|
HRESULT m_Result ;
|
|
public:
|
|
|
|
CAsyncReq_DynAux_ExecQueryAsync (CWbemNamespace *pNamespace ,
|
|
CWbemObject *pClassDef ,
|
|
LPWSTR Query,
|
|
LPWSTR QueryFormat,
|
|
long lFlags ,
|
|
IWbemContext *pCtx ,
|
|
CBasicObjectSink *pSink);
|
|
|
|
~CAsyncReq_DynAux_ExecQueryAsync();
|
|
|
|
HRESULT Initialize ()
|
|
{
|
|
return m_Result ;
|
|
}
|
|
|
|
HRESULT Execute ();
|
|
virtual BOOL IsLongRunning() {return TRUE;}
|
|
void DumpError();
|
|
LPCWSTR GetReqInfo()
|
|
{
|
|
return (WCHAR * )m_Query;
|
|
};
|
|
};
|
|
|
|
class CAsyncReq_RemoveNotifySink : public CAsyncReq
|
|
{
|
|
private:
|
|
IWbemObjectSink * m_pSink;
|
|
IWbemObjectSink* m_pStatusSink;
|
|
public:
|
|
CAsyncReq_RemoveNotifySink(IWbemObjectSink* pSink, IWbemObjectSink* pStatusSink);
|
|
~CAsyncReq_RemoveNotifySink();
|
|
HRESULT Execute();
|
|
void DumpError(){};
|
|
LPCWSTR GetReqInfo()
|
|
{
|
|
StringCchPrintfW(CNamespaceReq::s_DumpBuffer,LENGTH_OF(CNamespaceReq::s_DumpBuffer)-1,L"RemoveNotifySink for sink %p",m_pSink);
|
|
return CNamespaceReq::s_DumpBuffer;
|
|
};
|
|
|
|
void SetStatusSink(IWbemObjectSink * pStatusSink)
|
|
{
|
|
if (m_pStatusSink) m_pStatusSink->Release();
|
|
m_pStatusSink = pStatusSink;
|
|
if (m_pStatusSink) m_pStatusSink->AddRef();
|
|
}
|
|
void SetSink(IWbemObjectSink * pSink)
|
|
{
|
|
if (m_pSink) m_pSink->Release();
|
|
m_pSink = pSink;
|
|
if (m_pSink) m_pSink->AddRef();
|
|
}
|
|
};
|
|
|
|
#endif
|