Función DevCreateObjectQueryFromId (devquery.h)
Crea una consulta de dispositivo para recuperar propiedades basadas en los parámetros de consulta y el identificador de objeto especificados.
Sintaxis
HRESULT DevCreateObjectQueryFromId(
[in] DEV_OBJECT_TYPE ObjectType,
[in] PCWSTR pszObjectId,
[in] ULONG QueryFlags,
[in] ULONG cRequestedProperties,
[in, optional] const DEVPROPCOMPKEY *pRequestedProperties,
[in] ULONG cFilterExpressionCount,
[in, optional] const DEVPROP_FILTER_EXPRESSION *pFilter,
[in] PDEV_QUERY_RESULT_CALLBACK pCallback,
[in, optional] PVOID pContext,
[out] PHDEVQUERY phDevQuery
);
Parámetros
[in] ObjectType
Valor de la enumeración DEV_OBJECT_TYPE que determina el tipo de objeto en el que debe funcionar esta consulta.
[in] pszObjectId
Identificador de cadena del objeto en el que debe funcionar la consulta.
[in] QueryFlags
Combinación de DEV_QUERY_FLAGS valores que se combinan mediante una operación OR bit a bit.
[in] cRequestedProperties
Número de estructuras de
[in, optional] pRequestedProperties
Opcionalmente, proporciona una matriz de estructuras de DEVPROPCOMPKEY que especifican las propiedades que se deben recuperar para los objetos del conjunto de resultados de la consulta cuando se llama a pCallback para notificar a la consulta una adición de un objeto a su conjunto de resultados.
Si se especificó DevQueryFlagUpdateResults en QueryFlags, se notificará a la consulta si el valor de cualquiera de estas propiedades cambia para cualquier objeto del conjunto de resultados de la consulta.
El campo LocaleName del estructura de DEVPROPCOMPKEY se omite y debe establecerse en NULL.
Si cRequestedProperties es 0, debe ser NULL.
[in] cFilterExpressionCount
Número de estructuras de DEVPROP_FILTER_EXPRESSION proporcionadas en pFilter.
[in, optional] pFilter
Opcionalmente, proporciona una matriz de estructuras de DEVPROP_FILTER_EXPRESSION que especifican criterios de filtro para qué objetos deben formar parte del conjunto de resultados de la consulta. Si cFilterExpressionCount es 0, debe ser NULL.
[in] pCallback
Una función de devolución de llamada PDEV_QUERY_RESULT_CALLBACK a la que se deben enviar los resultados de esta consulta.
[in, optional] pContext
Contexto proporcionado por el autor de la llamada. Este valor se pasa a la función de devolución de llamada sin modificar.
[out] phDevQuery
Puntero que recibe el identificador que representa la consulta. Si se especifica DevQueryFlagsUpdateResults, la consulta recibirá actualizaciones hasta que se cierre el identificador. Llame a DevCloseObjectQuery para cerrar este identificador para detener la consulta.
Valor devuelto
S_OK se devuelve si una consulta se creó correctamente; de lo contrario, es un valor de error adecuado.
Observaciones
Cuando un cliente quiere recuperar datos sobre un objeto específico dada su identidad, use esta función en lugar de DevCreateObjectQuery con un filtro. Esta función es más eficaz.
Para obtener más información, vea la sección comentarios de DevCreateObjectQuery, que también se aplican a esta función.
Ejemplos
En el ejemplo siguiente, el método PDEV_QUERY_RESULT_CALLBACK se implementa para imprimir mensajes de estado cuando cambia el estado de la consulta, cuando los elementos se han agregado, actualizado o quitado del resultado de la consulta. A continuación, se implementa un escenario de consulta simple en el que se llama a
void WINAPI
Example1Callback(
HDEVQUERY hDevQuery,
PVOID pContext,
const DEV_QUERY_RESULT_ACTION_DATA *pActionData
)
{
UNREFERENCED_PARAMETER(hDevQuery);
UNREFERENCED_PARAMETER(pContext);
switch (pActionData->Action)
{
case DevQueryResultStateChange:
if (pActionData->Data.State == DevQueryStateEnumCompleted)
{
wprintf(L"Enumeration of current system state complete.\n");
}
else if (pActionData->Data.State == DevQueryStateAborted)
{
wprintf(L"Query has aborted. No further results will be received.\n");
// Communicate back to the creator of the query that it has aborted
// so it can handle that appropriately, such as by recreating the
// query
}
break;
case DevQueryResultAdd:
wprintf(L"Object '%ws' has been added to the result set.\n",
pActionData->Data.DeviceObject.pszObjectId);
break;
case DevQueryResultUpdate:
wprintf(L"Object '%ws' was updated.\n",
pActionData->Data.DeviceObject.pszObjectId);
break;
case DevQueryResultRemove:
wprintf(L"Object '%ws' has been removed from the result set.\n",
pActionData->Data.DeviceObject.pszObjectId);
break;
}
}
void
Example1(PCWSTR InterfacePath)
{
DEVPROPCOMPKEY RequestedProperties[] =
{
{ DEVPKEY_DeviceInterface_Enabled, DEVPROP_STORE_SYSTEM, NULL },
{ DEVPKEY_DeviceInterface_FriendlyName, DEVPROP_STORE_SYSTEM, NULL }
};
HDEVQUERY hDevQuery = NULL;
HRESULT hr = DevCreateObjectQueryFromId(DevObjectTypeDeviceInterface,
InterfacePath,
DevQueryFlagUpdateResults,
RTL_NUMBER_OF(RequestedProperties),
RequestedProperties,
0,
NULL,
Example1Callback,
NULL,
&hDevQuery);
if (FAILED(hr))
{
wprintf(L"Failed to create query. hr = 0x%08x\n", hr);
goto exit;
}
// do other work while the query monitors system state in the background
exit:
if (hDevQuery != NULL)
{
DevCloseObjectQuery(hDevQuery);
}
return;
}
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 10, versión 1809 |
encabezado de |
devquery.h |
biblioteca de |
Onecore.lib |
DLL de |
Cfgmgr32.dll |