WIA 迷你驅動程式必須識別目前的硬體裝置及其執行中的服務。 為了識別這些專案,minidriver 會在運行時間從函式探索服務取得函式實例物件,並讀取裝置屬性。
若要使用函式探索 COM 介面,迷你驅動程式程式代碼必須包含可在 Windows Vista SDK 中使用的 FunctionDiscovery.h 主要頭檔,如下列範例所示。
//
// Web Services Function Discovery main header:
//
#include <FunctionDiscovery.h>
初始化時,在可能發生於IStiUSD::Initialize方法中的情況下,迷你驅動程式應查詢功能探索,以獲取代表硬體裝置的適當功能實例物件。 若要完成此查詢,請使用下列程式 (以及相關聯的程式代碼範例):
步驟 1:建立函式探索物件
//
// 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:將條件約束新增至 Instance Collection Query 物件,指定 PNPX 標識符(其值是通過 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 object that represents our device instance
//
IFunctionInstance *pFunctionInstance;
pfiCollection->Item(0, &m_pFunctionInstance);
如需包含範例類別宣告的程式代碼範例(CWSDDevice),請參閱 取得函式實例物件的程式代碼範例。