DevCreateObjectQueryFromId-Funktion (devquery.h)
Erstellt eine Geräteabfrage, um Eigenschaften basierend auf den angegebenen Abfrageparametern und der Objekt-ID abzurufen.
Syntax
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
);
Parameter
[in] ObjectType
Ein Wert aus der DEV_OBJECT_TYPE-Aufzählung, der den Objekttyp bestimmt, für den diese Abfrage ausgeführt werden soll.
[in] pszObjectId
Der Zeichenfolgenbezeichner für das Objekt, für das die Abfrage ausgeführt werden soll.
[in] QueryFlags
Eine Kombination aus DEV_QUERY_FLAGS Werten, die mithilfe eines bitweisen OR-Vorgangs kombiniert werden.
[in] cRequestedProperties
Die Anzahl der DEVPROPCOMPKEY- Strukturen, die in pRequestedPropertiesbereitgestellt werden. Wenn DevQueryFlagAllProperties- angegeben ist, muss dies auf 0 festgelegt werden.
[in, optional] pRequestedProperties
Stellt optional ein Array von DEVPROPCOMPKEY- Strukturen bereit, die die Eigenschaften angeben, die für Objekte im Resultset der Abfrage abgerufen werden sollen, wenn pCallback- aufgerufen wird, um die Abfrage über das Hinzufügen eines Objekts zu seinem Resultset zu benachrichtigen.
Wenn DevQueryFlagUpdateResults- in QueryFlags-angegeben wurde, wird die Abfrage benachrichtigt, wenn sich der Wert dieser Eigenschaften für ein Objekt im Resultset der Abfrage ändert.
Das LocaleName- Feld der DEVPROPCOMPKEY- Struktur wird ignoriert und muss auf NULL festgelegt werden.
Wenn cRequestedProperties 0 ist, muss dies NULL sein.
[in] cFilterExpressionCount
Die Anzahl der in pFilterbereitgestellten DEVPROP_FILTER_EXPRESSION Strukturen.
[in, optional] pFilter
Stellt optional ein Array von DEVPROP_FILTER_EXPRESSION Strukturen bereit, die Filterkriterien für die Objekte angeben, die Teil des Resultsets der Abfrage sein sollen. Wenn cFilterExpressionCount 0 ist, muss dies NULL sein.
[in] pCallback
Eine PDEV_QUERY_RESULT_CALLBACK Rückruffunktion, an die Ergebnisse für diese Abfrage gesendet werden sollen.
[in, optional] pContext
Vom Aufrufer bereitgestellter Kontext. Dieser Wert wird an die Rückruffunktion übergeben, die nicht geändert wurde.
[out] phDevQuery
Zeiger, der das Handle empfängt, das die Abfrage darstellt. Wenn DevQueryFlagsUpdateResults- angegeben ist, empfängt die Abfrage Updates, bis das Handle geschlossen ist. Rufen Sie DevCloseObjectQuery auf, um dieses Handle zu schließen, um die Abfrage zu beenden.
Rückgabewert
S_OK wird zurückgegeben, wenn eine Abfrage erfolgreich erstellt wurde; andernfalls ein entsprechender Fehlerwert.
Bemerkungen
Wenn ein Client Daten zu einem bestimmten Objekt anhand seiner Identität abrufen möchte, verwenden Sie diese Funktion anstelle DevCreateObjectQuery- mit einem Filter. Diese Funktion ist effizienter.
Weitere Informationen finden Sie im Abschnitt "Hinweise" DevCreateObjectQuery, der auch für diese Funktion gilt.
Beispiele
Im folgenden Beispiel wird die PDEV_QUERY_RESULT_CALLBACK-Methode implementiert, um Statusmeldungen auszudrucken, wenn sich der Abfragestatus ändert, wenn Elemente dem Abfrageergebnis hinzugefügt, aktualisiert oder daraus entfernt wurden. Als Nächstes wird ein einfaches Abfrageszenario implementiert, in dem DevCreateObjectQueryFromId mit der durch die Variable InterfacePathangegebenen Objekt-ID aufgerufen wird.
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;
}
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 10, Version 1809 |
Header- | devquery.h |
Library | Onecore.lib |
DLL- | Cfgmgr32.dll |