DevCreateObjectQueryFromId 함수(devquery.h)
지정된 쿼리 매개 변수 및 개체 ID를 기반으로 속성을 검색하는 디바이스 쿼리를 만듭니다.
통사론
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
);
매개 변수
[in] ObjectType
이 쿼리가 작동해야 하는 개체 형식을 결정하는 DEV_OBJECT_TYPE 열거형의 값입니다.
[in] pszObjectId
쿼리가 작동해야 하는 개체의 문자열 식별자입니다.
[in] QueryFlags
비트 OR 연산을 사용하여 결합된 DEV_QUERY_FLAGS 값의 조합입니다.
[in] cRequestedProperties
pRequestedProperties제공된 DEVPROPCOMPKEY 구조의 수입니다. DevQueryFlagAllProperties 지정한 경우 0으로 설정해야 합니다.
[in, optional] pRequestedProperties
필요에 따라 pCallback 호출될 때 쿼리 결과 집합의 개체에 대해 검색해야 하는 속성을 지정하는 DEVPROPCOMPKEY 구조체의 배열을 제공하여 결과 집합에 개체가 추가되었음을 쿼리에 알립니다.
DevQueryFlagUpdateResultsQueryFlags지정한 경우 쿼리의 결과 집합에 있는 개체에 대해 이러한 속성 값이 변경되면 쿼리에 알림이 표시됩니다.
DEVPROPCOMPKEY 구조체의 LocaleName 필드는 무시되며 NULL로 설정해야 합니다.
cRequestedProperties 0이면 NULL이어야 합니다.
[in] cFilterExpressionCount
pFilter제공된 DEVPROP_FILTER_EXPRESSION 구조체의 수입니다.
[in, optional] pFilter
필요에 따라 쿼리 결과 집합의 일부여야 하는 개체에 대한 필터 조건을 지정하는 DEVPROP_FILTER_EXPRESSION 구조의 배열을 제공합니다. cFilterExpressionCount 0이면 NULL이어야 합니다.
[in] pCallback
이 쿼리의 결과를 나타내는 PDEV_QUERY_RESULT_CALLBACK 콜백 함수를 보내야 합니다.
[in, optional] pContext
호출자가 제공한 컨텍스트입니다. 이 값은 수정되지 않은 콜백 함수에 전달됩니다.
[out] phDevQuery
쿼리를 나타내는 핸들을 받는 포인터입니다. DevQueryFlagsUpdateResults 지정한 경우 쿼리는 핸들이 닫힙니다. DevCloseObjectQuery 호출하여 이 핸들을 닫아 쿼리를 중지합니다.
반환 값
쿼리가 성공적으로 만들어진 경우 S_OK 반환됩니다. 그렇지 않으면 적절한 오류 값입니다.
발언
클라이언트가 ID가 지정된 특정 개체에 대한 데이터를 검색하려는 경우 필터로 DevCreateObjectQuery
자세한 내용은 이 함수에도 적용되는 DevCreateObjectQuery설명 섹션을 참조하세요.
예제
다음 예제에서는 쿼리 상태가 변경되거나 항목이 쿼리 결과에 추가, 업데이트 또는 제거될 때 상태 메시지를 출력하기 위해 PDEV_QUERY_RESULT_CALLBACK 메서드가 구현됩니다. 다음으로, DevCreateObjectQueryFromId 변수 InterfacePath지정된 개체 ID로 호출되는 간단한 쿼리 시나리오가 구현됩니다.
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;
}
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 버전 1809 |
헤더 | devquery.h |
라이브러리 | Onecore.lib |
DLL | Cfgmgr32.dll |