Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il minidriver WIA deve identificare il dispositivo hardware corrente e il servizio in cui è 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 le interfacce COM di 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 interrogare il servizio di individuazione funzioni per ottenere l'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 di istanze
IFunctionInstanceCollectionQuery *pfiCollectionQuery = NULL;
pFunctionDiscovery->CreateInstanceCollectionQuery(FCTN_CATEGORY_PNP,
NULL,
FALSE,
NULL,
NULL,
&pfiCollectionQuery);
Passaggio 3: Aggiungere un vincolo all'oggetto Query della raccolta di 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.