Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein WIA-Minitreiber kann die STRUKTUR der WIA-Elementstruktur jederzeit ändern. Wenn der Minitreiber eine Änderung an der WIA-Elementstruktur vornimmt, muss der Minitreiber den WIA-Dienst benachrichtigen. Der WIA-Dienst benachrichtigt dann alle verbundenen WIA-Anwendungen. Nachdem die Benachrichtigung empfangen wurde, muss die WIA-Anwendung die WIA-Elementstruktur aufzählen, um das Ergebnis von Änderungen zu ermitteln.
Ein Minidriver verwendet die WIA-Dienst-Hilfsprogrammfunktion wiasQueueEvent, um Änderungen in der Struktur an den WIA-Dienst zu kommunizieren. Ein WIA-Minitreiber kann nur die Ereignisse in die Warteschlange stellen, die in IWiaMiniDrv::d rvGetCapabilities gemeldet wurden. Weitere Informationen zum Melden von WIA-Ereignissen finden Sie unter Ereignisberichterstattung.
Erläuterung der IWiaMiniDrv::d rvDeleteItem-Implementierung
Der WIA-Dienst ruft die IWiaMiniDrv::d rvDeleteItem-Methode auf, wenn eine WIA-Anwendung die IWiaItem::D eleteItem-Methode aufruft (in der Microsoft Windows SDK-Dokumentation beschrieben), um ein WIA-Element zu löschen.
Der WIA-Dienst überprüft Folgendes, bevor diese Methode aufgerufen wird:
Das Element ist kein Stammelement.
Das Element hat keine untergeordneten Elemente.
Die Zugriffsrechte des Elements lassen das Löschen zu.
Da der WIA-Dienst diese Kriterien überprüft, ist es nicht erforderlich, dass der WIA-Treiber dies ebenfalls tun muss.
Das folgende Codebeispiel zeigt eine Implementierung von 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;
}