Mendapatkan Objek Instans Fungsi

Minidriver WIA harus mengidentifikasi perangkat keras saat ini dan layanan yang dijalankannya. Untuk mengidentifikasi item ini, minidriver memperoleh pada run time objek Instans Fungsi dari layanan Penemuan Fungsi dan membaca properti perangkat.

Untuk menggunakan antarmuka COM Penemuan Fungsi, kode minidriver harus menyertakan file header utama FunctionDiscovery.h , yang tersedia di Windows Vista SDK, seperti yang ditunjukkan contoh berikut.

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

Selama inisialisasi, seperti yang mungkin terjadi dalam metode IStiUSD::Initialize , minidriver harus meminta Penemuan Fungsi untuk mendapatkan objek Instans Fungsi yang sesuai yang mewakili perangkat keras. Untuk menyelesaikan kueri ini, gunakan prosedur berikut (dan contoh kode terkait):

Langkah 1: Buat objek Penemuan Fungsi

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

Langkah 2: Membuat objek Kueri Koleksi Instans

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

Langkah 3: Tambahkan batasan ke objek Kueri Koleksi Instans untuk menentukan ID PNPX (nilainya diambil dengan IStiDeviceControl::GetMyDevicePortName) sebagai batasan kueri

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

Langkah 4: Jalankan kueri

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

Langkah 5: Ambil objek Instans Fungsi yang dikembalikan

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

pfiCollection->Item(0, &m_pFunctionInstance);

Untuk contoh kode yang berisi deklarasi kelas sampel (CWSDDevice), lihat Sampel Kode untuk Mendapatkan Objek Instans Fungsi.