/*
 * Copyright 2008 Hans Leidekker for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "oaidl.idl";

#ifndef __WIDL__
#define threading(model)
#define progid(str)
#define vi_progid(str)
#endif

[
    helpstring("WUAPI 2.0 Type Library"),
    uuid(b596cc9f-56e5-419e-a622-e01bb457431e),
    version(2.0)
]
library WUApiLib {

importlib("stdole2.tlb");

interface ICategoryCollection;
interface IStringCollection;
interface IUpdateCollection;
interface IUpdateDownloader;
interface IUpdateInstaller;
interface IUpdateSearcher;

typedef [public] enum tagDownloadPriority
{
    dpLow    = 1,
    dpNormal = 2,
    dpHigh   = 3,
} DownloadPriority;

typedef [public] enum tagServerSelection
{
    ssDefault       = 0,
    ssManagedServer = 1,
    ssWindowsUpdate = 2,
    ssOthers        = 3,
} ServerSelection;

typedef [public] enum tagAutomaticUpdatesNotificationLevel
{
    aunlNotConfigured,
    aunlDisabled,
    aunlNotifyBeforeDownload,
    aunlNotifyBeforeInstallation,
    aunlScheduledInstallation,
} AutomaticUpdatesNotificationLevel;

typedef [public] enum tagAutomaticUpdatesScheduledInstallationDay
{
    ausidEveryDay,
    ausidEverySunday,
    ausidEveryMonday,
    ausidEveryTuesday,
    ausidEveryWednesday,
    ausidEveryThursday,
    ausidEveryFriday,
    ausidEverySaturday,
} AutomaticUpdatesScheduledInstallationDay;

typedef [public] enum tagDownloadPhase
{
    dphInitializing,
    dphDownloading,
    dphVerifying,
} DownloadPhase;

typedef [public] enum tagOperationResultCode
{
    orcNotStarted,
    orcInProgress,
    orcSucceeded,
    orcSucceededWithErrors,
    orcFailed,
    orcAborted,
} OperationResultCode;

typedef [public] enum tagUpdateExceptionContext
{
    uecGeneral = 1,
    uecWindowsDriver,
    uecWindowsInstaller
} UpdateExceptionContext;

typedef [public] enum tagInstallationImpact
{
    iiNormal,
    iiMinor,
    iiRequiresExclusiveHandling
} InstallationImpact;

typedef [public] enum tagInstallationRebootBehavior
{
    irbNeverReboots,
    irbAlwaysRequiresReboot,
    irbCanRequestReboot
} InstallationRebootBehavior;

typedef [public] enum tagUpdateType
{
    utSoftware = 1,
    utDriver
} UpdateType;

typedef [public] enum tagUpdateOperation
{
    uoInstallation = 1,
    uoUninstallation
} UpdateOperation;

typedef [public] enum tagDeploymentAction
{
    daNone,
    daInstallation,
    daUninstallation,
    daDetection
} DeploymentAction;

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(2ee48f22-af3c-405f-8970-f71be12ee9a2),
    pointer_default(unique)
]
interface IAutomaticUpdatesSettings : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT NotificationLevel( [out, retval] AutomaticUpdatesNotificationLevel *retval );

    [propput, id(0x60020001)]
    HRESULT NotificationLevel( [in] AutomaticUpdatesNotificationLevel value );

    [propget, id(0x60020002)]
    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020003)]
    HRESULT Required( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020004)]
    HRESULT ScheduledInstallationDay( [out, retval] AutomaticUpdatesScheduledInstallationDay *retval );

    [propput, id(0x60020004)]
    HRESULT ScheduledInstallationDay( [in] AutomaticUpdatesScheduledInstallationDay value );

    [propget, id(0x60020005)]
    HRESULT ScheduledInstallationTime( [out, retval] LONG *retval );

    [propput, id(0x60020005)]
    HRESULT ScheduledInstallationTime( [in] LONG value );

    [id(0x60020006)]
    HRESULT Refresh();

    [id(0x60020007)]
    HRESULT Save();
}

[
    object,
    uuid(673425bf-c082-4c7c-bdfd-569464b8e0ce),
    oleautomation,
    dual,
    nonextensible,
    pointer_default(unique),
    hidden
]
interface IAutomaticUpdates : IDispatch
{
    HRESULT DetectNow();
    HRESULT Pause();
    HRESULT Resume();
    HRESULT ShowSettingsDialog();

    [propget]
    HRESULT Settings(
        [out, retval] IAutomaticUpdatesSettings **retval);

    [propget]
    HRESULT ServiceEnabled(
        [out, retval] VARIANT_BOOL *retval);

    HRESULT EnableService();
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(174c81fe-aecd-4dae-b8a0-2c6318dd86a8),
    pointer_default(unique),
]
interface IWebProxy : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT Address( [out, retval] BSTR *retval );

    [propput, id(0x60020001)]
    HRESULT Address( [in] BSTR value );

    [propget, id(0x60020002)]
    HRESULT BypassList( [out, retval] IStringCollection **retval );

    [propput, id(0x60020002)]
    HRESULT BypassList( [in] IStringCollection *value );

    [propget, id(0x60020003)]
    HRESULT BypassProxyOnLocal( [out, retval] VARIANT_BOOL *retval );

    [propput, id(0x60020003)]
    HRESULT BypassProxyOnLocal( [in] VARIANT_BOOL value );

    [propget, id(0x60020004)]
    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020005)]
    HRESULT UserName( [out, retval] BSTR *retval );

    [propput, id(0x60020005)]
    HRESULT UserName( [in] BSTR value );

    [id(0x60020006)]
    HRESULT SetPassword( [in] BSTR value );

    [id(0x60020007)]
    HRESULT PromptForCredentials( [in, unique] IUnknown *parentWindow,
                                  [in] BSTR title );

    [restricted, id(0x60020008)]
    HRESULT PromptForCredentialsFromHwnd( [in, unique] HWND parentWindow,
                                          [in] BSTR title );

    [propget, id(0x60020009)]
    HRESULT AutoDetect( [out, retval] VARIANT_BOOL *retval );

    [propput, id(0x60020009)]
    HRESULT AutoDetect( [in] VARIANT_BOOL value );
}

[
    object,
    uuid(816858a4-260d-4260-933a-2585f1abc76b),
    oleautomation,
    dual,
    nonextensible,
    pointer_default(unique),
]
interface IUpdateSession : IDispatch
{
    [propget]
    HRESULT ClientApplicationID(
        [out, retval] BSTR *retval);

    [propput]
    HRESULT ClientApplicationID(
        [in] BSTR value);

    [propget]
    HRESULT ReadOnly(
        [out, retval] VARIANT_BOOL *retval);

    [propget]
    HRESULT WebProxy(
        [out, retval] IWebProxy **retval);

    [propput]
    HRESULT WebProxy(
        [in, unique] IWebProxy *value);

    HRESULT CreateUpdateSearcher(
        [out, retval] IUpdateSearcher **retval);

    HRESULT CreateUpdateDownloader(
        [out, retval] IUpdateDownloader **retval);

    HRESULT CreateUpdateInstaller(
        [out, retval] IUpdateInstaller **retval);
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(7c907864-346c-4aeb-8f3f-57da289f969f),
    pointer_default(unique),
]
interface IImageInformation : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT AltText( [out, retval] BSTR *retval );

    [propget, id(0x60020002)]
    HRESULT Height( [out, retval] LONG *retval );

    [propget, id(0x60020003)]
    HRESULT Source( [out, retval] BSTR *retval );

    [propget, id(0x60020004)]
    HRESULT Width( [out, retval] LONG *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(81ddc1b8-9d35-47a6-b471-5b80f519223b),
    pointer_default(unique),
]
interface ICategory : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Name( [out, retval] BSTR *retval );

    [propget, id(0x60020001)]
    HRESULT CategoryID( [out, retval] BSTR *retval );

    [propget, id(0x60020002)]
    HRESULT Children( [out, retval] ICategoryCollection **retval );

    [propget, id(0x60020003)]
    HRESULT Description( [out, retval] BSTR *retval );

    [propget, id(0x60020004)]
    HRESULT Image( [out, retval] IImageInformation **retval );

    [propget, id(0x60020005)]
    HRESULT Order( [out, retval] LONG *retval );

    [propget, id(0x60020006)]
    HRESULT Parent( [out, retval] ICategory **retval );

    [propget, id(0x60020007)]
    HRESULT Type( [out, retval] BSTR *retval );

    [propget, id(0x60020008)]
    HRESULT Updates( [out, retval] IUpdateCollection **retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(3a56bfb8-576c-43f7-9335-fe4838fd7e37),
    pointer_default(unique),
]
interface ICategoryCollection : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Item( [in] LONG index,
                [out, retval] ICategory **retval );

    [propget, id(DISPID_NEWENUM)]
    HRESULT _NewEnum( [out, retval] IUnknown **retval );

    [propget, id(0x60020001)]
    HRESULT Count( [out, retval] LONG *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(eff90582-2ddc-480f-a06d-60f3fbc362c3),
    pointer_default(unique),
    hidden
]
interface IStringCollection : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Item( [in] LONG index,
                  [out, retval] BSTR *retval );

    [propput, id(DISPID_VALUE)]
    HRESULT Item( [in] LONG index,
                [in] BSTR value );

    [propget, id(DISPID_NEWENUM)]
    HRESULT _NewEnum( [out, retval] IUnknown **retval );

    [propget, id(0x60020001)]
    HRESULT Count( [out, retval] LONG *retval );

    [propget, id(0x60020002)]
    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );

    [id(0x60020003)]
    HRESULT Add( [in] BSTR value,
                 [out, retval] LONG *retval );

    [id(0x60020004)]
    HRESULT Clear();

    [id(0x60020005)]
    HRESULT Copy( [out, retval] IStringCollection **retval );

    [id(0x60020006)]
    HRESULT Insert( [in] LONG index,
                    [in] BSTR value );

    [id(0x60020007)]
    HRESULT RemoveAt( [in] LONG index );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(a376dd5e-09d4-427f-af7c-fed5b6e1c1d6),
    pointer_default(unique),
]
interface IUpdateException : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Message( [out, retval] BSTR *retval );

    [propget, id(0x60020001)]
    HRESULT HResult( [out, retval] LONG *retval );

    [propget, id(0x60020002)]
    HRESULT Context( [out, retval] UpdateExceptionContext *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(503626a3-8e14-4729-9355-0fe664bd2321),
    pointer_default(unique),
]
interface IUpdateExceptionCollection : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Item( [in] LONG index,
                  [out, retval] IUpdateException **retval );

    [propget, id(DISPID_NEWENUM)]
    HRESULT _NewEnum( [out, retval] IUnknown **retval );

    [propget, id(0x60020001)]
    HRESULT Count( [out, retval] LONG *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(46297823-9940-4c09-aed9-cd3ea6d05968),
    pointer_default(unique)
]
interface IUpdateIdentity : IDispatch
{
    [propget, id(0x60020002)]
    HRESULT RevisionNumber( [out, retval] LONG *retval );

    [propget, id(0x60020003)]
    HRESULT UpdateID( [out, retval] BSTR *retval );
}

[
    ,
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(d9a59339-e245-4dbd-9686-4d5763e39624),
    pointer_default(unique),
]
interface IInstallationBehavior : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT CanRequestUserInput( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020002)]
    HRESULT Impact( [out, retval] InstallationImpact *retval );

    [propget, id(0x60020003)]
    HRESULT RebootBehavior( [out, retval] InstallationRebootBehavior *retval );

    [propget, id(0x60020004)]
    HRESULT RequiresNetworkConnectivity( [out, retval] VARIANT_BOOL *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02),
    pointer_default(unique),
]
interface IUpdateDownloadContent : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT DownloadUrl( [out, retval] BSTR *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba),
    pointer_default(unique),
]
interface IUpdateDownloadContentCollection : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Item( [in] LONG index,
                  [out, retval] IUpdateDownloadContent **retval );

    [propget, id(DISPID_NEWENUM)]
    HRESULT _NewEnum( [out, retval] IUnknown **retval );

    [propget, id(0x60020001)]
    HRESULT Count( [out, retval] LONG *retval );
}

[

    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(6a92b07a-d821-4682-b423-5c805022cc4d),
    pointer_default(unique),
]
interface IUpdate : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Title( [out, retval] BSTR *retval );

    [propget, id(0x60020001)]
    HRESULT AutoSelectOnWebSites( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020002)]
    HRESULT BundledUpdates( [out, retval] IUpdateCollection **retval );

    [propget, id(0x60020003)]
    HRESULT CanRequireSource( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020004)]
    HRESULT Categories( [out, retval] ICategoryCollection **retval );

    [propget, id(0x60020005)]
    HRESULT Deadline( [out, retval] VARIANT *retval );

    [propget, id(0x60020006)]
    HRESULT DeltaCompressedContentAvailable( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020007)]
    HRESULT DeltaCompressedContentPreferred( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020008)]
    HRESULT Description( [out, retval] BSTR *retval );

    [propget, id(0x60020009)]
    HRESULT EulaAccepted( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x6002000a)]
    HRESULT EulaText( [out, retval] BSTR *retval );

    [propget, id(0x6002000b)]
    HRESULT HandlerID( [out, retval] BSTR *retval );

    [propget, id(0x6002000c)]
    HRESULT Identity( [out, retval] IUpdateIdentity **retval );

    [propget, id(0x6002000d)]
    HRESULT Image( [out, retval] IImageInformation **retval );

    [propget, id(0x6002000e)]
    HRESULT InstallationBehavior( [out, retval] IInstallationBehavior **retval );

    [propget, id(0x6002000f)]
    HRESULT IsBeta( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020010)]
    HRESULT IsDownloaded( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020011)]
    HRESULT IsHidden( [out, retval] VARIANT_BOOL *retval );

    [propput, id(0x60020011)]
    HRESULT IsHidden( [in] VARIANT_BOOL value );

    [propget, id(0x60020012)]
    HRESULT IsInstalled( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020013)]
    HRESULT IsMandatory( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020014)]
    HRESULT IsUninstallable( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020015)]
    HRESULT Languages( [out, retval] IStringCollection **retval );

    [propget, id(0x60020016)]
    HRESULT LastDeploymentChangeTime( [out, retval] DATE *retval );

    [propget, id(0x60020017)]
    HRESULT MaxDownloadSize( [out, retval] DECIMAL *retval );

    [propget, id(0x60020018)]
    HRESULT MinDownloadSize( [out, retval] DECIMAL *retval );

    [propget, id(0x60020019)]
    HRESULT MoreInfoUrls( [out, retval] IStringCollection **retval );

    [propget, id(0x6002001a)]
    HRESULT MsrcSeverity( [out, retval] BSTR *retval );

    [propget, id(0x6002001b)]
    HRESULT RecommendedCpuSpeed( [out, retval] LONG *retval );

    [propget, id(0x6002001c)]
    HRESULT RecommendedHardDiskSpace( [out, retval] LONG *retval );

    [propget, id(0x6002001d)]
    HRESULT RecommendedMemory( [out, retval] LONG *retval );

    [propget, id(0x6002001e)]
    HRESULT ReleaseNotes( [out, retval] BSTR *retval );

    [propget, id(0x6002001f)]
    HRESULT SecurityBulletinIDs( [out, retval] IStringCollection **retval );

    [propget, id(0x60020021)]
    HRESULT SupersededUpdateIDs( [out, retval] IStringCollection **retval );

    [propget, id(0x60020022)]
    HRESULT SupportUrl( [out, retval] BSTR *retval );

    [propget, id(0x60020023)]
    HRESULT Type( [out, retval] UpdateType *retval );

    [propget, id(0x60020024)]
    HRESULT UninstallationNotes( [out, retval] BSTR *retval );

    [propget, id(0x60020025)]
    HRESULT UninstallationBehavior( [out, retval] IInstallationBehavior **retval );

    [propget, id(0x60020026)]
    HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );

    [propget, id(0x60020028)]
    HRESULT KBArticleIDs( [out, retval] IStringCollection **retval );

    [id(0x60020027)]
    HRESULT AcceptEula();

    [propget, id(0x60020029)]
    HRESULT DeploymentAction( [out, retval] DeploymentAction *retval );

    [id(0x6002002a)]
    HRESULT CopyFromCache( [in, ref] BSTR path,
                           [in] VARIANT_BOOL toExtractCabFiles );

    [propget, id(0x6002002b)]
    HRESULT DownloadPriority( [out, retval] DownloadPriority *retval );

    [propget, id(0x6002002c)]
    HRESULT DownloadContents( [out, retval] IUpdateDownloadContentCollection **retval );
}

[

    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(07f7438c-7709-4ca5-b518-91279288134e),
    pointer_default(unique),
    hidden
]
interface IUpdateCollection : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Item( [in] LONG index,
                  [out, retval] IUpdate **retval );

    [propput, id(DISPID_VALUE)]
    HRESULT Item( [in] LONG index,
                  [in] IUpdate *value );

    [propget, id(DISPID_NEWENUM)]
    HRESULT _NewEnum( [out, retval] IUnknown **retval );

    [propget, id(0x60020001)]
    HRESULT Count( [out, retval] LONG *retval );

    [propget, id(0x60020002)]
    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );

    [id(0x60020003)]
    HRESULT Add( [in] IUpdate *value,
                 [out, retval] LONG *retval );

    [id(0x60020004)]
    HRESULT Clear();

    [id(0x60020005)]
    HRESULT Copy( [out, retval] IUpdateCollection **retval );

    [id(0x60020006)]
    HRESULT Insert( [in] LONG index,
                [in] IUpdate *value );

    [id(0x60020007)]
    HRESULT RemoveAt( [in] LONG index );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(7366ea16-7a1a-4ea2-b042-973d3e9cd99b),
    pointer_default(unique),
]
interface ISearchJob : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT AsyncState( [out, retval] VARIANT *retval );

    [propget, id(0x60020002)]
    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );

    [id(0x60020003)]
    HRESULT CleanUp();

    [id(0x60020004)]
    HRESULT RequestAbort();
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(d40cff62-e08c-4498-941a-01e25f0fd33c),
    pointer_default(unique),
]
interface ISearchResult : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT ResultCode( [out, retval] OperationResultCode *retval );

    [propget, id(0x60020002)]
    HRESULT RootCategories( [out, retval] ICategoryCollection **retval );

    [propget, id(0x60020003)]
    HRESULT Updates( [out, retval] IUpdateCollection **retval );

    [propget, id(0x60020004)]
    HRESULT Warnings( [out, retval] IUpdateExceptionCollection **retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(be56a644-af0e-4e0e-a311-c1d8e695cbff),
    pointer_default(unique),
]
interface IUpdateHistoryEntry : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT Operation( [out, retval] UpdateOperation *retval );

    [propget, id(0x60020002)]
    HRESULT ResultCode( [out, retval] OperationResultCode *retval );

    [propget, id(0x60020003)]
    HRESULT HResult( [out, retval] LONG *retval );

    [propget, id(0x60020004)]
    HRESULT Date( [out, retval] DATE *retval );

    [propget, id(0x60020005)]
    HRESULT UpdateIdentity( [out, retval] IUpdateIdentity **retval );

    [propget, id(0x60020006)]
    HRESULT Title( [out, retval] BSTR *retval );

    [propget, id(0x60020007)]
    HRESULT Description( [out, retval] BSTR *retval );

    [propget, id(0x60020008)]
    HRESULT UnmappedResultCode( [out, retval] LONG *retval );

    [propget, id(0x60020009)]
    HRESULT ClientApplicationID( [out, retval] BSTR *retval );

    [propget, id(0x6002000a)]
    HRESULT ServerSelection( [out, retval] ServerSelection *retval );

    [propget, id(0x6002000b)]
    HRESULT ServiceID( [out, retval] BSTR *retval );

    [propget, id(0x6002000c)]
    HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );

    [propget, id(0x6002000d)]
    HRESULT UninstallationNotes( [out, retval] BSTR *retval );

    [propget, id(0x6002000e)]
    HRESULT SupportUrl( [out, retval] BSTR *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(a7f04f3c-a290-435b-aadf-a116c3357a5c),
    pointer_default(unique),
]
interface IUpdateHistoryEntryCollection : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Item( [in] LONG index,
                  [out, retval] IUpdateHistoryEntry **retval );

    [propget, id(DISPID_NEWENUM)]
    HRESULT _NewEnum( [out, retval] IUnknown **retval );

    [propget, id(0x60020001)]
    HRESULT Count( [out, retval] LONG *retval );
}

[
    object,
    uuid(8f45abf1-f9ae-4b95-a933-f0f66e5056ea),
    oleautomation,
    dual,
    nonextensible,
    pointer_default(unique),
]
interface IUpdateSearcher : IDispatch
{
    [propget]
    HRESULT CanAutomaticallyUpgradeService(
        [out, retval] VARIANT_BOOL *retval);

    [propput]
    HRESULT CanAutomaticallyUpgradeService(
        [in] VARIANT_BOOL value);

    [propget]
    HRESULT ClientApplicationID(
        [out, retval] BSTR *retval);

    [propput]
    HRESULT ClientApplicationID(
        [in] BSTR value);

    [propget]
    HRESULT IncludePotentiallySupersededUpdates(
        [out, retval] VARIANT_BOOL *retval);

    [propput]
    HRESULT IncludePotentiallySupersededUpdates(
        [in] VARIANT_BOOL value);

    [propget]
    HRESULT ServerSelection(
        [out, retval] ServerSelection *retval);

    [propput]
    HRESULT ServerSelection(
        [in] ServerSelection value);

    HRESULT BeginSearch(
        [in] BSTR criteria,
        [in] IUnknown *onCompleted,
        [in] VARIANT state,
        [out, retval] ISearchJob **retval);

    HRESULT EndSearch(
        [in] ISearchJob *searchJob,
        [out, retval] ISearchResult **retval);

    HRESULT EscapeString(
        [in] BSTR unescaped,
        [out, retval] BSTR *retval);

    HRESULT QueryHistory(
        [in] LONG startIndex,
        [in] LONG count,
        [out, retval] IUpdateHistoryEntryCollection **retval);

    HRESULT Search(
        [in] BSTR criteria,
        [out, retval] ISearchResult **retval);

    [propget]
    HRESULT Online(
        [out, retval] VARIANT_BOOL *retval);

    [propput]
    HRESULT Online(
        [in] VARIANT_BOOL value);

    HRESULT GetTotalHistoryCount(
        [out, retval] LONG *retval);

    [propget]
    HRESULT ServiceID(
        [out, retval] BSTR *retval);

    [propput]
    HRESULT ServiceID(
        [in] BSTR value);
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(bf99af76-b575-42ad-8aa4-33cbb5477af1),
    pointer_default(unique),
]
interface IUpdateDownloadResult : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT HResult( [out, retval] LONG *retval );

    [propget, id(0x60020002)]
    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(d31a5bac-f719-4178-9dbb-5e2cb47fd18a),
    pointer_default(unique),
]
interface IDownloadProgress : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT CurrentUpdateBytesDownloaded( [out, retval] DECIMAL *retval );

    [propget, id(0x60020002)]
    HRESULT CurrentUpdateBytesToDownload( [out, retval] DECIMAL *retval );

    [propget, id(0x60020003)]
    HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );

    [propget, id(0x60020004)]
    HRESULT PercentComplete( [out, retval] LONG *retval );

    [propget, id(0x60020005)]
    HRESULT TotalBytesDownloaded( [out, retval] DECIMAL *retval );

    [propget, id(0x60020006)]
    HRESULT TotalBytesToDownload( [out, retval] DECIMAL *retval );

    [id(0x60020007)]
    HRESULT GetUpdateResult( [in] LONG updateIndex,
                             [out, retval] IUpdateDownloadResult **retval );


    [propget, id(0x60020008)]
    HRESULT CurrentUpdateDownloadPhase( [out, retval] DownloadPhase *retval );

    [propget, id(0x60020009)]
    HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(c574de85-7358-43f6-aae8-8697e62d8ba7),
    pointer_default(unique),
]
interface IDownloadJob : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT AsyncState( [out, retval] VARIANT *retval );

    [propget, id(0x60020002)]
    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020003)]
    HRESULT Updates( [out, retval] IUpdateCollection **retval );

    [id(0x60020004)]
    HRESULT CleanUp();

    [id(0x60020005)]
    HRESULT GetProgress( [out, retval] IDownloadProgress **retval );

    [id(0x60020006)]
    HRESULT RequestAbort();
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(daa4fdd0-4727-4dbe-a1e7-745dca317144),
    pointer_default(unique),
]
interface IDownloadResult : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT HResult( [out, retval] LONG *retval );

    [propget, id(0x60020002)]
    HRESULT ResultCode( [out, retval] OperationResultCode *retval );

    [id(0x60020003)]
    HRESULT GetUpdateResult( [in] LONG updateIndex,
                             [out, retval] IUpdateDownloadResult **retval );
}

[
    object,
    uuid(68f1c6f9-7ecc-4666-a464-247fe12496c3),
    oleautomation,
    dual,
    nonextensible,
    pointer_default(unique),
    hidden
]
interface IUpdateDownloader : IDispatch
{
    [propget]
    HRESULT ClientApplicationID(
        [out, retval] BSTR *retval);

    [propput]
    HRESULT ClientApplicationID(
        [in] BSTR value);

    [propget]
    HRESULT IsForced(
        [out, retval] VARIANT_BOOL *retval);

    [propput]
    HRESULT IsForced(
        [in] VARIANT_BOOL value);

    [propget]
    HRESULT Priority(
        [out, retval] DownloadPriority *retval);

    [propput]
    HRESULT Priority(
        [in] DownloadPriority value);

    [propget]
    HRESULT Updates(
        [out, retval] IUpdateCollection **retval);

    [propput]
    HRESULT Updates(
        [in] IUpdateCollection *value);

    HRESULT BeginDownload(
        [in] IUnknown *onProgressChanged,
        [in] IUnknown *onCompleted,
        [in] VARIANT state,
        [out, retval] IDownloadJob **retval);

    HRESULT Download(
        [out, retval] IDownloadResult **retval);

    HRESULT EndDownload(
        [in] IDownloadJob *value,
        [out, retval] IDownloadResult **retval);
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(d940f0f8-3cbb-4fd0-993f-471e7f2328ad),
    pointer_default(unique),
]
interface IUpdateInstallationResult : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT HResult( [out, retval] LONG *retval );

    [propget, id(0x60020002)]
    HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020003)]
    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(345c8244-43a3-4e32-a368-65f073b76f36),
    pointer_default(unique),
]
interface IInstallationProgress : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );

    [propget, id(0x60020002)]
    HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );

    [propget, id(0x60020003)]
    HRESULT PercentComplete( [out, retval] LONG *retval );

    [id(0x60020004)]
    HRESULT GetUpdateResult( [in] LONG updateIndex,
                             [out, retval] IUpdateInstallationResult **retval );
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(5c209f0b-bad5-432a-9556-4699bed2638a),
    pointer_default(unique),
]
interface IInstallationJob : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT AsyncState( [out, retval] VARIANT *retval );

    [propget, id(0x60020002)]
    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020003)]
    HRESULT Updates( [out, retval] IUpdateCollection **retval );

    [id(0x60020004)]
    HRESULT CleanUp();

    [id(0x60020005)]
    HRESULT GetProgress( [out, retval] IInstallationProgress **retval );

    [id(0x60020006)]
    HRESULT RequestAbort();
}

[
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(a43c56d6-7451-48d4-af96-b6cd2d0d9b7a),
    pointer_default(unique),
]
interface IInstallationResult : IDispatch
{
    [propget, id(0x60020001)]
    HRESULT HResult( [out, retval] LONG *retval );

    [propget, id(0x60020002)]
    HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );

    [propget, id(0x60020003)]
    HRESULT ResultCode( [out, retval] OperationResultCode *retval );

    [id(0x60020004)]
    HRESULT GetUpdateResult( [in] LONG updateIndex,
                             [out, retval] IUpdateInstallationResult **retval );
}

[
    object,
    uuid(7b929c68-ccdc-4226-96b1-8724600b54c2),
    oleautomation,
    dual,
    nonextensible,
    pointer_default(unique),
]
interface IUpdateInstaller : IDispatch
{
    [propget]
    HRESULT ClientApplicationID(
        [out, retval] BSTR *retval);

    [propput]
    HRESULT ClientApplicationID(
        [in] BSTR value);

    [propget]
    HRESULT IsForced(
        [out, retval] VARIANT_BOOL *retval);

    [propput]
    HRESULT IsForced(
        [in] VARIANT_BOOL value);

    [propget, restricted]
    HRESULT ParentHwnd(
        [out, retval] HWND *retval);

    [propput, restricted]
    HRESULT ParentHwnd(
        [in, unique] HWND value);

    [propput]
    HRESULT ParentWindow(
        [in, unique] IUnknown *value);

    [propget]
    HRESULT ParentWindow(
        [out, retval] IUnknown **retval);

    [propget]
    HRESULT Updates(
        [out, retval] IUpdateCollection **retval);

    [propput]
    HRESULT Updates(
        [in] IUpdateCollection *value);

    HRESULT BeginInstall(
        [in] IUnknown *onProgressChanged,
        [in] IUnknown *onCompleted,
        [in] VARIANT state,
        [out, retval] IInstallationJob **retval);

    HRESULT BeginUninstall(
        [in] IUnknown *onProgressChanged,
        [in] IUnknown *onCompleted,
        [in] VARIANT state,
        [out, retval] IInstallationJob **retval);

    HRESULT EndInstall(
        [in] IInstallationJob *value,
        [out, retval] IInstallationResult **retval);

    HRESULT EndUninstall(
        [in] IInstallationJob *value,
        [out, retval] IInstallationResult **retval);

    HRESULT Install(
        [out, retval] IInstallationResult **retval);

    HRESULT RunWizard(
        [in, defaultvalue("")] BSTR dialogTitle,
        [out, retval] IInstallationResult **retval);

    [propget]
    HRESULT IsBusy(
        [out, retval] VARIANT_BOOL *retval);

    HRESULT Uninstall(
        [out, retval] IInstallationResult **retval);

    [propget]
    HRESULT AllowSourcePrompts(
        [out, retval] VARIANT_BOOL *retval);

    [propput]
    HRESULT AllowSourcePrompts(
        [in] VARIANT_BOOL value);

    [propget]
    HRESULT RebootRequiredBeforeInstallation(
        [out, retval] VARIANT_BOOL *retval);
}

[
    object,
    uuid(ADE87BF7-7B56-4275-8FAB-B9B0E591844B),
    oleautomation,
    hidden,
    dual,
    nonextensible,
    pointer_default(unique),
]
interface ISystemInformation : IDispatch
{
    [propget]
    HRESULT OemHardwareSupportLink(
        [out, retval] BSTR *retval);

    [propget]
    HRESULT RebootRequired(
        [out, retval] VARIANT_BOOL *retval);
}

[
    helpstring("AutomaticUpdates Class"),
    threading(both),
    progid("Microsoft.Update.AutoUpdate.1"),
    vi_progid("Microsoft.Update.AutoUpdate"),
    uuid(bfe18e9c-6d87-4450-b37c-e02f0b373803)
]
coclass AutomaticUpdates { interface IAutomaticUpdates; }

[
    helpstring("UpdateSession Class"),
    threading(both),
    progid("Microsoft.Update.Session.1"),
    vi_progid("Microsoft.Update.Session"),
    uuid(4cb43d7f-7eee-4906-8698-60da1c38f2fe)
]
coclass UpdateSession { interface IUpdateSession; }

[
    helpstring("SystemInformation Class"),
    threading(both),
    progid("Microsoft.Update.SystemInfo.1"),
    vi_progid("Microsoft.Update.SystemInfo"),
    uuid(C01B9BA0-BEA7-41BA-B604-D0A36F469133)
]
coclass SystemInformation { interface ISystemInformation; }

} /* WUApiLib */
