取得函式實例物件
WIA 迷你驅動程式必須識別目前的硬體裝置及其執行所在的服務。 若要識別這些專案,minidriver 會在執行時間從函式探索服務取得函式實例物件,並讀取裝置屬性。
若要使用函式探索 COM 介面,minidriver 程式碼必須包含 FunctionDiscovery.h 主要標頭檔,可在 Windows Vista SDK 中使用,如下列範例所示。
//
// Web Services Function Discovery main header:
//
#include <FunctionDiscovery.h>
在初始化期間, IStiUSD::Initialize 方法中可能發生的情況,minidriver 應該查詢 Function Discovery,以取得代表硬體裝置的適當函式實例物件。 若要完成此查詢,請使用下列程式 (和相關聯的程式碼範例) :
步驟 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:將條件約束新增至實例集合查詢物件,以指定 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) ,請參閱 取得函式實例物件的程式碼範例。