共用方式為


變更 WIA 專案樹狀結構

WIA 迷你驅動程式可以隨時變更 WIA 專案樹狀結構。 當迷你驅動程式變更 WIA 專案樹狀結構時,迷你驅動程式必須通知 WIA 服務。 WIA 服務接著會通知所有已連線的 WIA 應用程式。 收到通知之後,WIA 應用程式必須列舉 WIA 專案樹狀結構,以判斷任何變更的結果。

迷你驅動程式會使用 WIA 服務公用程式函式 wiasQueueEvent,將樹狀結構中的變更傳達給 WIA 服務。 WIA 迷你驅動程式只能將 IWiaMiniDrv::d rvGetCapabilities 中報告的事件排入佇列。 如需報告 WIA 事件的詳細資訊,請參閱 事件報告

IWiaMiniDrv::d rvDeleteItem 實作的說明

WIA 服務會在 WIA 應用程式呼叫 IWiaItem::D eleteItem 方法時呼叫 IWiaMiniDrv::d rvDeleteItem 方法, (Microsoft Windows SDK 檔) 來刪除 WIA 專案。

WIA 服務會在呼叫此方法之前驗證下列各項:

  • 專案不是根專案。

  • 項目沒有子系。

  • 項目的訪問許可權允許刪除。

由於 WIA 服務會驗證這些準則,因此 WIA 驅動程式也不需要這麼做。

下列程式代碼範例示範 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;
}