获取函数实例对象

WIA 微型驱动程序必须标识当前硬件设备及其正在运行的服务。 为了标识这些项,微型驱动程序在运行时从 Function Discovery 服务获取 Function Instance 对象,并读取设备属性。

若要使用 Function Discovery COM 接口,微型驱动程序代码必须包含 FunctionDiscovery.h main 头文件,该文件在 Windows Vista SDK 中可用,如以下示例所示。

//
// 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 object that represents our device instance
//
IFunctionInstance *pFunctionInstance;

pfiCollection->Item(0, &m_pFunctionInstance);

有关包含示例类声明 (CWSDDevice) 的代码示例,请参阅 获取函数实例对象的代码示例