Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O minidriver WIA deve identificar o dispositivo de hardware atual e o serviço em que ele está sendo executado. Para identificar esses itens, o minidriver obtém em tempo de execução o objeto Function Instance do serviço Function Discovery e lê as propriedades do dispositivo.
Para usar interfaces COM do Function Discovery, o código do minidriver deve incluir o arquivo de cabeçalho principal FunctionDiscovery.h , que está disponível no SDK do Windows Vista, como mostra o exemplo a seguir.
//
// Web Services Function Discovery main header:
//
#include <FunctionDiscovery.h>
Durante a inicialização, como pode acontecer no método IStiUSD::Initialize , o minidriver deve consultar Function Discovery para obter o objeto Function Instance apropriado que representa o dispositivo de hardware. Para concluir essa consulta, use o procedimento a seguir (e os exemplos de código associados):
Etapa 1: Criar o objeto Function Discovery
//
// Function Discovery object
//
IFunctionDiscovery *pFunctionDiscovery = NULL;
CoCreateInstance(__uuidof(FunctionDiscovery),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IFunctionDiscovery),
(void**)&pFunctionDiscovery);
Etapa 2: Criar um objeto de consulta de coleção de instâncias
IFunctionInstanceCollectionQuery *pfiCollectionQuery = NULL;
pFunctionDiscovery->CreateInstanceCollectionQuery(FCTN_CATEGORY_PNP,
NULL,
FALSE,
NULL,
NULL,
&pfiCollectionQuery);
Etapa 3: Adicionar uma restrição ao objeto Instance Collection Query para especificar a ID PNPX (seu valor é recuperado com IStiDeviceControl::GetMyDevicePortName) como a restrição de consulta
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);
Etapa 4: Executar a consulta
IFunctionInstanceCollection *pfiCollection = NULL;
pfiCollectionQuery->Execute(&pfiCollection);
Etapa 5: Recuperar o objeto Function Instance retornado
//
// Function Instance object that represents our device instance
//
IFunctionInstance *pFunctionInstance;
pfiCollection->Item(0, &m_pFunctionInstance);
Para obter um exemplo de código que contém a declaração de uma classe de exemplo (CWSDDevice), consulte Exemplo de código para obter um objeto de instância de função.