Freigeben über


DevGetObjectPropertiesEx-Funktion (devquery.h)

Synchrones Abrufen einer Gruppe von Eigenschaften für ein angegebenes Objekt optional basierend auf den angegebenen erweiterten Parametern.

Syntax

HRESULT DevGetObjectPropertiesEx(
  [in]  DEV_OBJECT_TYPE           ObjectType,
  [in]  PCWSTR                    pszObjectId,
  [in]  ULONG                     QueryFlags,
  [in]  ULONG                     cRequestedProperties,
  [in]  const DEVPROPCOMPKEY      *pRequestedProperties,
  [in]  ULONG                     cExtendedParameterCount,
  [in]  const DEV_QUERY_PARAMETER *pExtendedParameters,
  [out] PULONG                    pcPropertyCount,
  [out] const DEVPROPERTY         **ppProperties
);

Parameter

[in] ObjectType

Ein Wert aus dem DEV_OBJECT_TYPE, der den Objekttyp bestimmt, für den Eigenschaften abgerufen werden sollen.

[in] pszObjectId

Die Identität des Objekts, für das Eigenschaften abgerufen werden sollen.

[in] QueryFlags

Eine Kombination aus DEV_QUERY_FLAGS Werten, die mithilfe eines bitweisen OR-Vorgangs kombiniert werden. Es ist ungültig, entweder DevQueryFlagUpdateResults oder DevQueryFlagAsyncClose- an diese Funktion zu übergeben.

[in] cRequestedProperties

Die Anzahl der DEVPROPCOMPKEY- Strukturen, die in pRequestedPropertiesbereitgestellt werden. Wenn DevQueryFlagAllProperties- angegeben ist, muss dies auf 0 festgelegt werden.

[in] pRequestedProperties

Stellt ein Array von DEVPROPCOMPKEY Strukturen bereit, die die Eigenschaften angeben, die für das angegebene Objekt abgerufen werden sollen.

Das LocaleName- Feld der DEVPROPCOMPKEY- Struktur wird ignoriert und muss auf NULL festgelegt werden.

Wenn cRequestedProperties 0 ist, muss dies NULL sein.

[in] cExtendedParameterCount

Reserviert für die Systemverwendung. Muss auf 0 festgelegt sein.

[in] pExtendedParameters

Reserviert für die Systemverwendung. Muss auf NULL festgelegt werden.

[out] pcPropertyCount

Die Anzahl der DEVPROPERTY- Strukturen, die in ppProperties-zurückgegeben werden.

[out] ppProperties

Zeiger, der das neu zugeordnete Array von DEVPROPERTY- Ergebnissen empfängt. Aufrufer müssen den Zeiger mit DevFreeObjectPropertiesfreigeben.

Rückgabewert

S_OK wird zurückgegeben, wenn die Funktion die Suchkriterien erfolgreich ausgewertet und übereinstimmende Objekte zurückgegeben hat; andernfalls ein entsprechender Fehlerwert.

Bemerkungen

Diese Funktion ist eine effiziente Möglichkeit, einen Satz von Eigenschaften aus einem Objekt anhand seines Typs und seiner Identität synchron abzurufen. Das Array der zurückgegebenen Eigenschaften muss mit DevFreeObjectPropertiesfreigegeben werden. Wenn keine angeforderte Eigenschaft vorhanden ist, enthält ppProperties- weiterhin einen Eintrag für diese Eigenschaft, aber der Eintrag hat einen Typ von DEVPROP_TYPE_EMPTY.

Beispiel

Im folgenden Beispiel wird veranschaulicht, DevGetObjectPropertiesEx- aufgerufen wird, um eine Reihe angeforderter Eigenschaften abzurufen und dann DevFindProperty- aufzurufen, um eine bestimmte Eigenschaft innerhalb eines Arrays von DEVPROPERTY- Strukturen zu finden.

void
Example1(PCWSTR DeviceInstancePath)
{
    HRESULT hr = S_OK;
    const DEVPROPERTY* TempProperty = NULL;
    ULONG PropertyCount = 0;
    const DEVPROPERTY* PropertyList = NULL;
    DEVPROPCOMPKEY RequestedProperties[] =
    {
        { DEVPKEY_Device_HardwareIds, DEVPROP_STORE_SYSTEM, NULL },
        { DEVPKEY_Device_CompatibleIds, DEVPROP_STORE_SYSTEM, NULL }
    };

    hr = DevGetObjectPropertiesEx(DevObjectTypeDevice,
                                  DeviceInstancePath,
                                  DevQueryFlagNone,
                                  RTL_NUMBER_OF(RequestedProperties),
                                  RequestedProperties,
                                  0,
                                  NULL,
                                  &PropertyCount,
                                  &PropertyList);

    if (FAILED(hr))
    {
        wprintf(L"Failed to retrieve properties. hr = 0x%08x\n", hr);
        goto exit;
    }

    wprintf(L"Hardware IDs:\n");
    TempProperty = DevFindProperty(&DEVPKEY_Device_HardwareIds,
                                   DEVPROP_STORE_SYSTEM,
                                   NULL,
                                   PropertyCount,
                                   PropertyList);

    if ((TempProperty == NULL) ||
        (TempProperty->Type == DEVPROP_TYPE_EMPTY) ||
        (TempProperty->Buffer == NULL))
    {
        wprintf(L"<none>\n");
    }
    else if ((TempProperty->Type != DEVPROP_TYPE_STRING_LIST) ||
             (TempProperty->BufferSize < sizeof(WCHAR)))
    {
        wprintf(L"Device '%ws' has a corrupted Hardware IDs property.\n",
                DeviceInstancePath);
    }
    else
    {
        for (PCWSTR CurrentId = (PCWSTR)TempProperty->Buffer;
             *CurrentId != L'\0';
             CurrentId += wcslen(CurrentId) + 1)
        {
            wprintf(L"%ws\n", CurrentId);
        }
    }

    wprintf(L"\nCompatible IDs:\n");
    TempProperty = DevFindProperty(&DEVPKEY_Device_CompatibleIds,
                                   DEVPROP_STORE_SYSTEM,
                                   NULL,
                                   PropertyCount,
                                   PropertyList);

    if ((TempProperty == NULL) ||
        (TempProperty->Type == DEVPROP_TYPE_EMPTY) ||
        (TempProperty->Buffer == NULL))
    {
        wprintf(L"<none>\n");
    }
    else if ((TempProperty->Type != DEVPROP_TYPE_STRING_LIST) ||
             (TempProperty->BufferSize < sizeof(WCHAR)))
    {
        wprintf(L"Device '%ws' has a corrupted Compatible IDs property.\n",
                DeviceInstancePath);
    }
    else
    {
        for (PCWSTR CurrentId = (PCWSTR)TempProperty->Buffer;
             *CurrentId != L'\0';
             CurrentId += wcslen(CurrentId) + 1)
        {
            wprintf(L"%ws\n", CurrentId);
        }
    }

  exit:

    if (PropertyList != NULL)
    {
        DevFreeObjectProperties(PropertyCount, PropertyList);
    }

    return;
}

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 10, Version 1809
mindestens unterstützte Server- Windows Server 2019
Header- devquery.h
Library Onecore.lib
DLL- Cfgmgr32.dll