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
속성을 검색할 개체의 ID입니다.
[in] QueryFlags
비트 OR 연산을 사용하여 결합된 DEV_QUERY_FLAGS 값의 조합입니다. DevQueryFlagUpdateResults
[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 반환됩니다. 그렇지 않으면 적절한 오류 값입니다.
발언
이 함수는 해당 형식과 ID가 지정된 개체에서 속성 집합을 동기적으로 검색하는 효율적인 방법입니다. 반환되는 속성의 배열은 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 |