Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un minidriver WIA tiene la capacidad de cambiar la estructura de árbol de elementos WIA en cualquier momento. Cuando el minidriver realiza un cambio en el árbol de elementos WIA, el minidriver debe notificar al servicio WIA. A continuación, el servicio WIA notifica todas las aplicaciones WIA conectadas. Una vez recibida la notificación, la aplicación WIA debe enumerar el árbol de elementos WIA para determinar el resultado de los cambios.
Un minidriver utiliza la función de utilidad del servicio WIA, wiasQueueEvent, para comunicar los cambios en la estructura del árbol al servicio WIA. Un minidriver WIA solo puede poner en cola los eventos notificados en IWiaMiniDrv::drvGetCapabilities. Para obtener más información sobre cómo notificar eventos WIA, consulte Informes de eventos.
Explicación de la implementación de IWiaMiniDrv::drvDeleteItem
El servicio WIA llama al método IWiaMiniDrv::drvDeleteItem cuando una aplicación WIA llama al método IWiaItem::DeleteItem (descrito en la documentación del SDK de Microsoft Windows) para eliminar un elemento WIA.
El servicio WIA comprueba lo siguiente antes de llamar a este método:
El elemento no es un elemento raíz.
El elemento no tiene secundarios.
Los derechos de acceso del elemento permiten la eliminación.
Dado que el servicio WIA comprueba estos criterios, no es necesario que el controlador WIA lo haga también.
En el ejemplo de código siguiente se muestra una implementación de IWiaMiniDrv::d rvDeleteItem:
HRESULT _stdcall CWIADevice::drvDeleteItem(BYTE *pWiasContext,
LONG lFlags,
LONG *plDevErrVal)
{
//
// If the caller did not pass in the correct parameters,
// then fail the call with E_INVALIDARG.
//
if ((!pWiasContext) || (!plDevErrVal))
{
return E_INVALIDARG;
}
*plDevErrVal = 0;
HRESULT hr = S_OK;
//
// Two pieces of information are needed to queue an event:
// 1. Full item name
// 2. Device ID (passed in from drvInitializeWia,
// or read from the ROOT item's property set)
//
BSTR bstrFullItemName = NULL;
hr = wiasReadPropStr(pWiasContext,
WIA_IPA_FULL_ITEM_NAME,
&bstrFullItemName,NULL,TRUE);
if (hr == S_OK)
{
hr = HARDWARE_DELETE_DATA_FOR_ITEM();
if (hr == S_OK)
{
//
// Use m_bstrDeviceID cached from the
// drvInitializeWia method call.
//
hr = wiasQueueEvent(m_bstrDeviceID,
&WIA_EVENT_ITEM_DELETED,
bstrFullItemName);
}
//
// Free item's full item name, read above.
//
if (bstrFullItemName)
{
SysFreeString(bstrFullItemName);
bstrFullItemName = NULL;
}
}
//
// Returning S_OK will instruct the WIA service to remove the WIA
// item from the item tree. The WIA minidriver should only remove
// any associated data corresponding to the target item.
//
return hr;
}