Appliquer les paramètres de propriété WIA au matériel
Lorsqu’une application WIA lance un transfert de données, le service WIA donne au minidriver WIA la possibilité d’appliquer les paramètres de propriété WIA actuels et d’appliquer tous les paramètres spécifiques à l’appareil au matériel. Le service WIA appelle ensuite la méthode IWiaMiniDrv::d rvWriteItemProperties avant d’appeler la méthode IWiaMiniDrv::d rvAcquireItemData . Cette dernière méthode est appelée uniquement lorsqu’une application WIA lance un transfert de données. Le minidriver WIA doit utiliser les fonctions de service WIA pour lire les propriétés dans sa propre arborescence d’éléments de pilote.
Implémenter IWiaMiniDrv::d rvWriteItemProperties
Le service WIA appelle la méthode IWiaMiniDrv::d rvWriteItemProperties après que le client demande un transfert de données. Le service WIA appelle cette méthode avant d’effectuer un appel à IWiaMiniDrv::d rvAcquireItemData. Le minidriver WIA doit valider tous les paramètres dont il a besoin sur le matériel avant de revenir à partir de cette méthode.
Lorsque cette méthode est appelée, le minidriver WIA a été engagé pour effectuer un transfert de données. Le service WIA échouera toute application qui tente d’acquérir des données à ce stade avec un code d’erreur WIA_ERROR_BUSY.
L’exemple suivant montre une implémentation de la méthode IWiaMiniDrv::d rvWriteItemProperties :
HRESULT _stdcall CWIADevice::drvWriteItemProperties(
BYTE *pWiasContext,
LONG lFlags,
PMINIDRV_TRANSFER_CONTEXT pmdtc,
LONG *plDevErrVal)
{
//
// If the caller did not pass in the correct parameters,
// then fail the call with E_INVALIDARG.
//
if (!pWiasContext) {
return E_INVALIDARG;
}
if (!pmdtc) {
return E_INVALIDARG;
}
if (!plDevErrVal) {
return E_INVALIDARG;
}
HRESULT hr = S_OK;
*plDevErrVal = 0;
PROPVARIANT pv[2];
PROPSPEC ps[2] = {
{PRSPEC_PROPID, WIA_IPS_XRES},
{PRSPEC_PROPID, WIA_IPS_YRES}
};
//
// initialize propvariant structures
//
pv[0].vt = VT_I4; // X resolution is a LONG value
pv[1].vt = VT_I4; // Y resolution is a LONG value
//
// read 2 WIA item properties (X and Y resolution)
//
hr = wiasReadMultiple(pWiasContext, 2, ps, pv, NULL);
if (hr == S_OK) {
//
// write current X and Y resolution values, read from the
// the WIA property set, and write them to the device.
//
hr = SetMyDeviceXResolution(pv[0].lVal);
if(S_OK == hr) {
hr = SetMyDeviceYResolution(pv[1].lVal);
if(FAILED(hr)) {
//
// could not set Y resolution to device
//
}
} else {
//
// could not set X resolution to device
//
}
}
return hr;
}