Freigeben über


Abrufen eines Funktionsinstanzobjekts

Der WIA-Minitreiber muss das aktuelle Hardwaregerät und den Dienst identifizieren, auf dem es ausgeführt wird. Um diese Elemente zu identifizieren, ruft der Minidriver zur Laufzeit das Funktionsinstanzobjekt vom Funktionsermittlungsdienst ab und liest die Geräteeigenschaften.

Um COM-Schnittstellen für die Funktionsermittlung verwenden zu können, muss der Minidriver-Code die Headerdatei FunctionDiscovery.h Standard enthalten, die im Windows Vista SDK verfügbar ist, wie im folgenden Beispiel gezeigt.

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

Während der Initialisierung sollte der Minitreiber die Funktionsermittlung abfragen, um das entsprechende Funktionsinstanzobjekt abzurufen, das das Hardwaregerät darstellt. Verwenden Sie zum Abschließen dieser Abfrage das folgende Verfahren (und die zugehörigen Codebeispiele):

Schritt 1: Erstellen des Funktionsermittlungsobjekts

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

Schritt 2: Erstellen eines Instanzsammlungsabfrageobjekts

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

Schritt 3: Hinzufügen einer Einschränkung zum Instanzsammlungsabfrageobjekt, um die PNPX-ID (ihr Wert wird mit IStiDeviceControl::GetMyDevicePortName abgerufen) als Abfrageeinschränkung anzugeben.

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

Schritt 4: Ausführen der Abfrage

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

Schritt 5: Abrufen des zurückgegebenen Function Instance-Objekts

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

pfiCollection->Item(0, &m_pFunctionInstance);

Ein Codebeispiel, das die Deklaration einer Beispielklasse (CWSDDevice) enthält, finden Sie unter Codebeispiel zum Abrufen eines Funktionsinstanzobjekts.