Partager via


Obtention d’un objet d’instance de fonction

Le minidriver WIA doit identifier l’appareil matériel actuel et le service sur lequel il s’exécute. Pour identifier ces éléments, le minidriver obtient au moment de l’exécution l’objet Instance de fonction à partir du service de découverte de fonction et lit les propriétés de l’appareil.

Pour utiliser des interfaces COM de découverte de fonctions, le code du minidriver doit inclure le fichier d’en-tête Main FunctionDiscovery.h, qui est disponible dans le Kit de développement logiciel (SDK) Windows Vista, comme le montre l’exemple suivant.

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

Pendant l’initialisation, comme cela peut se produire dans la méthode IStiUSD::Initialize , le minidriver doit interroger function discovery pour obtenir l’objet Instance de fonction approprié qui représente le périphérique matériel. Pour effectuer cette requête, utilisez la procédure suivante (et les exemples de code associés) :

Étape 1 : Créer l’objet De découverte de fonction

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

Étape 2 : Créer un objet de requête de collection d’instances

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

Étape 3 : Ajouter une contrainte à l’objet Requête de la collection d’instances pour spécifier l’ID PNPX (sa valeur est récupérée avec IStiDeviceControl::GetMyDevicePortName) comme contrainte de requête

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

Étape 4 : Exécuter la requête

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

Étape 5 : Récupérer l’objet Instance de fonction retourné

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

pfiCollection->Item(0, &m_pFunctionInstance);

Pour obtenir un exemple de code qui contient la déclaration d’un exemple de classe (CWSDDevice), consultez Exemple de code pour l’obtention d’un objet d’instance de fonction.