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:
- Cree una instancia vacía de la clase mediante Provider::CreateNewInstance.
-
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.
- Rellene las propiedades de la instancia vacía mediante los métodos Set de la clase CInstance , como CInstance::SetByte o CInstance::SetStringArray.
- Vuelva a enviar la instancia al cliente mediante CInstance::Commit.
-
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.
Sin embargo, debe tener en cuenta lo siguiente al escribir el proveedor de marcos:
- Asegúrese de admitir consultas estándar en la clase de asociación, especialmente las consultas en las que se usan las propiedades de referencia en una cláusula WHERE. Para obtener más información, vea CFrameworkQuery::GetValuesForProp.
-
En la compatibilidad con la clase de asociación, al comprobar si existen los puntos de conexión, asegúrese de usar los métodos CWbemProviderGlue::GetInstanceKeysByPath o CWbemProviderGlue::GetInstancePropertiesByPath .
Estos métodos permiten a los puntos de conexión omitir la rellenación de propiedades innecesarias o intensivas de recursos.
- Asegúrese de que las clases de punto de conexión de asociación admiten métodos Get por propiedad. Para obtener más información, vea Compatibilidad con operaciones de Partial-Instance. Para obtener más información sobre el parámetro de consulta, vea CFrameworkQuery.
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 |