함수 인스턴스 개체 가져오기
WIA 미니드라이버가 현재 하드웨어 디바이스와 실행 중인 서비스를 식별해야 합니다. 이러한 항목을 식별하기 위해 미니 드라이버는 런타임에 Function Discovery 서비스에서 Function Instance 개체를 가져오고 디바이스 속성을 읽습니다.
Function Discovery COM 인터페이스를 사용하려면 미니 드라이버 코드에 다음 예제와 같이 Windows Vista SDK에서 사용할 수 있는 FunctionDiscovery.h 기본 헤더 파일이 포함되어야 합니다.
//
// Web Services Function Discovery main header:
//
#include <FunctionDiscovery.h>
초기화 중에 IStiUSD::Initialize 메서드에서 발생할 수 있는 것처럼 미니드라이버가 함수 검색을 쿼리하여 하드웨어 디바이스를 나타내는 적절한 Function Instance 개체를 가져와야 합니다. 이 쿼리를 완료하려면 다음 절차(및 관련 코드 예제)를 사용합니다.
1단계: Function Discovery 개체 만들기
//
// Function Discovery object
//
IFunctionDiscovery *pFunctionDiscovery = NULL;
CoCreateInstance(__uuidof(FunctionDiscovery),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IFunctionDiscovery),
(void**)&pFunctionDiscovery);
2단계: 인스턴스 컬렉션 쿼리 개체 만들기
IFunctionInstanceCollectionQuery *pfiCollectionQuery = NULL;
pFunctionDiscovery->CreateInstanceCollectionQuery(FCTN_CATEGORY_PNP,
NULL,
FALSE,
NULL,
NULL,
&pfiCollectionQuery);
3단계: 인스턴스 컬렉션 쿼리 개체에 제약 조건을 추가하여 PNPX ID(해당 값은 IStiDeviceControl::GetMyDevicePortName로 검색됨)를 쿼리 제약 조건으로 지정합니다.
PROPVARIANT PropVar = {0};
//
// Note that the wszDevicePath value is obtained by the WIA minidriver
// calling IStiDeviceControl::GetMyDevicePortName during IStiUSD::Initialize
//
PropVariantInit(&PropVar);
PropVar.vt = VT_LPWSTR;
PropVar.pwszVal = (LPWSTR)wszDevicePath;
pfiCollectionQuery->AddPropertyConstraint(PKEY_PNPX_ID, &PropVar, QC_EQUALS);
4단계: 쿼리 실행
IFunctionInstanceCollection *pfiCollection = NULL;
pfiCollectionQuery->Execute(&pfiCollection);
5단계: 반환되는 Function Instance 개체 검색
//
// Function Instance object that represents our device instance
//
IFunctionInstance *pFunctionInstance;
pfiCollection->Item(0, &m_pFunctionInstance);
샘플 클래스(CWSDDevice)의 선언을 포함하는 코드 예제는 함수 인스턴스 개체 가져오기를 위한 코드 샘플을 참조하세요.