Compartir a través de


Método Provider::ExecQuery (provider.h)

[La clase Provider forma parte del marco del proveedor de WMI que ahora se considera en estado final y no habrá más desarrollo, mejoras o actualizaciones disponibles para problemas no relacionados con la seguridad que afecten a estas bibliotecas. Las API de MI se deben usar para todo el nuevo desarrollo.]

WMI llama al método ExecQuery para procesar una consulta del lenguaje de consulta WMI (WQL).

Sintaxis

HRESULT ExecQuery(
        MethodContext     *pMethodContext,
  [ref] CFrameworkQuery & cQuery,
        long              lFlags
);

Parámetros

pMethodContext

Puntero al objeto de contexto de esta llamada. Este valor contiene las propiedades IWbemContext especificadas por el cliente. Además, este puntero debe usarse como parámetro para cualquier llamada de vuelta a WMI.

[ref] cQuery

Puntero a una consulta que ya ha sido analizada por el marco de proveedor.

lFlags

Máscara de bits de marcas con información sobre la operación de ejecución de consulta. Este es el valor especificado por el cliente en el método IWbemServices::ExecQuery .

WMI controla (y filtra) las marcas siguientes:

  • WBEM_FLAG_ENSURE_LOCATABLE
  • WBEM_FLAG_FORWARD_ONLY
  • WBEM_FLAG_BIDIRECTIONAL
  • WBEM_FLAG_USE_AMENDED_QUALIFIERS
  • WBEM_FLAG_RETURN_IMMEDIATELY
  • WBEM_FLAG_PROTOTYPE

Valor devuelto

La implementación predeterminada del proveedor de marcos de este método devuelve WBEM_E_PROVIDER_NOT_CAPABLE al método que realiza la llamada. El método IWbemServices::ExecQuery enumera los valores devueltos comunes, aunque puede optar por devolver cualquier código de retorno COM.

Comentarios

WMI suele llamar a ExecQuery en respuesta a una llamada de cliente a IWbemServices::ExecQuery, donde el cliente pasa una lista de propiedades seleccionadas o una cláusula WHERE. WMI también puede llamar a ExecQuery si la consulta de cliente contiene una instrucción "ASSOCIATORS OF" o "REFERENCES OF" que describe la clase. Si la implementación de ExecQuery devuelve WBEM_E_NOT_SUPPORTED, el cliente se basa en WMI para controlar la consulta.

WMI controla una consulta llamando a la implementación de CreateInstanceEnum para proporcionar todas las instancias. A continuación, WMI filtra las instancias resultantes antes de devolver las instancias al cliente. Por lo tanto, cualquier implementación de ExecQuery que cree debe ser más eficaz que CreateInstanceEnum.

A continuación se describe una implementación común de ExecQuery:

  1. Cree una instancia vacía de la clase mediante Provider::CreateNewInstance.
  2. Determine el subconjunto de instancias que debe crear.

    Puede usar métodos como IsPropertyRequired para ver qué propiedades son necesarias y GetValuesForProp para ver qué instancias requiere WMI. Otros métodos que tratan las propiedades solicitadas incluyen CFrameworkQuery::GetRequiredProperties, CFrameworkQuery::AllPropertiesAreRequired y CFrameworkQuery::KeysOnly.

  3. Rellene las propiedades de la instancia vacía mediante los métodos Set de la clase CInstance , como CInstance::SetByte o CInstance::SetStringArray.
  4. Vuelva a enviar la instancia al cliente mediante CInstance::Commit.
  5. Devuelve los valores devueltos adecuados.

    La implementación predeterminada del proveedor del marco ExecQuery devuelve WBEM_E_PROVIDER_NOT_CAPABLE. Si implementa ExecQuery, debe usar los valores devueltos comunes enumerados en IWbemServices::ExecQuery. Sin embargo, si es necesario, puede devolver cualquier código de retorno COM.

WMI no envía consultas "ASOCIADORES OF" ni "REFERENCIAS DE" a través de proveedores de marcos. En su lugar, WMI usa el esquema para determinar qué clases están relacionadas con la clase en cuestión y genera una consulta WQL adecuada para recuperar los resultados. Por lo tanto, no es necesario codificar ninguna compatibilidad adicional con las consultas "ASOCIADORES OF" y "REFERENCES OF".

Sin embargo, debe tener en cuenta lo siguiente al escribir el proveedor de marcos:

Requisitos

   
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Plataforma de destino Windows
Encabezado provider.h (include FwCommon.h)
Library FrameDyn.lib
Archivo DLL FrameDynOS.dll; FrameDyn.dll