다음을 통해 공유


DevGetObjectPropertiesEx 함수(devquery.h)

지정된 확장 매개 변수에 따라 필요에 따라 지정된 개체에 대한 속성 집합을 동기적으로 검색합니다.

통사론

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
);

매개 변수

[in] ObjectType

속성을 검색할 개체의 형식을 결정하는 DEV_OBJECT_TYPE 값입니다.

[in] pszObjectId

속성을 검색할 개체의 ID입니다.

[in] QueryFlags

비트 OR 연산을 사용하여 결합된 DEV_QUERY_FLAGS 값의 조합입니다. DevQueryFlagUpdateResults 또는 DevQueryFlagAsyncClose 이 함수에 전달하는 것은 유효하지 않습니다.

[in] cRequestedProperties

pRequestedProperties제공된 DEVPROPCOMPKEY 구조의 수입니다. DevQueryFlagAllProperties 지정한 경우 0으로 설정해야 합니다.

[in] pRequestedProperties

지정된 개체에 대해 검색해야 하는 속성을 지정하는 DEVPROPCOMPKEY 구조체의 배열을 제공합니다.

DEVPROPCOMPKEY 구조체의 LocaleName 필드는 무시되며 NULL로 설정해야 합니다.

cRequestedProperties 0이면 NULL이어야 합니다.

[in] cExtendedParameterCount

시스템 사용을 위해 예약되어 있습니다. 0으로 설정해야 합니다.

[in] pExtendedParameters

시스템 사용을 위해 예약되어 있습니다. NULL로 설정해야 합니다.

[out] pcPropertyCount

ppProperties반환된 DEVPROPERTY 구조의 수입니다.

[out] ppProperties

새로 할당된 DEVPROPERTY 결과 배열을 수신하는 포인터입니다. 호출자는 DevFreeObjectProperties사용하여 포인터를 해제해야 합니다.

반환 값

함수가 검색 조건을 성공적으로 평가하고 일치하는 개체를 반환하면 S_OK 반환됩니다. 그렇지 않으면 적절한 오류 값입니다.

발언

이 함수는 해당 형식과 ID가 지정된 개체에서 속성 집합을 동기적으로 검색하는 효율적인 방법입니다. 반환되는 속성의 배열은 DevFreeObjectProperties사용하여 해제해야 합니다. 요청된 속성이 없으면 ppProperties 해당 속성에 대한 항목이 계속 포함되지만 항목에는 DEVPROP_TYPE_EMPTY형식이 포함됩니다.

본보기

다음 예제에서는 DevGetObjectPropertiesEx 호출하여 요청된 속성 집합을 검색한 다음 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 = 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;
}

요구 사항

요구
지원되는 최소 클라이언트 Windows 10 버전 1809
지원되는 최소 서버 Windows Server 2019
헤더 devquery.h
라이브러리 Onecore.lib
DLL Cfgmgr32.dll