//=======================================================================
//
//  (C) Copyright 2003-2004 Microsoft Corporation.  All Rights Reserved.
//
//  File: wuapi.idl
//
//  Contents:   Windows Update Services Client Interfaces.
//
//=======================================================================

cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// wuapi.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// (C) Copyright 2003-2004 Microsoft Corporation.  All Rights Reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("#pragma comment(lib, \"wuguid.lib\")")
cpp_quote("")
cpp_quote("//--------------------------------------------------------------------------")
cpp_quote("// Windows Update Services Client Interfaces.")

cpp_quote("// --------------------------------------------------------------------------------")
cpp_quote("// GUIDS")
cpp_quote("// --------------------------------------------------------------------------------")
cpp_quote("// {B596CC9F-56E5-419E-A622-E01BB457431E}")
cpp_quote("DEFINE_GUID(LIBID_WUApiLib,0xB596CC9F,0x56E5,0x419E,0xA6,0x22,0xE0,0x1B,0xB4,0x57,0x43,0x1E);")
cpp_quote("")
cpp_quote("// {A976C28D-75A1-42AA-94AE-8AF8B872089A}")
cpp_quote("DEFINE_GUID(IID_IUpdateLockdown,0xa976c28d,0x75a1,0x42aa,0x94,0xae,0x8a,0xf8,0xb8,0x72,0x08,0x9a);")
cpp_quote("")
cpp_quote("// {EFF90582-2DDC-480F-A06D-60F3FBC362C3}")
cpp_quote("DEFINE_GUID(IID_IStringCollection,0xeff90582,0x2ddc,0x480f,0xa0,0x6d,0x60,0xf3,0xfb,0xc3,0x62,0xc3);")
cpp_quote("")
cpp_quote("// {174C81FE-AECD-4DAE-B8A0-2C6318DD86A8}")
cpp_quote("DEFINE_GUID(IID_IWebProxy,0x174c81fe,0xaecd,0x4dae,0xb8,0xa0,0x2c,0x63,0x18,0xdd,0x86,0xa8);")
cpp_quote("")
cpp_quote("// {ADE87BF7-7B56-4275-8FAB-B9B0E591844B}")
cpp_quote("DEFINE_GUID(IID_ISystemInformation,0xade87bf7,0x7b56,0x4275,0x8f,0xab,0xb9,0xb0,0xe5,0x91,0x84,0x4b);")
cpp_quote("")
cpp_quote("// {2EE48F22-AF3C-405F-8970-F71BE12EE9A2}")
cpp_quote("DEFINE_GUID(IID_IAutomaticUpdatesSettings,0x2ee48f22,0xaf3c,0x405f,0x89,0x70,0xf7,0x1b,0xe1,0x2e,0xe9,0xa2);")
cpp_quote("")
cpp_quote("// {673425BF-C082-4C7C-BDFD-569464B8E0CE}")
cpp_quote("DEFINE_GUID(IID_IAutomaticUpdates,0x673425bf,0xc082,0x4c7c,0xbd,0xfd,0x56,0x94,0x64,0xb8,0xe0,0xce);")
cpp_quote("")
cpp_quote("// {46297823-9940-4C09-AED9-CD3EA6D05968}")
cpp_quote("DEFINE_GUID(IID_IUpdateIdentity,0x46297823,0x9940,0x4c09,0xae,0xd9,0xcd,0x3e,0xa6,0xd0,0x59,0x68);")
cpp_quote("")
cpp_quote("// {7C907864-346C-4AEB-8F3F-57DA289F969F}")
cpp_quote("DEFINE_GUID(IID_IImageInformation,0x7c907864,0x346c,0x4aeb,0x8f,0x3f,0x57,0xda,0x28,0x9f,0x96,0x9f);")
cpp_quote("")
cpp_quote("// {81DDC1B8-9D35-47A6-B471-5B80F519223B}")
cpp_quote("DEFINE_GUID(IID_ICategory,0x81ddc1b8,0x9d35,0x47a6,0xb4,0x71,0x5b,0x80,0xf5,0x19,0x22,0x3b);")
cpp_quote("")
cpp_quote("// {3A56BFB8-576C-43F7-9335-FE4838FD7E37}")
cpp_quote("DEFINE_GUID(IID_ICategoryCollection,0x3a56bfb8,0x576c,0x43f7,0x93,0x35,0xfe,0x48,0x38,0xfd,0x7e,0x37);")
cpp_quote("")
cpp_quote("// {D9A59339-E245-4DBD-9686-4D5763E39624}")
cpp_quote("DEFINE_GUID(IID_IInstallationBehavior,0xd9a59339,0xe245,0x4dbd,0x96,0x86,0x4d,0x57,0x63,0xe3,0x96,0x24);")
cpp_quote("")
cpp_quote("// {54A2CB2D-9A0C-48B6-8A50-9ABB69EE2D02}")
cpp_quote("DEFINE_GUID(IID_IUpdateDownloadContent,0x54a2cb2d,0x9a0c,0x48b6,0x8a,0x50,0x9a,0xbb,0x69,0xee,0x2d,0x02);")
cpp_quote("")
cpp_quote("// {BC5513C8-B3B8-4BF7-A4D4-361C0D8C88BA}")
cpp_quote("DEFINE_GUID(IID_IUpdateDownloadContentCollection,0xbc5513c8,0xb3b8,0x4bf7,0xa4,0xd4,0x36,0x1c,0x0d,0x8c,0x88,0xba);")
cpp_quote("")
cpp_quote("// {6A92B07A-D821-4682-B423-5C805022CC4D}")
cpp_quote("DEFINE_GUID(IID_IUpdate,0x6a92b07a,0xd821,0x4682,0xb4,0x23,0x5c,0x80,0x50,0x22,0xcc,0x4d);")
cpp_quote("")
cpp_quote("// {84617776-dbeb-4881-b410-aa294227c3fd}")
cpp_quote("DEFINE_GUID(IID_IUpdate2,0x84617776,0xdbeb,0x4881,0xb4,0x10,0xaa,0x29,0x42,0x27,0xc3,0xfd);")
cpp_quote("")
cpp_quote("// {B383CD1A-5CE9-4504-9F63-764B1236F191}")
cpp_quote("DEFINE_GUID(IID_IWindowsDriverUpdate,0xb383cd1a,0x5ce9,0x4504,0x9f,0x63,0x76,0x4b,0x12,0x36,0xf1,0x91);")
cpp_quote("")
cpp_quote("// {84617777-dbeb-4881-b410-aa294227c3fe}")
cpp_quote("DEFINE_GUID(IID_IWindowsDriverUpdate2,0x84617777,0xdbeb,0x4881,0xb4,0x10,0xaa,0x29,0x42,0x27,0xc3,0xfe);")
cpp_quote("")
cpp_quote("// {07F7438C-7709-4CA5-B518-91279288134E}")
cpp_quote("DEFINE_GUID(IID_IUpdateCollection,0x07f7438c,0x7709,0x4ca5,0xb5,0x18,0x91,0x27,0x92,0x88,0x13,0x4e);")
cpp_quote("")
cpp_quote("// {A376DD5E-09D4-427F-AF7C-FED5B6E1C1D6}")
cpp_quote("DEFINE_GUID(IID_IUpdateException,0xa376dd5e,0x09d4,0x427f,0xaf,0x7c,0xfe,0xd5,0xb6,0xe1,0xc1,0xd6);")
cpp_quote("")
cpp_quote("// {A37D00F5-7BB0-4953-B414-F9E98326F2E8}")
cpp_quote("DEFINE_GUID(IID_IInvalidProductLicenseException,0xa37d00f5,0x7bb0,0x4953,0xb4,0x14,0xf9,0xe9,0x83,0x26,0xf2,0xe8);")
cpp_quote("")
cpp_quote("// {A37D00F5-7BB0-4953-B414-F9E98326F2E8}")
cpp_quote("DEFINE_GUID(IID_IUpdateExceptionCollection,0x503626a3,0x8e14,0x4729,0x93,0x55,0x0f,0xe6,0x64,0xbd,0x23,0x21);")
cpp_quote("")
cpp_quote("// {D40CFF62-E08C-4498-941A-01E25F0FD33C}")
cpp_quote("DEFINE_GUID(IID_ISearchResult,0xd40cff62,0xe08c,0x4498,0x94,0x1a,0x01,0xe2,0x5f,0x0f,0xd3,0x3c);")
cpp_quote("")
cpp_quote("// {7366EA16-7A1A-4EA2-B042-973D3E9CD99B}")
cpp_quote("DEFINE_GUID(IID_ISearchJob,0x7366ea16,0x7a1a,0x4ea2,0xb0,0x42,0x97,0x3d,0x3e,0x9c,0xd9,0x9b);")
cpp_quote("")
cpp_quote("// {A700A634-2850-4C47-938A-9E4B6E5AF9A6}")
cpp_quote("DEFINE_GUID(IID_ISearchCompletedCallbackArgs,0xa700a634,0x2850,0x4c47,0x93,0x8a,0x9e,0x4b,0x6e,0x5a,0xf9,0xa6);")
cpp_quote("")
cpp_quote("// {88AEE058-D4B0-4725-A2F1-814A67AE964C}")
cpp_quote("DEFINE_GUID(IID_ISearchCompletedCallback,0x88aee058,0xd4b0,0x4725,0xa2,0xf1,0x81,0x4a,0x67,0xae,0x96,0x4c);")
cpp_quote("")
cpp_quote("// {BE56A644-AF0E-4E0E-A311-C1D8E695CBFF}")
cpp_quote("DEFINE_GUID(IID_IUpdateHistoryEntry,0xbe56a644,0xaf0e,0x4e0e,0xa3,0x11,0xc1,0xd8,0xe6,0x95,0xcb,0xff);")
cpp_quote("")
cpp_quote("// {A7F04F3C-A290-435B-AADF-A116C3357A5C}")
cpp_quote("DEFINE_GUID(IID_IUpdateHistoryEntryCollection,0xa7f04f3c,0xa290,0x435b,0xaa,0xdf,0xa1,0x16,0xc3,0x35,0x7a,0x5c);")
cpp_quote("")
cpp_quote("// {8F45ABF1-F9AE-4B95-A933-F0F66E5056EA}")
cpp_quote("DEFINE_GUID(IID_IUpdateSearcher,0x8f45abf1,0xf9ae,0x4b95,0xa9,0x33,0xf0,0xf6,0x6e,0x50,0x56,0xea);")
cpp_quote("")
cpp_quote("// {BF99AF76-B575-42AD-8AA4-33CBB5477AF1}")
cpp_quote("DEFINE_GUID(IID_IUpdateDownloadResult,0xbf99af76,0xb575,0x42ad,0x8a,0xa4,0x33,0xcb,0xb5,0x47,0x7a,0xf1);")
cpp_quote("")
cpp_quote("// {DAA4FDD0-4727-4DBE-A1E7-745DCA317144}")
cpp_quote("DEFINE_GUID(IID_IDownloadResult,0xdaa4fdd0,0x4727,0x4dbe,0xa1,0xe7,0x74,0x5d,0xca,0x31,0x71,0x44);")
cpp_quote("")
cpp_quote("// {D31A5BAC-F719-4178-9DBB-5E2CB47FD18A}")
cpp_quote("DEFINE_GUID(IID_IDownloadProgress,0xd31a5bac,0xf719,0x4178,0x9d,0xbb,0x5e,0x2c,0xb4,0x7f,0xd1,0x8a);")
cpp_quote("")
cpp_quote("// {C574DE85-7358-43F6-AAE8-8697E62D8BA7}")
cpp_quote("DEFINE_GUID(IID_IDownloadJob,0xc574de85,0x7358,0x43f6,0xaa,0xe8,0x86,0x97,0xe6,0x2d,0x8b,0xa7);")
cpp_quote("")
cpp_quote("// {FA565B23-498C-47A0-979D-E7D5B1813360}")
cpp_quote("DEFINE_GUID(IID_IDownloadCompletedCallbackArgs,0xfa565b23,0x498c,0x47a0,0x97,0x9d,0xe7,0xd5,0xb1,0x81,0x33,0x60);")
cpp_quote("")
cpp_quote("// {77254866-9F5B-4C8E-B9E2-C77A8530D64B}")
cpp_quote("DEFINE_GUID(IID_IDownloadCompletedCallback,0x77254866,0x9f5b,0x4c8e,0xb9,0xe2,0xc7,0x7a,0x85,0x30,0xd6,0x4b);")
cpp_quote("")
cpp_quote("// {324FF2C6-4981-4B04-9412-57481745AB24}")
cpp_quote("DEFINE_GUID(IID_IDownloadProgressChangedCallbackArgs,0x324ff2c6,0x4981,0x4b04,0x94,0x12,0x57,0x48,0x17,0x45,0xab,0x24);")
cpp_quote("")
cpp_quote("// {8C3F1CDD-6173-4591-AEBD-A56A53CA77C1}")
cpp_quote("DEFINE_GUID(IID_IDownloadProgressChangedCallback,0x8c3f1cdd,0x6173,0x4591,0xae,0xbd,0xa5,0x6a,0x53,0xca,0x77,0xc1);")
cpp_quote("")
cpp_quote("// {68F1C6F9-7ECC-4666-A464-247FE12496C3}")
cpp_quote("DEFINE_GUID(IID_IUpdateDownloader,0x68f1c6f9,0x7ecc,0x4666,0xa4,0x64,0x24,0x7f,0xe1,0x24,0x96,0xc3);")
cpp_quote("")
cpp_quote("// {D940F0F8-3CBB-4FD0-993F-471E7F2328AD}")
cpp_quote("DEFINE_GUID(IID_IUpdateInstallationResult,0xd940f0f8,0x3cbb,0x4fd0,0x99,0x3f,0x47,0x1e,0x7f,0x23,0x28,0xad);")
cpp_quote("")
cpp_quote("// {A43C56D6-7451-48D4-AF96-B6CD2D0D9B7A}")
cpp_quote("DEFINE_GUID(IID_IInstallationResult,0xa43c56d6,0x7451,0x48d4,0xaf,0x96,0xb6,0xcd,0x2d,0x0d,0x9b,0x7a);")
cpp_quote("")
cpp_quote("// {345C8244-43A3-4E32-A368-65F073B76F36}")
cpp_quote("DEFINE_GUID(IID_IInstallationProgress,0x345c8244,0x43a3,0x4e32,0xa3,0x68,0x65,0xf0,0x73,0xb7,0x6f,0x36);")
cpp_quote("")
cpp_quote("// {5C209F0B-BAD5-432A-9556-4699BED2638A}")
cpp_quote("DEFINE_GUID(IID_IInstallationJob,0x5c209f0b,0xbad5,0x432a,0x95,0x56,0x46,0x99,0xbe,0xd2,0x63,0x8a);")
cpp_quote("")
cpp_quote("// {250E2106-8EFB-4705-9653-EF13C581B6A1}")
cpp_quote("DEFINE_GUID(IID_IInstallationCompletedCallbackArgs,0x250e2106,0x8efb,0x4705,0x96,0x53,0xef,0x13,0xc5,0x81,0xb6,0xa1);")
cpp_quote("")
cpp_quote("// {45F4F6F3-D602-4F98-9A8A-3EFA152AD2D3}")
cpp_quote("DEFINE_GUID(IID_IInstallationCompletedCallback,0x45f4f6f3,0xd602,0x4f98,0x9a,0x8a,0x3e,0xfa,0x15,0x2a,0xd2,0xd3);")
cpp_quote("")
cpp_quote("// {E4F14E1E-689D-4218-A0B9-BC189C484A01}")
cpp_quote("DEFINE_GUID(IID_IInstallationProgressChangedCallbackArgs,0xe4f14e1e,0x689d,0x4218,0xa0,0xb9,0xbc,0x18,0x9c,0x48,0x4a,0x01);")
cpp_quote("")
cpp_quote("// {E01402D5-F8DA-43BA-A012-38894BD048F1}")
cpp_quote("DEFINE_GUID(IID_IInstallationProgressChangedCallback,0xe01402d5,0xf8da,0x43ba,0xa0,0x12,0x38,0x89,0x4b,0xd0,0x48,0xf1);")
cpp_quote("")
cpp_quote("// {7B929C68-CCDC-4226-96B1-8724600B54C2}")
cpp_quote("DEFINE_GUID(IID_IUpdateInstaller,0x7b929c68,0xccdc,0x4226,0x96,0xb1,0x87,0x24,0x60,0x0b,0x54,0xc2);")
cpp_quote("")
cpp_quote("// {F7C72712-C7F3-4AAD-BC6A-6A0E9696A50E}")
cpp_quote("DEFINE_GUID(IID_IUpdateInstaller2,0xf7c72712,0xc7f3,0x4aad,0xbc,0x6a,0x6a,0x0e,0x96,0x96,0xa5,0x0e);")
cpp_quote("")
cpp_quote("// {816858A4-260D-4260-933A-2585F1ABC76B}")
cpp_quote("DEFINE_GUID(IID_IUpdateSession,0x816858a4,0x260d,0x4260,0x93,0x3a,0x25,0x85,0xf1,0xab,0xc7,0x6b);")
cpp_quote("")
cpp_quote("// {91CAF7B0-EB23-49ED-9937-C52D817F46F7}")
cpp_quote("DEFINE_GUID(IID_IUpdateSession2,0x91caf7b0,0xeb23,0x49ed,0x99,0x37,0xc5,0x2d,0x81,0x7f,0x46,0xf7);")
cpp_quote("")
cpp_quote("// {8C3F0D06-1EB9-4F01-8C2E-1ADC74627829}")
cpp_quote("DEFINE_GUID(IID_IUpdateService,0x8c3f0d06,0x1eb9,0x4f01,0x8c,0x2e,0x1a,0xdc,0x74,0x62,0x78,0x29);")
cpp_quote("")
cpp_quote("// {9B0353AA-0E52-44FF-B8B0-1F7FA0437F88}")
cpp_quote("DEFINE_GUID(IID_IUpdateServiceCollection,0x9b0353aa,0x0e52,0x44ff,0xb8,0xb0,0x1f,0x7f,0xa0,0x43,0x7f,0x88);")
cpp_quote("")
cpp_quote("// {C165FA56-6F87-43AA-9D92-6CEBCC7BCFE4}")
cpp_quote("DEFINE_GUID(IID_IUpdateServiceManager,0xc165fa56,0x6f87,0x43aa,0x9d,0x92,0x6c,0xeb,0xcc,0x7b,0xcf,0xe4);")
cpp_quote("")
cpp_quote("// {72C97D74-7C3B-40AE-B77D-ABDB22EBA6FB}")
cpp_quote("DEFINE_GUID(CLSID_StringCollection,0x72C97D74,0x7C3B,0x40AE,0xB7,0x7D,0xAB,0xDB,0x22,0xEB,0xA6,0xFB);")
cpp_quote("")
cpp_quote("// {B699E5E8-67FF-4177-88B0-3684A3388BFB}")
cpp_quote("DEFINE_GUID(CLSID_UpdateSearcher,0xB699E5E8,0x67FF,0x4177,0x88,0xB0,0x36,0x84,0xA3,0x38,0x8B,0xFB);")
cpp_quote("")
cpp_quote("// {650503cf-9108-4ddc-a2ce-6c2341e1c582}")
cpp_quote("DEFINE_GUID(CLSID_WebProxy,0x650503cf,0x9108,0x4ddc,0xa2,0xce,0x6c,0x23,0x41,0xe1,0xc5,0x82);")
cpp_quote("")
cpp_quote("// {C01B9BA0-BEA7-41BA-B604-D0A36F469133}")
cpp_quote("DEFINE_GUID(CLSID_SystemInformation,0xC01B9BA0,0xBEA7,0x41BA,0xB6,0x04,0xD0,0xA3,0x6F,0x46,0x91,0x33);")
cpp_quote("")
cpp_quote("// {BFE18E9C-6D87-4450-B37C-E02F0B373803}")
cpp_quote("DEFINE_GUID(CLSID_AutomaticUpdates,0xBFE18E9C,0x6D87,0x4450,0xB3,0x7C,0xE0,0x2F,0x0B,0x37,0x38,0x03);")
cpp_quote("")
cpp_quote("// {13639463-00DB-4646-803D-528026140D88}")
cpp_quote("DEFINE_GUID(CLSID_UpdateCollection,0x13639463,0x00DB,0x4646,0x80,0x3D,0x52,0x80,0x26,0x14,0x0D,0x88);")
cpp_quote("")
cpp_quote("// {5BAF654A-5A07-4264-A255-9FF54C7151E7}")
cpp_quote("DEFINE_GUID(CLSID_UpdateDownloader,0x5BAF654A,0x5A07,0x4264,0xA2,0x55,0x9F,0xF5,0x4C,0x71,0x51,0xE7);")
cpp_quote("")
cpp_quote("// {D2E0FE7F-D23E-48E1-93C0-6FA8CC346474}")
cpp_quote("DEFINE_GUID(CLSID_UpdateInstaller,0xD2E0FE7F,0xD23E,0x48E1,0x93,0xC0,0x6F,0xA8,0xCC,0x34,0x64,0x74);")
cpp_quote("")
cpp_quote("// {4CB43D7F-7EEE-4906-8698-60DA1C38F2FE}")
cpp_quote("DEFINE_GUID(CLSID_UpdateSession,0x4CB43D7F,0x7EEE,0x4906,0x86,0x98,0x60,0xDA,0x1C,0x38,0xF2,0xFE);")
cpp_quote("")
cpp_quote("// {91353063-774C-4F84-B05B-498FEC7FBE25}")
cpp_quote("DEFINE_GUID(CLSID_UpdateServiceManager,0x91353063,0x774C,0x4F84,0xB0,0x5B,0x49,0x8F,0xEC,0x7F,0xBE,0x25);")
cpp_quote("")


#ifndef DO_NO_IMPORTS
import "oaidl.idl";
#endif

[
    helpstring(
        "Defines possible ways in which elevated users will be notified about "
        "Automatic Updates events."),
    v1_enum
]
typedef [public] enum tagAutomaticUpdatesNotificationLevel
{
    [helpstring("Not configured")]             aunlNotConfigured            = 0,
    [helpstring("Disabled")]                   aunlDisabled                 = 1,
    [helpstring("Notify before download")]     aunlNotifyBeforeDownload     = 2,
    [helpstring("Notify before installation")] aunlNotifyBeforeInstallation = 3,
    [helpstring("Scheduled installation")]     aunlScheduledInstallation    = 4,
} AutomaticUpdatesNotificationLevel;

[
    helpstring(
        "Defines possible day(s) of week when Automatic Updates may "
        "(un)install updates."),
    v1_enum
]
typedef [public] enum tagAutomaticUpdatesScheduledInstallationDay
{
    [helpstring("Every Day")]       ausidEveryDay       = 0,
    [helpstring("Every Sunday")]    ausidEverySunday    = 1,
    [helpstring("Every Monday")]    ausidEveryMonday    = 2,
    [helpstring("Every Tuesday")]   ausidEveryTuesday   = 3,
    [helpstring("Every Wednesday")] ausidEveryWednesday = 4,
    [helpstring("Every Thursday")]  ausidEveryThursday  = 5,
    [helpstring("Every Friday")]    ausidEveryFriday    = 6,
    [helpstring("Every Saturday")]  ausidEverySaturday  = 7,
} AutomaticUpdatesScheduledInstallationDay;

[
    helpstring("Defines the possible phases during a download operation."),
    v1_enum
]
typedef [public] enum tagDownloadPhase
{
    [helpstring("Initializing")]    dphInitializing     = 1,
    [helpstring("Downloading")]     dphDownloading      = 2,
    [helpstring("Verifying")]       dphVerifying        = 3,
} DownloadPhase;

[
    helpstring("Defines possible priorities for a download operation."),
    v1_enum
]
typedef [public] enum tagDownloadPriority
{
    [helpstring("Low")]     dpLow       = 1,
    [helpstring("Normal")]  dpNormal    = 2,
    [helpstring("High")]    dpHigh      = 3,
} DownloadPriority;

[
    helpstring(
        "Defines possible levels of impact that may be caused by (un)installing"
        " an Update."),
    v1_enum
]
typedef [public] enum tagInstallationImpact
{
    [helpstring("Normal")]                      iiNormal                    = 0,
    [helpstring("Minor")]                       iiMinor                     = 1,
    [helpstring("Requires exclusive handling")] iiRequiresExclusiveHandling = 2,
} InstallationImpact;

[
    helpstring(
        "Defines possible reboot behaviors exhibited by an Update during "
        "(un)installation."),
    v1_enum
]
typedef [public] enum tagInstallationRebootBehavior
{
    [helpstring("Never reboots")]           irbNeverReboots         = 0,
    [helpstring("Always requires reboot")]  irbAlwaysRequiresReboot = 1,
    [helpstring("Can request reboot")]      irbCanRequestReboot     = 2,
} InstallationRebootBehavior;

[
    helpstring(
        "Defines possible results of a download, (un)install, or verification "
        "operation on an update."),
    v1_enum
]
typedef [public] enum tagOperationResultCode
{   /* In the order of significance */
    [helpstring("Not started")]             orcNotStarted           = 0,
    [helpstring("In progress")]             orcInProgress           = 1,
    [helpstring("Succeeded")]               orcSucceeded            = 2,
    [helpstring("Succeeded with errors")]   orcSucceededWithErrors  = 3,
    [helpstring("Failed")]                  orcFailed               = 4,
    [helpstring("Aborted")]                 orcAborted              = 5,
} OperationResultCode;

[
    helpstring(
        "Defines possible server selections the Searcher can search against."),
    v1_enum
]
typedef [public] enum tagServerSelection
{
    [helpstring("Default")]         ssDefault       = 0,
    [helpstring("Managed server")]  ssManagedServer = 1,
    [helpstring("Windows Update")]  ssWindowsUpdate = 2,
    [helpstring("Others")]          ssOthers        = 3,
} ServerSelection;

[
    helpstring("Defines possible types of an update."),
    v1_enum
]
typedef [public] enum tagUpdateType
{
    [helpstring("Software")]        utSoftware  = 1,
    [helpstring("Driver")]          utDriver    = 2,
} UpdateType;

[
    helpstring(
        "Defines operations that can be attempted on an Update."),
    v1_enum
]
typedef [public] enum tagUpdateOperation
{
    [helpstring("Installation")]    uoInstallation = 1,
    [helpstring("Uninstallation")]  uoUninstallation = 2,
} UpdateOperation;

[
    helpstring("Defines actions an Update can be explicitly deployed for."),
    v1_enum
]
typedef [public] enum tagDeploymentAction
{
    [helpstring("None")]            daNone              = 0,
    [helpstring("Installation")]    daInstallation      = 1,
    [helpstring("Uninstallation")]  daUninstallation    = 2,
} DeploymentAction;

[
    helpstring("Defines contexts under which an UpdateException can be raised."),
    v1_enum
]
typedef [public] enum tagUpdateExceptionContext
{
    [helpstring("General")]             uecGeneral          = 1,
    [helpstring("WindowsDriver")]       uecWindowsDriver    = 2,
    [helpstring("WindowsInstaller")]    uecWindowsInstaller = 3,
} UpdateExceptionContext;

[
    helpstring("Defines the progressive states an Update can go through to get installed."),
    v1_enum
]
typedef [public] enum tagInstalledState
{
    [helpstring("Not installed")]             isNotInstalled  = 0,
    [helpstring("Installed Pending Reboot")]  isPendingReboot = 1,
    [helpstring("Installed")]                 isInstalled     = 2,
} InstalledState;

const LONG UPDATE_LOCKDOWN_WEBSITE_ACCESS = 0x00000001;
    // all other bits are reserved.

//Forward declarations
interface ICategoryCollection;
interface IUpdateCollection;
interface IUpdate;

[
    helpstring("IUpdateLockdown Interface"),
    object,
    oleautomation,
    nonextensible,
    uuid(a976c28d-75a1-42aa-94ae-8af8b872089a),
    pointer_default(unique)
]
interface IUpdateLockdown : IUnknown
{
//methods:
    [
        id(0x60010001),
        helpstring("Restricts access to functionality the object provides.")
    ]
    HRESULT LockDown(
                [in] LONG flags);
}

[
    helpstring("IStringCollection Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(eff90582-2ddc-480f-a06d-60f3fbc362c3),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IStringCollection : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets an element in the collection.")
    ]
    HRESULT Item(
                [in] LONG index,
                [out, retval] BSTR* retval);
    [
        id(DISPID_VALUE),
        propput,
        helpstring("Sets an element in the collection.")
    ]
    HRESULT Item(
                [in] LONG index,
                [in] BSTR value);

    [
        id(DISPID_NEWENUM),
        propget,
        helpstring(
            "Gets an IEnumVARIANT interface on an object that can be used to "
            "enumerate the collection.")
    ]
    HRESULT _NewEnum(
                [out, retval] IUnknown** retval);

    [
        id(0x60020001),
        propget,
        helpstring("Gets the number of elements contained in the collection.")
    ]
    HRESULT Count(
                [out, retval] LONG* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a boolean value indicating whether the collection is "
            "read-only.")
    ]
    HRESULT ReadOnly(
                [out, retval] VARIANT_BOOL* retval);

//methods:
    [
        id(0x60020003),
        helpstring("Adds an item to the collection.")
    ]
    HRESULT Add(
                [in] BSTR value,
                [out, retval] LONG* retval);

    [
        id(0x60020004),
        helpstring("Removes all elements from the collection.")
    ]
    HRESULT Clear( );

    [
        id(0x60020005),
        helpstring("Creates a deep read-writable copy of the collection.")
    ]
    HRESULT Copy(
                [out, retval] IStringCollection** retval);

    [
        id(0x60020006),
        helpstring(
            "Inserts an item to the collection at the specified position.")
    ]
    HRESULT Insert(
                [in] LONG index,
                [in] BSTR value);

    [
        id(0x60020007),
        helpstring(
            "Removes the item at the specified index from the collection.")
    ]
    HRESULT RemoveAt(
                [in] LONG index);
}

[
    helpstring("IWebProxy Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(174c81fe-aecd-4dae-b8a0-2c6318dd86a8),
    pointer_default(unique),
]
interface IWebProxy : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets the address of the proxy server.")
    ]
    HRESULT Address(
                [out, retval] BSTR* retval);
    [
        id(0x60020001),
        propput,
        helpstring("Sets the address of the proxy server.")
    ]
    HRESULT Address(
                [in] BSTR value);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a collection of addresses that do not use the proxy server.")
    ]
    HRESULT BypassList(
                [out, retval] IStringCollection** retval);
    [
        id(0x60020002),
        propput,
        helpstring(
            "Sets a collection of addresses that do not use the proxy server.")
    ]
    HRESULT BypassList(
                [in] IStringCollection* value);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets a value indicating whether to bypass the proxy server for "
            "local addresses.")
    ]
    HRESULT BypassProxyOnLocal(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60020003),
        propput,
        helpstring(
            "Sets a value indicating whether to bypass the proxy server for "
            "local addresses.")
    ]
    HRESULT BypassProxyOnLocal(
                [in] VARIANT_BOOL value);

    [
        id(0x60020004),
        propget,
        helpstring(
            "Gets a boolean value indicating whether the WebProxy object is "
            "read-only.")
    ]
    HRESULT ReadOnly(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020005),
        propget,
        helpstring(
            "Gets the user name to submit to the proxy server for "
            "authentication.")
    ]
    HRESULT UserName(
                [out, retval] BSTR* retval);
    [
        id(0x60020005),
        propput,
        helpstring(
            "Sets the user name to submit to the proxy server for authentication.")
    ]
    HRESULT UserName(
                [in] BSTR value);

//methods:
    [
        id(0x60020006),
        helpstring(
            "Sets the password to submit to the proxy server for "
            "authentication.")
    ]
    HRESULT SetPassword(
                [in] BSTR value);

    [
        id(0x60020007),
        helpstring(
            "Launches the Credentials UI to prompt user for password for proxy "
            "authentication.")
    ]
    HRESULT PromptForCredentials(
                [in, unique] IUnknown* pParentWindow,
                [in] BSTR bstrTitle);

    [
        id(0x60020008),
        restricted,
        helpstring(
            "Launches the Credentials UI to prompt user for password for proxy "
            "authentication.")
    ]
    HRESULT PromptForCredentialsFromHwnd(
                [in, unique] HWND hwndParent, 
                [in] BSTR bstrTitle);

//properties:
    [
        id(0x60020009),
        propget,
        helpstring("Indicates whether to automatically detect proxy settings.")
    ]
    HRESULT AutoDetect(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60020009),
        propput,
        helpstring("Specifies whether to automatically detect proxy settings.")
    ]
    HRESULT AutoDetect(
                [in] VARIANT_BOOL value);
}

[
    helpstring("ISystemInformation Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(ade87bf7-7b56-4275-8fab-b9b0e591844b),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface ISystemInformation : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets the hyperlink to the support infomation on the OEM hardware.")
    ]
    HRESULT OemHardwareSupportLink(
                [out, retval] BSTR* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a value indicating whether a system reboot is required to "
            "complete (un)installation of one or more Updates.")
    ]
    HRESULT RebootRequired(
                [out, retval] VARIANT_BOOL* retval);
}

[
    helpstring("IAutomaticUpdatesSettings Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(2ee48f22-af3c-405f-8970-f71be12ee9a2),
    pointer_default(unique)
]
interface IAutomaticUpdatesSettings : IDispatch
{
//properties:

    [
        id(0x60020001),
        propget,
        helpstring(
            "Indicates how elevated users will be notified about Automatic "
            "Updates events.")
    ]
    HRESULT NotificationLevel(
                [out, retval] AutomaticUpdatesNotificationLevel* retval);
    [
        id(0x60020001),
        propput,
        helpstring(
            "Specifies how elevated users will be notified about Automatic "
            "Updates events.")
    ]
    HRESULT NotificationLevel(
                [in] AutomaticUpdatesNotificationLevel value);

    [
        id(0x60020002),
        propget,
        helpstring("Indicates whether the settings are read-only.")
    ]
    HRESULT ReadOnly(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Indicates whether the Automatic Updates service is required by "
            "Group Policy.")
    ]
    HRESULT Required(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020004),
        propget,
        helpstring(
            "Indicates which day(s) of week Automatic Updates may (un)install "
            "updates.")
    ]
    HRESULT ScheduledInstallationDay(
                [out, retval] AutomaticUpdatesScheduledInstallationDay* retval);
    [
        id(0x60020004),
        propput,
        helpstring(
            "Specifies which day(s) of week Automatic Updates may (un)install "
            "updates.")
    ]
    HRESULT ScheduledInstallationDay(
                [in] AutomaticUpdatesScheduledInstallationDay value);

    [
        id(0x60020005),
        propget,
        helpstring(
            "Indicates the time when Automatic Updates may (un)install "
            "updates.")
    ]
    HRESULT ScheduledInstallationTime(
                [out, retval] LONG* retval);
    [
        id(0x60020005),
        propput,
        helpstring(
            "Specifies the time when Automatic Updates may (un)install "
            "updates.")
    ]
    HRESULT ScheduledInstallationTime(
                [in] LONG value);

//methods:
    [
        id(0x60020006),
        helpstring("Gets the up-to-date settings.")
    ]
    HRESULT Refresh();

    [
        id(0x60020007),
        helpstring("Applies the settings.")
    ]
    HRESULT Save();
}

[
    helpstring("IAutomaticUpdates Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(673425bf-c082-4c7c-bdfd-569464b8e0ce),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IAutomaticUpdates : IDispatch
{
//methods:
    [
        id(0x60020001),
        helpstring("Triggers automatic updating now if it is not yet started.")
    ]
    HRESULT DetectNow();

    [
        id(0x60020002),
        helpstring("Pauses automatic updating.")
    ]
    HRESULT Pause();

    [
        id(0x60020003),
        helpstring("Resumes automatic updating if paused.")
    ]
    HRESULT Resume();

    [
        id(0x60020004),
        helpstring(
            "Display a dialog box showing settings for Automatic Updates.")
    ]
    HRESULT ShowSettingsDialog();

//properties:
    [
        id(0x60020005),
        propget,
        helpstring("Returns the settings to configure Automatic Updates.")
    ]
    HRESULT Settings(
                [out, retval] IAutomaticUpdatesSettings** retval);

    [
        id(0x60020006),
        propget,
        helpstring(
            "Indicates whether all the components that Automatic Updates "
            "requires are up and running.")
    ]
    HRESULT ServiceEnabled(
                [out, retval] VARIANT_BOOL* retval);

//methods:
    [
        id(0x60020007),
        helpstring(
            "Enables all the components that Automatic Updates requires.")
    ]
    HRESULT EnableService();
}

[
    helpstring("IUpdateIdentity Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(46297823-9940-4c09-aed9-cd3ea6d05968),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateIdentity : IDispatch
{
//properties:
    [
        id(0x60020002),
        propget,
        helpstring("Gets the revision number of the Update.")
    ]
    HRESULT RevisionNumber(
                [out, retval] LONG* retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets a string identifying the Update in a globally-unique manner.")
    ]
    HRESULT UpdateID(
                [out, retval] BSTR* retval);
}

[
    helpstring("IImageInformation Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(7c907864-346c-4aeb-8f3f-57da289f969f),
    pointer_default(unique),
]
interface IImageInformation : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets the ATL text of the image.")
    ]
    HRESULT AltText(
                [out, retval] BSTR* retval);

    [
        id(0x60020002),
        propget,
        helpstring("Gets the height of the image, in pixels.")
    ]
    HRESULT Height(
                [out, retval] LONG* retval);

    [
        id(0x60020003),
        propget,
        helpstring("Gets the source location of the image.")
    ]
    HRESULT Source(
                [out, retval] BSTR* retval);

    [
        id(0x60020004),
        propget,
        helpstring("Gets the width of the image, in pixels.")
    ]
    HRESULT Width(
                [out, retval] LONG* retval);
}

[
    helpstring("ICategory Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(81ddc1b8-9d35-47a6-b471-5b80f519223b),
    pointer_default(unique),
]
interface ICategory : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets the localized name of the Category.")
    ]
    HRESULT Name(
                [out, retval] BSTR* retval);

    [
        id(0x60020001),
        propget,
        helpstring("Gets the category ID of the Category.")
    ]
    HRESULT CategoryID(
                [out, retval] BSTR* retval);

    [
        id(0x60020002),
        propget,
        helpstring("Gets the children of the Category.")
    ]
    HRESULT Children(
                [out, retval] ICategoryCollection** retval);

    [
        id(0x60020003),
        propget,
        helpstring("Gets the description of the Category.")
    ]
    HRESULT Description(
                [out, retval] BSTR* retval);

    [
        id(0x60020004),
        propget,
        helpstring(
            "Gets information on the image associated with the Category.")
    ]
    HRESULT Image(
                [out, retval] IImageInformation** retval);

    [
        id(0x60020005),
        propget,
        helpstring(
            "Gets the recommended display order of the Category among its "
            "siblings.")
    ]
    HRESULT Order(
                [out, retval] LONG* retval);

    [
        id(0x60020006),
        propget,
        helpstring("Gets the parent of the Category.")
    ]
    HRESULT Parent(
                [out, retval] ICategory** retval);

    [
        id(0x60020007),
        propget,
        helpstring("Gets the type of the Category.")
    ]
    HRESULT Type(
                [out, retval] BSTR* retval);

    [
        id(0x60020008),
        propget,
        helpstring("Gets the updates which immediately belong to the Category.")
    ]
    HRESULT Updates(
                [out, retval] IUpdateCollection** retval);
}

[
    helpstring("ICategoryCollection Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(3a56bfb8-576c-43f7-9335-fe4838fd7e37),
    pointer_default(unique),
]
interface ICategoryCollection : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets an element in the collection.")
    ]
    HRESULT Item(
                [in] LONG index,
                [out, retval] ICategory** retval);

    [
        id(DISPID_NEWENUM),
        propget,
        helpstring(
            "Gets an IEnumVARIANT interface on an object that can be used to "
            "enumerate the collection.")
    ]
    HRESULT _NewEnum(
                [out, retval] IUnknown** retval);

    [
        id(0x60020001),
        propget,
        helpstring("Gets the number of elements contained in the collection.")
    ]
    HRESULT Count(
                [out, retval] LONG* retval);
}

[
    helpstring("IInstallationBehavior Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(d9a59339-e245-4dbd-9686-4d5763e39624),
    pointer_default(unique),
]
interface IInstallationBehavior : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets a value indicating whether (un)installation of the Update can request user input.")
    ]
    HRESULT CanRequestUserInput(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020002),
        propget,
        helpstring("Gets a value assessing how (un)installation of the Update will impact the target computer.")
    ]
    HRESULT Impact(
                [out, retval] InstallationImpact* retval);

    [
        id(0x60020003),
        propget,
        helpstring("Gets a value specifying the reboot behavior exhibited by (un)installing the Update.")
    ]
    HRESULT RebootBehavior(
                [out, retval] InstallationRebootBehavior* retval);

    [
        id(0x60020004),
        propget,
        helpstring("Gets a value indicating whether (un)installation of the Update requires network connectivity.")
    ]
    HRESULT RequiresNetworkConnectivity(
                [out, retval] VARIANT_BOOL* retval);
}

[
    helpstring("IUpdateDownloadContent Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02),
    pointer_default(unique),
]
interface IUpdateDownloadContent : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets the location of the download content on the hosting server.")
    ]
    HRESULT DownloadUrl(
                [out, retval] BSTR* retval);
}

[
    helpstring("IUpdateDownloadContentCollection Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba),
    pointer_default(unique),
]
interface IUpdateDownloadContentCollection : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets an element in the collection.")
    ]
    HRESULT Item(
                [in] LONG index,
                [out, retval] IUpdateDownloadContent** retval);

    [
        id(DISPID_NEWENUM),
        propget,
        helpstring(
            "Gets an IEnumVARIANT interface on an object that can be used to "
            "enumerate the collection.")
    ]
    HRESULT _NewEnum(
                [out, retval] IUnknown** retval);

    [
        id(0x60020001),
        propget,
        helpstring("Gets the number of elements contained in the collection.")
    ]
    HRESULT Count(
                [out, retval] LONG* retval);
}

[
    helpstring("IUpdate Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(6a92b07a-d821-4682-b423-5c805022cc4d),
    pointer_default(unique),
]
interface IUpdate : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets the localized title of the Update.")
    ]
    HRESULT Title(
                [out, retval] BSTR* retval);

    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets a value indicating whether the Update is flagged to be "
            "automatically selected by web sites such as Windows Update or "
            "Microsoft Update.")
    ]
    HRESULT AutoSelectOnWebSites(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets information on the ordered list of bundled updates of the "
            "Update.")
    ]
    HRESULT BundledUpdates(
                [out, retval] IUpdateCollection** retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Indicates whether the source media of the Update is potentially "
            "required for (un)installation.")
    ]
    HRESULT CanRequireSource(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020004),
        propget,
        helpstring("Gets the categories that the update belongs to.")
    ]
    HRESULT Categories(
                [out, retval] ICategoryCollection** retval);

    [
        id(0x60020005),
        propget,
        helpstring("Gets the date by which the Update must be installed.")
    ]
    HRESULT Deadline(
                [out, retval] VARIANT* retval);

    [
        id(0x60020006),
        propget,
        helpstring(
            "Indicates whether delta-compressed content is available on the "
            "server for the Update.")
    ]
    HRESULT DeltaCompressedContentAvailable(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020007),
        propget,
        helpstring(
            "Indicates whether to prefer delta-compressed content when "
            "downloading and/or (un)installing the Update, if such content is "
            "available.")
    ]
    HRESULT DeltaCompressedContentPreferred(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020008),
        propget,
        helpstring("Gets the localized description of the Update.")
    ]
    HRESULT Description(
                [out, retval] BSTR* retval);

    [
        id(0x60020009),
        propget,
        helpstring(
            "Indicates whether the end-user license agreement associated with "
            "the Update has been accepted for the target computer.")
    ]
    HRESULT EulaAccepted(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x6002000a),
        propget,
        helpstring(
            "Gets the full, localized text of the end-user license agreement "
            "associated with the Update.")
    ]
    HRESULT EulaText(
                [out, retval] BSTR* retval);

    [
        id(0x6002000b),
        propget,
        helpstring("Gets a value specifying the install handler of the Update.")
    ]
    HRESULT HandlerID(
                [out, retval] BSTR* retval);

    [
        id(0x6002000c),
        propget,
        helpstring("Gets the globally-unique identity of the Update.")
    ]
    HRESULT Identity(
                [out, retval] IUpdateIdentity** retval);

    [
        id(0x6002000d),
        propget,
        helpstring(
            "Gets information on the image associated with the Update.")
    ]
    HRESULT Image(
                [out, retval] IImageInformation** retval);

    [
        id(0x6002000e),
        propget,
        helpstring(
            "Gets the installation options of the Update.")
    ]
    HRESULT InstallationBehavior(
                [out, retval] IInstallationBehavior** retval);

    [
        id(0x6002000f),
        propget,
        helpstring(
            "Gets a value indicating whether the Update is a beta release.")
    ]
    HRESULT IsBeta(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020010),
        propget,
        helpstring(
            "Indicates whether all of the Update's content is cached on the "
            "target computer.")
    ]
    HRESULT IsDownloaded(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020011),
        propget,
        helpstring(
            "Indicates whether the Update has been hidden by the user for "
            "installation.")
    ]
    HRESULT IsHidden(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60020011),
        propput,
        helpstring(
            "(Un)marks the update as \"hidden\" on the target computer.")
    ]
    HRESULT IsHidden(
                [in] VARIANT_BOOL value);

    [
        id(0x60020012),
        propget,
        helpstring(
            "Indicates whether the Update was installed on the target "
            "computer when the search was performed.")
    ]
    HRESULT IsInstalled(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020013),
        propget,
        helpstring(
            "Gets a value indicating whether installation of the Update is "
            "mandatory.")
    ]
    HRESULT IsMandatory(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020014),
        propget,
        helpstring(
            "Indicates whether the caller can uninstall the Update, if "
            "installed, from the target computer.")
    ]
    HRESULT IsUninstallable(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020015),
        propget,
        helpstring("Gets the languages that the Update supports.")
    ]
    HRESULT Languages(
                [out, retval] IStringCollection** retval);

    [
        id(0x60020016),
        propget,
        helpstring("Gets the published date of the Update.")
    ]
    HRESULT LastDeploymentChangeTime(
                [out, retval] DATE* retval);

    [
        id(0x60020017),
        propget,
        helpstring("Gets the maximum download size of the Update.")
    ]
    HRESULT MaxDownloadSize(
                [out, retval] DECIMAL* retval);

    [
        id(0x60020018),
        propget,
        helpstring("Gets the minimum download size of the Update.")
    ]
    HRESULT MinDownloadSize(
                [out, retval] DECIMAL* retval);

    [
        id(0x60020019),
        propget,
        helpstring(
            "Gets language-specific strings specifying the hyperlinks to more "
            "info on the Update.")
    ]
    HRESULT MoreInfoUrls(
                [out, retval] IStringCollection** retval);

    [
        id(0x6002001a),
        propget,
        helpstring(
            "Gets the Microsoft Security Response Center severity rating of the"
            " Update.")
    ]
    HRESULT MsrcSeverity(
                [out, retval] BSTR* retval);

    [
        id(0x6002001b),
        propget,
        helpstring(
            "Gets the recommended CPU speed, in megahertz, for installing the "
            "Update.")
    ]
    HRESULT RecommendedCpuSpeed(
                [out, retval] LONG* retval);

    [
        id(0x6002001c),
        propget,
        helpstring(
            "Gets the recommended hard disk free space, in megabytes, for "
            "installing the Update.")
    ]
    HRESULT RecommendedHardDiskSpace(
                [out, retval] LONG* retval);

    [
        id(0x6002001d),
        propget,
        helpstring(
            "Gets the recommended physical memory size, in megabytes, for "
            "installing the Update.")
    ]
    HRESULT RecommendedMemory(
                [out, retval] LONG* retval);

    [
        id(0x6002001e),
        propget,
        helpstring("Gets the localized release notes of the Update.")
    ]
    HRESULT ReleaseNotes(
                [out, retval] BSTR* retval);

    [
        id(0x6002001f),
        propget,
        helpstring(
            "Gets the security bulletin IDs associated with the Update.")
    ]
    HRESULT SecurityBulletinIDs(
                [out, retval] IStringCollection** retval);

    [
        id(0x60020021),
        propget,
        helpstring(
            "Gets a collection of update IDs specifying the Updates that the "
            "Update supersedes.")
    ]
    HRESULT SupersededUpdateIDs(
                [out, retval] IStringCollection** retval);

    [
        id(0x60020022),
        propget,
        helpstring(
            "Gets the language-specific hyperlink to the support information on"
            " the Update.")
    ]
    HRESULT SupportUrl(
                [out, retval] BSTR* retval);

    [
        id(0x60020023),
        propget,
        helpstring("Gets the type of the Update.")
    ]
    HRESULT Type(
                [out, retval] UpdateType* retval);

    [
        id(0x60020024),
        propget,
        helpstring("Gets the uninstallation notes of the Update.")
    ]
    HRESULT UninstallationNotes(
                [out, retval] BSTR* retval);

    [
        id(0x60020025),
        propget,
        helpstring("Gets the uninstallation options of the Update.")
    ]
    HRESULT UninstallationBehavior(
                [out, retval] IInstallationBehavior** retval);

    [
        id(0x60020026),
        propget,
        helpstring("Gets the uninstallation steps of the Update.")
    ]
    HRESULT UninstallationSteps(
                [out, retval] IStringCollection** retval);

    [
        id(0x60020028),
        propget,
        helpstring(
            "Gets the knowledge base article IDs associated with the Update.")
    ]
    HRESULT KBArticleIDs(
                [out, retval] IStringCollection** retval);

//methods:
    [
        id(0x60020027),
        helpstring(
            "Accepts the end-user license agreement associated with the "
            "Update.")
    ]
    HRESULT AcceptEula();

//properties:
    [
        id(0x60020029),
        propget,
        helpstring("Indicates the action an Update is deployed for.")
    ]
    HRESULT DeploymentAction(
                [out, retval] DeploymentAction* retval);

//methods:
    [
        id(0x6002002a),
        helpstring("Copies the contents of the Update into a specified path.")
    ]
    HRESULT CopyFromCache(
                [in, ref] BSTR path,
                [in] VARIANT_BOOL toExtractCabFiles);

//properties:
    [
        id(0x6002002b),
        propget,
        helpstring("Indicates the suggested download priority of the Update.")
    ]
    HRESULT DownloadPriority(
                [out, retval] DownloadPriority* retval);

    [
        id(0x6002002c),
        propget,
        helpstring(
            "Gets file information on the immediate download contents of the "
            "Update.")
    ]
    HRESULT DownloadContents(
                [out, retval] IUpdateDownloadContentCollection** retval);
}

[
   helpstring("IWindowsDriverUpdate Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
   uuid(b383cd1a-5ce9-4504-9f63-764b1236f191),
    pointer_default(unique),
]
interface IWindowsDriverUpdate : IUpdate
{
//properties:
    [
        id(0x60030001),
        propget,
        helpstring(
            "Specifes the class of the WindowsDriverUpdate.")
    ]
    HRESULT DriverClass(
                [out, retval] BSTR* retval);

    [
        id(0x60030002),
        propget,
        helpstring(
            "Specifies the hardware ID or compatible ID that the "
            "WindowsDriverUpdate must match to be installable.")
    ]
    HRESULT DriverHardwareID(
                [out, retval] BSTR* retval);
    [
        id(0x60030003),
        propget,
        helpstring(
            "Specifies the language-invariant name of the manufacturer "
            "of the WindowsDriverUpdate.")
    ]
    HRESULT DriverManufacturer(
                [out, retval] BSTR* retval);

    [
        id(0x60030004),
        propget,
        helpstring(
            "Specifies the language-invariant model name of the device for "
            "which the WindowsDriverUpdate is intended.")
    ]
    HRESULT DriverModel(
                [out, retval] BSTR* retval);

    [
        id(0x60030005),
        propget,
        helpstring(
            "Specifies the language-invariant name of the provider of the"
            "WindowsDriverUpdate.")
    ]
    HRESULT DriverProvider(
                [out, retval] BSTR* retval);

    [
        id(0x60030006),
        propget,
        helpstring(
            "Specifies the driver version date of the WindowsDriverUpdate.")
    ]
    HRESULT DriverVerDate(
                [out, retval] DATE* retval);

    [
        id(0x60030007),
        propget,
        helpstring(
            "Returns the problem number of the matching device for the "
            "WindowsDriverUpdate.")
    ]
    HRESULT DeviceProblemNumber(
                [out, retval] LONG* retval);

    [
        id(0x60030008),
        propget,
        helpstring(
            "Returns the status of the matching device for the "
            "WindowsDriverUpdate.")
    ]
    HRESULT DeviceStatus(
                [out, retval] LONG* retval);
}

[
    helpstring("IUpdate2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(84617776-dbeb-4881-b410-aa294227c3fd),
    pointer_default(unique),
]
interface IUpdate2 : IUpdate
{
// properties

    [
        id(0x60040001),
        propget,
        helpstring("Gets the Installation state of the update.")
    ]
    HRESULT InstallState(
                [out, retval] InstalledState* retval);

// methods

    [
        id(0x60040002),
        helpstring("Copies externally provided update binaries to install cache.")
    ]
    HRESULT CopyToCache(
                [in] IStringCollection* pFiles,
                [in] VARIANT_BOOL ignoreDigestMismatch );
}

[
    helpstring("IWindowsDriverUpdate2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(84617777-dbeb-4881-b410-aa294227c3fe),
    pointer_default(unique),
]
interface IWindowsDriverUpdate2 : IWindowsDriverUpdate
{
// properties

    [
        id(0x60050001),
        propget,
        helpstring("Gets the Installation state of the update.")
    ]
    HRESULT InstallState(
                [out, retval] InstalledState* retval);

// methods

    [
        id(0x60050002),
        helpstring("Copies externally provided update binaries to install cache.")
    ]
    HRESULT CopyToCache(
                [in] IStringCollection* pFiles,
                [in] VARIANT_BOOL ignoreDigestMismatch );
}

[
    helpstring("IUpdateCollection Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(07f7438c-7709-4ca5-b518-91279288134e),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateCollection : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets an element in the collection.")
    ]
    HRESULT Item(
                [in] LONG index,
                [out, retval] IUpdate** retval);
    [
        id(DISPID_VALUE),
        propput,
        helpstring("Sets an element in the collection.")
    ]
    HRESULT Item(
                [in] LONG index,
                [in] IUpdate* value);

    [
        id(DISPID_NEWENUM),
        propget,
        helpstring(
            "Gets an IEnumVARIANT interface on an object that can be used to "
            "enumerate the collection.")
    ]
    HRESULT _NewEnum(
                [out, retval] IUnknown** retval);

    [
        id(0x60020001),
        propget,
        helpstring("Gets the number of elements contained in the collection.")
    ]
    HRESULT Count(
                [out, retval] LONG* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a boolean value indicating whether the collection is "
            "read-only.")
    ]
    HRESULT ReadOnly(
                [out, retval] VARIANT_BOOL* retval);

//methods:
    [
        id(0x60020003),
        helpstring("Adds an item to the collection.")
    ]
    HRESULT Add(
                [in] IUpdate* value,
                [out, retval] LONG* retval);

    [
        id(0x60020004),
        helpstring("Removes all elements from the collection.")
    ]
    HRESULT Clear( );

    [
        id(0x60020005),
        helpstring("Creates a shallow read-writable copy of the collection.")
    ]
    HRESULT Copy(
                [out, retval] IUpdateCollection** retval);

    [
        id(0x60020006),
        helpstring(
            "Inserts an item to the collection at the specified position.")
    ]
    HRESULT Insert(
                [in] LONG index,
                [in] IUpdate* value);

    [
        id(0x60020007),
        helpstring(
            "Removes the item at the specified index from the collection.")
    ]
    HRESULT RemoveAt(
                [in] LONG index);
}

[
    helpstring("IUpdateException Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(a376dd5e-09d4-427f-af7c-fed5b6e1c1d6),
    pointer_default(unique),
]
interface IUpdateException : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets a message that describes the current exception.")
    ]
    HRESULT Message(
                [out, retval] BSTR* retval);

    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets HRESULT, a coded numerical value that is assigned to a "
            "specific exception.")
    ]
    HRESULT HResult(
                [out, retval] LONG* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a numerical value that indicates the context of the current "
            "exception.")
    ]
    HRESULT Context(
                [out, retval] UpdateExceptionContext* retval);
}

[
    helpstring("IInvalidProductLicenseException Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(a37d00f5-7bb0-4953-b414-f9e98326f2e8),
    pointer_default(unique),
]
interface IInvalidProductLicenseException : IUpdateException
{
//properties:
    [
        id(0x60030001),
        propget,
        helpstring("Gets the language-invariant name of the product")
    ]
    HRESULT Product(
                [out, retval] BSTR* retval);
}

[
    helpstring("IUpdateExceptionCollection Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(503626a3-8e14-4729-9355-0fe664bd2321),
    pointer_default(unique),
]
interface IUpdateExceptionCollection : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets an element in the collection.")
    ]
    HRESULT Item(
                [in] LONG index,
                [out, retval] IUpdateException** retval);

    [
        id(DISPID_NEWENUM),
        propget,
        helpstring(
            "Gets an IEnumVARIANT interface on an object that can be used to "
            "enumerate the collection.")
    ]
    HRESULT _NewEnum(
                [out, retval] IUnknown** retval);

    [
        id(0x60020001),
        propget,
        helpstring("Gets the number of elements contained in the collection.")
    ]
    HRESULT Count(
                [out, retval] LONG* retval);
}

[
    helpstring("ISearchResult Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(d40cff62-e08c-4498-941a-01e25f0fd33c),
    pointer_default(unique),
]
interface ISearchResult : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets an OperationResultCode enumeration value specifying the "
            "overall result of the search.")
    ]
    HRESULT ResultCode(
                [out, retval] OperationResultCode* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets the root categories currently available on the target "
            " computer.")
    ]
    HRESULT RootCategories(
                [out, retval] ICategoryCollection** retval);

    [
        id(0x60020003),
        propget,
        helpstring("Gets a collection of Updates resulted from the search.")
    ]
    HRESULT Updates(
                [out, retval] IUpdateCollection** retval);

    [
        id(0x60020004),
        propget,
        helpstring("Gets a collection of warnings resulted from the search.")
    ]
    HRESULT Warnings(
                [out, retval] IUpdateExceptionCollection** retval);
}

[
    helpstring("ISearchJob Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(7366ea16-7a1a-4ea2-b042-973d3e9cd99b),
    pointer_default(unique),
]
interface ISearchJob : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets the caller-specified state object passed to the "
            "UpdateSearcher.BeginSearch method.")
    ]
    HRESULT AsyncState(
                [out, retval] VARIANT* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a value indicating whether the call has been completely "
            "processed.")
    ]
    HRESULT IsCompleted(
                [out, retval] VARIANT_BOOL* retval);

//methods:
    [
        id(0x60020003),
        helpstring(
            "Waits for asynchronous operation to complete and releases all "
            "callbacks, if any.")
    ]
    HRESULT CleanUp();

    [
        id(0x60020004),
        helpstring("Requests to abort the asynchronous search.")
    ]
    HRESULT RequestAbort();
}

[
    helpstring("ISearchCompletedCallbackArgs Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(a700a634-2850-4c47-938a-9e4b6e5af9a6),
    pointer_default(unique),
]
interface ISearchCompletedCallbackArgs : IDispatch
{
}

[
    helpstring("ISearchCompletedCallback Interface"),
    object,
    oleautomation,
    nonextensible,
    uuid(88aee058-d4b0-4725-a2f1-814a67ae964c),
    pointer_default(unique)
]
interface ISearchCompletedCallback : IUnknown
{
//methods:
    [
        id(0x60010001),
        helpstring(
            "Handles the notification about the completion of an asynchronous "
            "search initiated by calling UpdateSearcher.BeginSearch.")
    ]
    HRESULT Invoke(
                [in] ISearchJob* searchJob,
                [in] ISearchCompletedCallbackArgs* callbackArgs);
}

[
    helpstring("IUpdateHistoryEntry Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(be56a644-af0e-4e0e-a311-c1d8e695cbff),
    pointer_default(unique),
]
interface IUpdateHistoryEntry : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets an Operation enumeration value specifying the "
            "the operation on the update.")
    ]
    HRESULT Operation( 
                [out, retval] UpdateOperation* retval );

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets an OperationResultCode enumeration value specifying the "
            "result of the operation on the update.")
    ]
    HRESULT ResultCode( 
                [out, retval] OperationResultCode* retval );

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets the HRESULT value returned from the operation on the update.")
    ]
    HRESULT HResult( 
                [out, retval] LONG* retval );

    [
        id(0x60020004),
        propget,
        helpstring("Gets the date and time when the update was applied.")
    ]
    HRESULT Date(
                [out, retval] DATE* retval);

    [
        id(0x60020005),
        propget,
        helpstring(
            "Gets the globally-unique identity of the update.")
    ]
    HRESULT UpdateIdentity(
                [out, retval] IUpdateIdentity** retval);

    [
        id(0x60020006),
        propget,
        helpstring("Gets the title of the update.")
    ]
    HRESULT Title(
                [out, retval] BSTR* retval);

    [
        id(0x60020007),
        propget,
        helpstring("Gets the description of the update.")
    ]
    HRESULT Description(
                [out, retval] BSTR* retval);

    [
        id(0x60020008),
        propget,
        helpstring(
            "Gets the unmapped result code returned from the operation on the "
            "update.")
    ]
    HRESULT UnmappedResultCode(
                [out, retval] LONG* retval);

    [
        id(0x60020009),
        propget,
        helpstring(
            "Gets the identifier of the client application that processed the "
            "update.")
    ]
    HRESULT ClientApplicationID(
                [out, retval] BSTR* retval);

    [
        id(0x6002000a),
        propget,
        helpstring("Gets the kind of service where the update came from.")
    ]
    HRESULT ServerSelection(
                [out, retval] ServerSelection* retval );

    [
        id(0x6002000b),
        propget,
        helpstring(
            "Gets the identifier of the service where the update came from.")
    ]
    HRESULT ServiceID(
                [out, retval] BSTR* retval );
    
    [
        id(0x6002000c),
        propget,
        helpstring("Gets steps to uninstall update.")
    ]
    HRESULT UninstallationSteps(
                [out, retval] IStringCollection** retval);

    [
        id(0x6002000d),
        propget,
        helpstring("Gets uninstallation notes.")
    ]
    HRESULT UninstallationNotes(
                [out, retval] BSTR* retval);

    [
        id(0x6002000e),
        propget,
        helpstring("Gets support URL.")
    ]
    HRESULT SupportUrl(
                [out, retval] BSTR* retval);
}

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

    [
        id(DISPID_NEWENUM),
        propget,
        helpstring(
            "Gets an IEnumVARIANT interface on an object that can be used to "
            "enumerate the collection.")
    ]
    HRESULT _NewEnum(
                [out, retval] IUnknown** retval);

    [
        id(0x60020001),
        propget,
        helpstring("Gets the number of elements contained in the collection.")
    ]
    HRESULT Count(
                [out, retval] LONG* retval);
}

[
    helpstring("IUpdateSearcher Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(8f45abf1-f9ae-4b95-a933-f0f66e5056ea),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateSearcher : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Indicates whether future calls to BeginSearch and Search can "
            "automatically upgrade the MSUS client as a side-effect.")
    ]
    HRESULT CanAutomaticallyUpgradeService(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60020001),
        propput,
        helpstring(
            "Specifies whether future calls to BeginSearch and Search can "
            "automatically upgrade the MSUS client as a side-effect.")
    ]
    HRESULT CanAutomaticallyUpgradeService(
                [in] VARIANT_BOOL value);

    [
        id(0x60020003),
        propget,
        helpstring("Gets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [out, retval] BSTR* retval);
    [
        id(0x60020003),
        propput,
        helpstring("Sets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [in] BSTR value);

    [
        id(0x60020004),
        propget,
        helpstring(
            "Indicates whether to include, in the search results, updates that "
            "are superseded by any other updates in the results.")
    ]
    HRESULT IncludePotentiallySupersededUpdates(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60020004),
        propput,
        helpstring(
            "Specifies whether to include, in the search results, updates that "
            "are superseded by any other updates in the results.")
    ]
    HRESULT IncludePotentiallySupersededUpdates(
                [in] VARIANT_BOOL value);

    [
        id(0x60020007),
        propget,
        helpstring("Gets the server specified.")
    ]
    HRESULT ServerSelection(
                [out, retval] ServerSelection* retval);
    [
        id(0x60020007),
        propput,
        helpstring("Specifies which server to search against.")
    ]
    HRESULT ServerSelection(
                [in] ServerSelection value);

//methods:
    [
        id(0x60020008),
        helpstring(
            "Starts an asynchronous search using the currently configured "
            "search options.")
    ]
    HRESULT BeginSearch(
                [in] BSTR criteria,
                [in] IUnknown* onCompleted,
                [in] VARIANT state,
                [out, retval] ISearchJob** retval);

    [
        id(0x60020009),
        helpstring("Completes an asynchronous search.")
    ]
    HRESULT EndSearch(
                [in] ISearchJob* searchJob,
                [out, retval] ISearchResult** retval);

    [
        id(0x6002000a),
        helpstring(
            "Convert string into one that can be used as a literal value in a "
            "search criteria string.")
    ]
    HRESULT EscapeString(
                [in] BSTR unescaped,
                [out, retval] BSTR* retval);

    [
        id(0x6002000b),
        helpstring(
            "Synchronously queries the target computer for the history of "
            "update events.")
    ]
    HRESULT QueryHistory(
                [in] LONG startIndex,
                [in] LONG count,
                [out, retval] IUpdateHistoryEntryCollection** retval);

    [
        id(0x6002000c),
        helpstring(
            "Perform a synchronous search using the currently configured "
            "search options.")
    ]
    HRESULT Search(
                [in] BSTR criteria,
                [out, retval] ISearchResult** retval);

//properties:
    [
        id(0x6002000d),
        propget,
        helpstring(
            "Indicates whether the UpdateSearcher goes online when searching "
            "for updates.")
    ]
    HRESULT Online(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x6002000d),
        propput,
        helpstring(
            "Specifies whether the UpdateSearcher goes online when searching "
            "for updates.")
    ]
    HRESULT Online(
                [in] VARIANT_BOOL value);

    [
        id(0x6002000e),
        helpstring(
            "Get number of update events on the target computer.")
    ]
    HRESULT GetTotalHistoryCount(
                [out, retval] LONG* retval);

    [
        id(0x6002000f),
        propget,
        helpstring("Gets the Non-Windows Update Service ID specified.")
    ]
    HRESULT ServiceID(
                [out, retval] BSTR* retval);
    
    [
        id(0x6002000f),
        propput,
        helpstring("Specifies the Non-Windows Update Service ID to search against.")
    ]
    HRESULT ServiceID(
                [in] BSTR value);
};

[
    helpstring("IUpdateDownloadResult Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(bf99af76-b575-42ad-8aa4-33cbb5477af1),
    pointer_default(unique),
]
interface IUpdateDownloadResult : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets the HRESULT value returned from the operation on the update.")
    ]
    HRESULT HResult(
                [out, retval] LONG* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets an OperationResultCode enumeration value specifying the "
            "result of the operation on the update.")
    ]
    HRESULT ResultCode(
                [out, retval] OperationResultCode* retval);
}

[
    helpstring("IDownloadResult Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(daa4fdd0-4727-4dbe-a1e7-745dca317144),
    pointer_default(unique),
]
interface IDownloadResult : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets the HRESULT value returned from the download.")
    ]
    HRESULT HResult(
                [out, retval] LONG* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets an OperationResultCode enumeration value specifying the "
            "overall result of the download.")
    ]
    HRESULT ResultCode(
                [out, retval] OperationResultCode* retval);

//methods:
    [
        id(0x60020003),
        helpstring(
            "Gets the result of the download on a specified update.")
    ]
    HRESULT GetUpdateResult(
                [in] LONG updateIndex,
                [out, retval] IUpdateDownloadResult** retval);
}

[
    helpstring("IDownloadProgress Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(d31a5bac-f719-4178-9dbb-5e2cb47fd18a),
    pointer_default(unique),
]
interface IDownloadProgress : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets a value specifying how much data has been transferred for "
            "the content file(s) of the update being downloaded, in bytes.")
    ]
    HRESULT CurrentUpdateBytesDownloaded(
                [out, retval] DECIMAL* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a value approximating how much data should be transferred "
            "for the content file(s) of the update being downloaded, in bytes.")
    ]
    HRESULT CurrentUpdateBytesToDownload(
                [out, retval] DECIMAL* retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets a zero-based index value into the updates specified in the "
            "download for the one which content file(s) are being downloaded.")
    ]
    HRESULT CurrentUpdateIndex(
                [out, retval] LONG* retval);

    [
        id(0x60020004),
        propget,
        helpstring(
            "Gets a value estimating how far the download has progressed, in "
            "percents.")
    ]
    HRESULT PercentComplete(
                [out, retval] LONG* retval);

    [
        id(0x60020005),
        propget,
        helpstring(
            "Gets a value specifying how much overall data has been "
            "transferred by the download, in bytes.")
    ]
    HRESULT TotalBytesDownloaded(
                [out, retval] DECIMAL* retval);

    [
        id(0x60020006),
        propget,
        helpstring(
            "Gets a value approximating how much data should be transferred "
            "over all updates by the download, in bytes.")
    ]
    HRESULT TotalBytesToDownload(
                [out, retval] DECIMAL* retval);

//methods:
    [
        id(0x60020007),
        helpstring(
            "Gets the result of the download on a specified update.")
    ]
    HRESULT GetUpdateResult(
                [in] LONG updateIndex,
                [out, retval] IUpdateDownloadResult** retval);


//additional properties:
    [
        id(0x60020008),
        propget,
        helpstring(
            "Gets a DownloadPhase enumeration value specifying the "
            "current phase of the download in progress.")
    ]
    HRESULT CurrentUpdateDownloadPhase(
                [out, retval] DownloadPhase* retval);

    [
        id(0x60020009),
        propget,
        helpstring(
            "Gets a value estimating how far the download of the current"
            " update has progressed, in percents.")
    ]
    HRESULT CurrentUpdatePercentComplete(
                [out, retval] LONG* retval);
}

[
    helpstring("IDownloadJob Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(c574de85-7358-43f6-aae8-8697e62d8ba7),
    pointer_default(unique),
]
interface IDownloadJob : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets the caller-specified state object passed to the "
            "UpdateDownloader.BeginDownload method.")
    ]
    HRESULT AsyncState(
                [out, retval] VARIANT* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a value indicating whether the call has been completely "
            "processed.")
    ]
    HRESULT IsCompleted(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets a read-only collection of the updates specified in the "
            "download.")
    ]
    HRESULT Updates(
                [out, retval] IUpdateCollection** retval);

//methods:
    [
        id(0x60020004),
        helpstring(
            "Waits for asynchronous operation to complete and releases all "
            "callbacks, if any.")
    ]
    HRESULT CleanUp();

    [
        id(0x60020005),
        helpstring("Gets the current progress of the download.")
    ]
    HRESULT GetProgress(
                [out, retval] IDownloadProgress** retval);

    [
        id(0x60020006),
        helpstring("Requests to abort the asynchronous download.")
    ]
    HRESULT RequestAbort();
}

[
    helpstring("IDownloadCompletedCallbackArgs Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(fa565b23-498c-47a0-979d-e7d5b1813360),
    pointer_default(unique),
]
interface IDownloadCompletedCallbackArgs : IDispatch
{
}

[
    helpstring("IDownloadCompletedCallback Interface"),
    object,
    oleautomation,
    nonextensible,
    uuid(77254866-9f5b-4c8e-b9e2-c77a8530d64b),
    pointer_default(unique)
]
interface IDownloadCompletedCallback : IUnknown
{
//methods:
    [
        id(0x60010001),
        helpstring(
            "Handles the notification about the completion of an asynchronous "
            "download initiated by calling UpdateDownloader.BeginDownload.")
    ]
    HRESULT Invoke(
                [in] IDownloadJob* downloadJob,
                [in] IDownloadCompletedCallbackArgs* callbackArgs);
}

[
    helpstring("IDownloadProgressChangedCallbackArgs Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(324ff2c6-4981-4b04-9412-57481745ab24),
    pointer_default(unique),
]
interface IDownloadProgressChangedCallbackArgs : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets the progress of the asynchronous download at the time the "
            "callback was made.")
    ]
    HRESULT Progress(
                [out, retval] IDownloadProgress** retval);
}

[
    helpstring("IDownloadProgressChangedCallback Interface"),
    object,
    oleautomation,
    nonextensible,
    uuid(8c3f1cdd-6173-4591-aebd-a56a53ca77c1),
    pointer_default(unique)
]
interface IDownloadProgressChangedCallback : IUnknown
{
//methods:
    [
        id(0x60010001),
        helpstring(
            "Handles the notification about the change of progress of an "
            "asynchronous download initiated by calling "
            "UpdateDownloader.BeginDownload.")
    ]
    HRESULT Invoke(
                [in] IDownloadJob* downloadJob,
                [in] IDownloadProgressChangedCallbackArgs* callbackArgs);
}

[
    helpstring("IUpdateDownloader Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(68f1c6f9-7ecc-4666-a464-247fe12496c3),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateDownloader : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [out, retval] BSTR* retval);
    [
        id(0x60020001),
        propput,
        helpstring("Sets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [in] BSTR value);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Indicates whether to forcefully download the specified updates.")
    ]
    HRESULT IsForced(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60020002),
        propput,
        helpstring(
            "Specifies whether to forcefully download the specified updates.")
    ]
    HRESULT IsForced(
                [in] VARIANT_BOOL value);

    [
        id(0x60020003),
        propget,
        helpstring("Gets the desired priority level of the download.")
    ]
    HRESULT Priority(
                [out, retval] DownloadPriority* retval);
    [
        id(0x60020003),
        propput,
        helpstring("Specifies the desired priority level of the download.")
    ]
    HRESULT Priority(
                [in] DownloadPriority value);

    [
        id(0x60020004),
        propget,
        helpstring(
            "Gets the updates to download.")
    ]
    HRESULT Updates(
                [out, retval] IUpdateCollection** retval);
    [
        id(0x60020004),
        propput,
        helpstring("Specifies the updates to download.")
    ]
    HRESULT Updates(
                [in] IUpdateCollection* value);

//methods
    [
        id(0x60020005),
        helpstring(
            "Begins an asynchronous operation to download the content file(s) "
            "associated with the updates.")
    ]
    HRESULT BeginDownload(
                [in] IUnknown* onProgressChanged,
                [in] IUnknown* onCompleted,
                [in] VARIANT state,
                [out, retval] IDownloadJob** retval);

    [
        id(0x60020006),
        helpstring(
            "Synchronously downloads the content file(s) of the update(s) "
            "to the local cache on the target computer.")
    ]
    HRESULT Download(
                [out, retval] IDownloadResult** retval);

    [
        id(0x60020007),
        helpstring("Completes an asynchronous download.")
    ]
    HRESULT EndDownload(
                [in] IDownloadJob* value,
                [out, retval] IDownloadResult** retval);
}

[
    helpstring("IUpdateInstallationResult Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(d940f0f8-3cbb-4fd0-993f-471e7f2328ad),
    pointer_default(unique),
]
interface IUpdateInstallationResult : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets the HRESULT value from the operation on the update.")
    ]
    HRESULT HResult(
                [out, retval] LONG* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Indicates whether system reboot is required on the target "
            "computer to complete the installation on the Update.")
    ]
    HRESULT RebootRequired(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets an OperationResultCode enumeration value specifying the "
            "result of the operation on the update.")
    ]
    HRESULT ResultCode(
                [out, retval] OperationResultCode* retval);
}

[
    helpstring("IInstallationResult Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(a43c56d6-7451-48d4-af96-b6cd2d0d9b7a),
    pointer_default(unique),
]
interface IInstallationResult : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets the HRESULT returned from the (un)installation.")
    ]
    HRESULT HResult(
                [out, retval] LONG* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Indicates whether a system reboot is required on the target "
            "computer to complete the (un)installation.")
    ]
    HRESULT RebootRequired(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets an OperationResultCode enumeration value specifying the "
            "overall result of the (un)installation.")
    ]
    HRESULT ResultCode(
                [out, retval] OperationResultCode* retval);

//methods:
    [
        id(0x60020004),
        helpstring(
            "Gets the result of the (un)installation on a specified update.")
    ]
    HRESULT GetUpdateResult(
                [in] LONG updateIndex,
                [out, retval] IUpdateInstallationResult** retval);
}

[
    helpstring("IInstallationProgress Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(345c8244-43a3-4e32-a368-65f073b76f36),
    pointer_default(unique),
]
interface IInstallationProgress : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets a zero-based index value into the updates specified in the "
            "(un)installation for the one which content file(s) are being "
            "(un)installed.")
    ]
    HRESULT CurrentUpdateIndex(
                [out, retval] LONG* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a value specifying how much the (un)installation has "
            "completed upon the update being (un)installed, in percents.")
    ]
    HRESULT CurrentUpdatePercentComplete(
                [out, retval] LONG* retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets a value specifying how much overall the (un)installation has "
            "completed, in percents.")
    ]
    HRESULT PercentComplete(
                [out, retval] LONG* retval);

//methods:
    [
        id(0x60020004),
        helpstring(
            "Gets the result of the (un)installation on a specified update.")
    ]
    HRESULT GetUpdateResult(
                [in] LONG updateIndex,
                [out, retval] IUpdateInstallationResult** retval);
}

[
    helpstring("IInstallationJob Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(5c209f0b-bad5-432a-9556-4699bed2638a),
    pointer_default(unique),
]
interface IInstallationJob : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets the caller-specified state object passed to the "
            "corresponding UpdateInstaller.BeginInstall or "
            "UpdateInstaller.BeginUninstall methods.")
    ]
    HRESULT AsyncState(
                [out, retval] VARIANT* retval);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a value indicating whether the call has been completely "
            "processed.")
    ]
    HRESULT IsCompleted(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets a read-only collection of the updates specified in the "
            "(un)installation.")
    ]
    HRESULT Updates(
                [out, retval] IUpdateCollection** retval);

//methods:
    [
        id(0x60020004),
        helpstring(
            "Waits for asynchronous operation to complete and releases all "
            "callbacks, if any.")
    ]
    HRESULT CleanUp();

    [
        id(0x60020005),
        helpstring("Gets the current progress of the (un)installation.")
    ]
    HRESULT GetProgress(
                [out, retval] IInstallationProgress** retval);

    [
        id(0x60020006),
        helpstring("Requests to abort the asynchronous (un)installation.")
    ]
    HRESULT RequestAbort();
}

[
    helpstring("IInstallationCompletedCallbackArgs Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(250e2106-8efb-4705-9653-ef13c581b6a1),
    pointer_default(unique),
]
interface IInstallationCompletedCallbackArgs : IDispatch
{
}

[
    helpstring("IInstallationCompletedCallback Interface"),
    object,
    oleautomation,
    nonextensible,
    uuid(45f4f6f3-d602-4f98-9a8a-3efa152ad2d3),
    pointer_default(unique)
]
interface IInstallationCompletedCallback : IUnknown
{
//methods:
    [
        id(0x60010001),
        helpstring(
            "Handles the notification about the completion of an asynchronous "
            "(un)installation initiated by the corresponding "
            "UpdateInstaller.BeginInstall or UpdateInstaller.BeginUninstall "
            "call.")
    ]
    HRESULT Invoke(
                [in] IInstallationJob* installationJob,
                [in] IInstallationCompletedCallbackArgs* callbackArgs);
}

[
    helpstring("IInstallationProgressChangedCallbackArgs Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(e4f14e1e-689d-4218-a0b9-bc189c484a01),
    pointer_default(unique),
]
interface IInstallationProgressChangedCallbackArgs : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring(
            "Gets the progress of the asynchronous (un)installation at the "
            "time the callback was made.")
    ]
    HRESULT Progress(
                [out, retval] IInstallationProgress** retval);

//methods:
}

[
    helpstring("IInstallationProgressChangedCallback Interface"),
    object,
    oleautomation,
    nonextensible,
    uuid(e01402d5-f8da-43ba-a012-38894bd048f1),
    pointer_default(unique)
]
interface IInstallationProgressChangedCallback : IUnknown
{
//methods:
    [
        id(0x60010001),
        helpstring(
            "Handles the notification about the change of progress of an "
            "asynchronous (un)installation initiated by the corresponding "
            "UpdateInstaller.BeginInstall or Update.BeginUninstall call.")
    ]
    HRESULT Invoke(
                [in] IInstallationJob* installationJob,
                [in] IInstallationProgressChangedCallbackArgs* callbackArgs);
}

[
    helpstring("IUpdateInstaller Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(7b929c68-ccdc-4226-96b1-8724600b54c2),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateInstaller : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [out, retval] BSTR* retval);
    [
        id(0x60020001),
        propput,
        helpstring("Sets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [in] BSTR value);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Indicates whether to forcefully (un)install the specified updates.")
    ]
    HRESULT IsForced(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60020002),
        propput,
        helpstring(
            "Specifies whether to forcefully (un)install the specified updates.")
    ]
    HRESULT IsForced(
                [in] VARIANT_BOOL value);

    [
        id(0x60020003),
        propget,
        restricted, // Script caller can't read the type anyways
        helpstring(
            "Gets the window on top of which the wizard dialog box should "
            "be shown.")
    ]
    HRESULT ParentHwnd(
                [out, retval] HWND* retval);
    [
        id(0x60020003),
        propput,
        restricted, // Script caller can't read the type anyways
        helpstring(
            "Sets the window on top of which the wizard dialog box should "
            "be shown.")
    ]
    HRESULT ParentHwnd(
                [in, unique] HWND value);

    [
        id(0x60020004),
        propput,
        helpstring(
            "Sets the web browser window on top of which the wizard dialog box "
            "should be shown.")
    ]
    HRESULT ParentWindow(
                [in, unique] IUnknown* value);
    [
        id(0x60020004),
        propget,
        helpstring(
            "Gets the web browser window on top of which the wizard dialog box "
            "should be shown.")
    ]
    HRESULT ParentWindow(
                [out, retval] IUnknown** retval);

    [
        id(0x60020005),
        propget,
        helpstring(
            "Gets the updates to (un)install.")
    ]
    HRESULT Updates(
                [out, retval] IUpdateCollection** retval);
    [
        id(0x60020005),
        propput,
        helpstring("Specifies the updates to (un)install.")
    ]
    HRESULT Updates(
                [in] IUpdateCollection* value);

//methods
    [
        id(0x60020006),
        helpstring(
            "Begins an asynchronous operation to install the updates.")
    ]
    HRESULT BeginInstall(
                [in] IUnknown* onProgressChanged,
                [in] IUnknown* onCompleted,
                [in] VARIANT state,
                [out, retval] IInstallationJob** retval);

    [
        id(0x60020007),
        helpstring(
            "Begins an asynchronous operation to uninstall the updates.")
    ]
    HRESULT BeginUninstall(
                [in] IUnknown* onProgressChanged,
                [in] IUnknown* onCompleted,
                [in] VARIANT state,
                [out, retval] IInstallationJob** retval);

    [
        id(0x60020008),
        helpstring("Completes an asynchronous installation.")
    ]
    HRESULT EndInstall(
                [in] IInstallationJob* value,
                [out, retval] IInstallationResult** retval);

    [
        id(0x60020009),
        helpstring("Completes an asynchronous uninstallation.")
    ]
    HRESULT EndUninstall(
                [in] IInstallationJob* value,
                [out, retval] IInstallationResult** retval);

    [
        id(0x6002000a),
        helpstring("Synchronously installs updates onto the target computer.")
    ]
    HRESULT Install(
                [out, retval] IInstallationResult** retval);

    [
        id(0x6002000b),
        helpstring(
            "Interactively guides the local user to go through the steps to "
            "install updates.")
    ]
    HRESULT RunWizard(
                [in, defaultvalue("")] BSTR dialogTitle,
                [out, retval] IInstallationResult** retval);

    [
        id(0x6002000c),
        propget,
        helpstring(
            "Indicates whether (un)installation can be performed on the target "
            "computer at this moment.")
    ]
    HRESULT IsBusy(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x6002000d),
        helpstring(
            "Synchronously uninstalls the updates from the target computer.")
    ]
    HRESULT Uninstall(
                [out, retval] IInstallationResult** retval);

//properties:
    [
        id(0x6002000e),
        propget,
        helpstring(
            "Indicates whether to show source prompts to the user, when "
            "needed, while installing updates.")
    ]
    HRESULT AllowSourcePrompts(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x6002000e),
        propput,
        helpstring(
            "Specifies whether to show source prompts to the user, when "
            "needed, while installing updates.")
    ]
    HRESULT AllowSourcePrompts(
                [in] VARIANT_BOOL value);

    [
        id(0x6002000f),
        propget,
        helpstring(
            "Gets a value indicating whether a system reboot is required "
            "before (un)installing updates.")
    ]
    HRESULT RebootRequiredBeforeInstallation(
                [out, retval] VARIANT_BOOL* retval);
}

[
    helpstring("IUpdateInstaller2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(f7c72712-c7f3-4aad-bc6a-6a0e9696a50e),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateInstaller2 : IUpdateInstaller
{
// properties
    [
        id(0x60030001),
        propget,
        helpstring("Returns whether no UI interaction will be forced.")
    ]
    HRESULT ForceQuiet( [out, retval] VARIANT_BOOL* retval );

    [
        id(0x60030001),
        propput,
        helpstring("Specifies that the installer will be forced to do an "
                   "install without any user interaction.")
    ]
    HRESULT ForceQuiet( [in] VARIANT_BOOL value );

    [
        id(0x60030002),
        propget,
        helpstring("Returns whether digest mismatches will be ignored.")
    ]
    HRESULT IgnoreDigests( [out, retval] VARIANT_BOOL* retval );

    [
        id(0x60030002),
        propput,
        helpstring("Specifies that the installer should ignore any "
                   "digest mismatches (no hash checking).")
    ]
    HRESULT IgnoreDigests( [in] VARIANT_BOOL value );
}

[
    helpstring("IUpdateSession Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(816858a4-260d-4260-933a-2585f1abc76b),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateSession : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [out, retval] BSTR* retval);
    [
        id(0x60020001),
        propput,
        helpstring("Sets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [in] BSTR value);

    [
        id(0x60020002),
        propget,
        helpstring(
            "Gets a boolean value indicating whether the UpdateSession object "
            "is read-only.")
    ]
    HRESULT ReadOnly(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020003),
        propget,
        helpstring(
            "Gets the proxy settings required to reaching the server for "
            "future operations in the UpdateSession.")
    ]
    HRESULT WebProxy(
                [out, retval] IWebProxy** retval);
    [
        id(0x60020003),
        propput,
        helpstring(
            "Sets the proxy settings required to reach the server for "
            "future operations in the UpdateSession.")
    ]
    HRESULT WebProxy(
                [in, unique] IWebProxy* value);

//methods:
    [
        id(0x60020004),
        helpstring("Creates an UpdateSearcher within the UpdateSession.")
    ]
    HRESULT CreateUpdateSearcher(
                [out, retval] IUpdateSearcher** retval);

    [
        id(0x60020005),
        helpstring("Creates an UpdateDownloader within the UpdateSession.")
    ]
    HRESULT CreateUpdateDownloader(
                [out, retval] IUpdateDownloader** retval);

    [
        id(0x60020006),
        helpstring("Creates an UpdateInstaller within the UpdateSession.")
    ]
    HRESULT CreateUpdateInstaller(
                [out, retval] IUpdateInstaller** retval);
}

[
    helpstring("IUpdateSession2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(91caf7b0-eb23-49ed-9937-c52d817f46f7),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateSession2 : IUpdateSession
{
//properties:
    [
        id(0x60030001),
        propget,
        helpstring("Gets the locale being used for update results.")
    ]
    HRESULT UserLocale(
                [out, retval] LCID* retval);

    [
        id(0x60030001),
        propput,
        helpstring("Sets the locale to be used for update results.")
    ]
    HRESULT UserLocale(
                [in] LCID lcid);
}


[
    helpstring("IUpdateService Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(8c3f0d06-1eb9-4f01-8c2e-1adc74627829),
    pointer_default(unique)
]
interface IUpdateService : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Name of the Service.")
    ]
    HRESULT Name(
                [out, retval] BSTR* retval);

    [
        id(0x60020001),
        propget,
        helpstring("SHA1 hash of the certificate used to sign contents.")
    ]
    HRESULT ContentValidationCert(
                [out, retval] VARIANT* retval);

    [
        id(0x60020002),
        propget,
        helpstring("Gets the date on which the Authorization Cab expires.")
    ]
    HRESULT ExpirationDate(
                [out, retval] DATE* retval);

    [
        id(0x60020003),
        propget,
        helpstring("Indicates whether the Service is a managed service.")
    ]
    HRESULT IsManaged(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60020004),
        propget,
        helpstring("Indicates whether the Service is registered with Automatic Updates.")
    ]
    HRESULT IsRegisteredWithAU(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60020005),
        propget,
        helpstring("Gets the date on which the Authorization Cab was issued.")
    ]
    HRESULT IssueDate(
                [out, retval] DATE* retval);

    [
        id(0x60020006),
        propget,
        helpstring(
            "Indicates whether the Service offers Windows updates.")
    ]
    HRESULT OffersWindowsUpdates(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020007),
        propget,
        helpstring("URLs for the redirector cab.")
    ]
    HRESULT RedirectUrls(
                [out, retval] IStringCollection** retval);

    [
        id(0x60020008),
        propget,
        helpstring("Gets the identifier of the Service.")
    ]
    HRESULT ServiceID(
                [out, retval] BSTR* retval);

    [
        id(0x60020009),
        propget,
        helpstring(
            "Returns the CLSID registered by the Service to provide the user "
            "interface.")
    ]
    HRESULT UIPluginClsid(
                [out, retval] BSTR* retval);

    [
        id(0x6002000A),
        propget,
        helpstring(
            "Indicates whether the service is registered as a scan package "
			"service.")
    ]
    HRESULT IsScanPackageService(
				[out, retval] VARIANT_BOOL* retval);
}

[
    helpstring("IUpdateServiceCollection Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(9b0353aa-0e52-44ff-b8b0-1f7fa0437f88),
    pointer_default(unique)
]
interface IUpdateServiceCollection : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets an element in the collection.")
    ]
    HRESULT Item(
                [in] LONG index,
                [out, retval] IUpdateService** retval);

    [
        id(DISPID_NEWENUM),
        propget,
        helpstring(
            "Gets an IEnumVARIANT interface on an object that can be used to "
            "enumerate the collection.")
    ]
    HRESULT _NewEnum(
                [out, retval] IUnknown** retval);

    [
        id(0x60020001),
        propget,
        helpstring("Gets the number of elements contained in the collection.")
    ]
    HRESULT Count(
                [out, retval] LONG* retval);
}

[
    helpstring("IUpdateServiceManager Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(c165fa56-6f87-43aa-9d92-6cebcc7bcfe4),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateServiceManager : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets the services registered with the Windows Update Agent.")
    ]
    HRESULT Services(
                [out, retval] IUpdateServiceCollection** retval);

//methods:
    [
        id(0x60020002),
        helpstring("Registers a service with the Windows Update Agent.")
    ]
    HRESULT AddService(
                [in]          BSTR serviceID,
                [in]          BSTR authorizationCabPath,
                [out, retval] IUpdateService** retval);

    [
        id(0x60020003),
        helpstring("Registers the service with Automatic Updates.")
    ]
    HRESULT RegisterServiceWithAU(
                [in]          BSTR serviceID);

    [
        id(0x60020004),
        helpstring("Removes a service registration from the Windows Update Agent.")
    ]
    HRESULT RemoveService(
                [in]          BSTR serviceID);

    [
        id(0x60020005),
        helpstring("Unregisters the service from Automatic Updates.")
    ]
    HRESULT UnregisterServiceWithAU(
                [in]          BSTR serviceID);

    [
        id(0x60020006),
        helpstring("Adds the scan package service.")
    ]
    HRESULT AddScanPackageService(
                [in] BSTR bstrServiceName,
                [in] BSTR bstrScanFileLocation,
                [out, retval] IUpdateService **ppService);
}


[
    uuid(B596CC9F-56E5-419E-A622-E01BB457431E),
    version(2.0),
    helpstring("WUAPI 2.0 Type Library")
]
library WUApiLib
{
    importlib("stdole2.tlb");

    interface IUpdate2;
    interface IWindowsDriverUpdate2;
    interface IUpdateLockdown;
    interface IInvalidProductLicenseException;
    interface IWindowsDriverUpdate;
    interface ISearchCompletedCallback;
    interface ISearchProgressChangedCallback;
    interface IDownloadCompletedCallback;
    interface IDownloadProgressChangedCallback;
    interface IInstallationCompletedCallback;
    interface IInstallationProgressChangedCallback;

    [
        helpstring("StringCollection Class"),
        uuid(72C97D74-7C3B-40AE-B77D-ABDB22EBA6FB)
    ]
    coclass StringCollection
    {
        [default]   interface IStringCollection;
    };

    [
        helpstring("UpdateSearcher Class"),
        uuid(B699E5E8-67FF-4177-88B0-3684A3388BFB)
    ]
    coclass UpdateSearcher
    {
        [default]   interface IUpdateSearcher;
    };

    [
        helpstring("WebProxy Class"),
        uuid(650503cf-9108-4ddc-a2ce-6c2341e1c582)
    ]
    coclass WebProxy
    {
        [default]   interface IWebProxy;
    };

    [
        helpstring("SystemInformation Class"),
        uuid(C01B9BA0-BEA7-41BA-B604-D0A36F469133)
    ]
    coclass SystemInformation
    {
        [default]   interface ISystemInformation;
    };

    [
        helpstring("AutomaticUpdates Class"),
        uuid(BFE18E9C-6D87-4450-B37C-E02F0B373803)
    ]
    coclass AutomaticUpdates
    {
        [default]   interface IAutomaticUpdates;
    };

    [
        helpstring("UpdateCollection Class"),
        uuid(13639463-00DB-4646-803D-528026140D88)
    ]
    coclass UpdateCollection
    {
        [default]   interface IUpdateCollection;
    };

    [
        helpstring("UpdateDownloader Class"),
        uuid(5BAF654A-5A07-4264-A255-9FF54C7151E7)
    ]
    coclass UpdateDownloader
    {
        [default]   interface IUpdateDownloader;
    };

    [
        helpstring("UpdateInstaller Class"),
        uuid(D2E0FE7F-D23E-48E1-93C0-6FA8CC346474)
    ]
    coclass UpdateInstaller
    {
        [default]   interface IUpdateInstaller2;
    };

    [
        helpstring("UpdateSession Class"),
        uuid(4CB43D7F-7EEE-4906-8698-60DA1C38F2FE)
    ]
    coclass UpdateSession
    {
        [default]   interface IUpdateSession2;
    };

    [
        helpstring("UpdateServiceManager Class"),
        uuid(91353063-774C-4F84-B05B-498FEC7FBE25)
    ]
    coclass UpdateServiceManager
    {
        [default]   interface IUpdateServiceManager;
    };
};
