다음을 통해 공유


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 메서드(Microsoft Windows SDK 설명서에 설명됨)를 호출하여 WIA 항목을 삭제할 때 IWiaMiniDrv::d rvDeleteItem 메서드를 호출합니다.

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