Condividi tramite


Recupero di un oggetto istanza di funzione

Il minidriver WIA deve identificare il dispositivo hardware corrente e il servizio in esecuzione. Per identificare questi elementi, il minidriver ottiene in fase di esecuzione l'oggetto Istanza di funzione dal servizio Individuazione funzioni e legge le proprietà del dispositivo.

Per usare interfacce COM per l'individuazione delle funzioni, il codice minidriver deve includere il file di intestazione principale FunctionDiscovery.h , disponibile in Windows Vista SDK, come illustrato nell'esempio seguente.

//
// Web Services Function Discovery main header:
//
#include <FunctionDiscovery.h>

Durante l'inizializzazione, come potrebbe verificarsi nel metodo IStiUSD::Initialize , il minidriver deve eseguire query sull'individuazione delle funzioni per ottenere l'oggetto Istanza di funzione appropriata che rappresenta il dispositivo hardware. Per completare questa query, usare la procedura seguente (e gli esempi di codice associati):

Passaggio 1: Creare l'oggetto Individuazione funzioni

//
// Function Discovery object
//
IFunctionDiscovery *pFunctionDiscovery = NULL;
CoCreateInstance(__uuidof(FunctionDiscovery),
                 NULL,
                 CLSCTX_INPROC_SERVER,
                 __uuidof(IFunctionDiscovery),
  (void**)&pFunctionDiscovery);

Passaggio 2: Creare un oggetto Query raccolta istanze

IFunctionInstanceCollectionQuery *pfiCollectionQuery = NULL;
pFunctionDiscovery->CreateInstanceCollectionQuery(FCTN_CATEGORY_PNP,
   NULL,
   FALSE,
   NULL,
   NULL,
   &pfiCollectionQuery);

Passaggio 3: Aggiungere un vincolo all'oggetto Query raccolta istanze per specificare l'ID PNPX (il relativo valore viene recuperato con IStiDeviceControl::GetMyDevicePortName) come vincolo di query

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);

Passaggio 4: Eseguire la query

IFunctionInstanceCollection *pfiCollection = NULL;
pfiCollectionQuery->Execute(&pfiCollection);

Passaggio 5: Recuperare l'oggetto Istanza di funzione restituito

//
// Function Instance object that represents our device instance
//
IFunctionInstance *pFunctionInstance;

pfiCollection->Item(0, &m_pFunctionInstance);

Per un esempio di codice che contiene la dichiarazione di una classe di esempio (CWSDDevice), vedere Esempio di codice per ottenere un oggetto istanza di funzione.