Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los proveedores pueden llamar a métodos implementados por WMI desde sus implementaciones de método. Sin embargo, hay consideraciones especiales cuando un proveedor llama a la implementación WMI de un método IWbemServices desde su propia implementación del mismo método. Estas consideraciones son importantes independientemente de si el proveedor llama a la versión sincrónica o asincrónica del método.
Cada método IWbemServices que un proveedor puede implementar tiene un parámetro pCtx , un puntero a una implementación de la interfaz IWbemContext . Cuando WMI llama al proveedor, WMI pasa un puntero válido en este parámetro. Un proveedor siempre debe pasar este mismo puntero en cualquier llamada a WMI que realice mientras atiende solicitudes. El abandono de establecer pCtx adecuadamente puede hacer que WMI inicie un bucle infinito.
En el ejemplo de código siguiente se muestra la manera correcta de llamar a la implementación WMI de GetObject desde una implementación de GetObjectAsync.
STDMETHODIMP CClassProv::GetObjectAsync (BSTR ObjectPath,
long lFlags, IWbemContext *pCtx,
IWbemObjectSink *pHandler)
{
IWbemClassObject *pclObj = NULL;
IWbemServices* m_pNamespace;
HRESULT hr = m_pNamespace->GetObject(
_bstr_t(L"AClass"), 0, pCtx, &pclObj,
NULL );
pclObj->Release();
return pHandler->SetStatus(0, hr, NULL, NULL);
}
El ejemplo de código de C++ de este tema requiere las siguientes referencias y directivas #include para compilar correctamente.
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
Los proveedores de instancias, clases y propiedades no deben emitir ninguna llamada a WMI que solicite la modificación de los datos durante el mantenimiento de una solicitud de lectura. Los únicos proveedores que son excepciones a esta regla son los proveedores de push. Un proveedor de envío es un proveedor de clases que almacena datos en el repositorio WMI y se basa en WMI para gestionar las solicitudes de los clientes. Durante la atención de una solicitud de lectura, un proveedor de empuje puede actualizar el repositorio WMI, pero debe establecer el parámetro lFlags en WBEM_FLAG_OWNER_UPDATE en la llamada adecuada de IWbemServices.
Los proveedores de eventos no deben realizar ningún cambio de clase mientras gestionan una llamada. Tampoco pueden emitir llamadas relacionadas con eventos, como modificar un filtro de eventos.
Temas relacionados