共用方式為


DevGetObjectProperties 函式 (devquery.h)

同步擷取指定物件的一組屬性

語法

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

參數

[in] ObjectType

DEV_OBJECT_TYPE 的值,決定要擷取屬性的物件類型。

[in] pszObjectId

要擷取屬性之對象的識別。

[in] QueryFlags

使用位 OR 運算結合 DEV_QUERY_FLAGS 值的組合。 DevQueryFlagUpdateResultsDevQueryFlagAsyncClose 傳遞至此函式並無效。

[in] cRequestedProperties

pRequestedProperties中提供的 DEVPROPCOMPKEY 結構數目。 如果指定 DevQueryFlagAllProperties,則必須將此值設定為 0。

[in] pRequestedProperties

提供 DEVPROPCOMPKEY 結構陣列,指定應針對指定物件擷取的屬性。

DEVPROPCOMPKEY 結構的 LocaleName 字段會被忽略,而且必須設定為 NULL。

如果 cRequestedProperties 為 0,這必須是 NULL。

[out] pcPropertyCount

ppProperties中傳回 DEVPROPERTY 結構的數目。

[out] ppProperties

接收新配置的 DEVPROPERTY 陣列 結果的指標。 呼叫端必須使用 DevFreeObjectProperties釋放指標。

傳回值

如果函式成功評估搜尋準則並傳回相符物件,則會傳回S_OK;否則為適當的錯誤值。

言論

此函式是一種有效率的方式,可從物件中同步擷取一組屬性,並指定其類型和身分識別。 傳回的屬性陣列必須使用 DevFreeObjectProperties釋放。 如果要求的屬性不存在,ppProperties 仍會包含該屬性的專案,但專案的類型為 DEVPROP_TYPE_EMPTY

下列範例示範如何呼叫 DevGetObjectProperties 來擷取一組要求的屬性,然後呼叫 DevFindProperty,以在 DEVPROPERTY 結構數位內尋找特定屬性。

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 = DevGetObjectProperties(DevObjectTypeDevice,
                                DeviceInstancePath,
                                DevQueryFlagNone,
                                RTL_NUMBER_OF(RequestedProperties),
                                RequestedProperties,
                                &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;
}

要求

要求 價值
最低支援的用戶端 Windows 10 版本 1809
支援的最低伺服器 Windows Server 2019
標頭 devquery.h
連結庫 Onecore.lib
DLL Cfgmgr32.dll