//=======================================================================
//
//  (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("// {85713FA1-7796-4FA2-BE3B-E2D6124DD373}")
cpp_quote("DEFINE_GUID(IID_IWindowsUpdateAgentInfo,0x85713FA1,0x7796,0x4FA2,0xBE,0x3B,0xE2,0xD6,0x12,0x4D,0xD3,0x73);")
cpp_quote("")
cpp_quote("// {E7A4D634-7942-4DD9-A111-82228BA33901}")
cpp_quote("DEFINE_GUID(IID_IAutomaticUpdatesResults,0xe7a4d634,0x7942,0x4DD9,0xA1,0x11,0x82,0x22,0x8b,0xa3,0x39,0x1);")
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("// {6ABC136A-C3CA-4384-8171-CB2B1E59B8DC}")
cpp_quote("DEFINE_GUID(IID_IAutomaticUpdatesSettings2,0x6abc136a,0xc3ca,0x4384,0x81,0x71,0xcb,0x2b,0x1e,0x59,0xb8,0xdc);")
cpp_quote("")
cpp_quote("// {B587F5C3-F57E-485F-BBF5-0D181C5CD0DC}")
cpp_quote("DEFINE_GUID(IID_IAutomaticUpdatesSettings3,0xb587f5c3,0xf57e,0x485f,0xbb,0xf5,0x0d,0x18,0x1c,0x5c,0xd0,0xdc);")
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("// {4A2F5C31-CFD9-410E-B7FB-29A653973A0F}")
cpp_quote("DEFINE_GUID(IID_IAutomaticUpdates2,0x4A2f5C31,0xCFD9,0x410E,0xB7,0xFB,0x29,0xA6,0x53,0x97,0x3A,0xF);")
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("// {C97AD11B-F257-420B-9D9F-377F733F6F68}")
cpp_quote("DEFINE_GUID(IID_IUpdateDownloadContent2,0xc97ad11b,0xf257,0x420b,0x9d,0x9f,0x37,0x7f,0x73,0x3f,0x6f,0x68);")
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("// {144fe9b0-d23d-4a8b-8634-fb4457533b7a}")
cpp_quote("DEFINE_GUID(IID_IUpdate2,0x144fe9b0,0xd23d,0x4a8b,0x86,0x34,0xfb,0x44,0x57,0x53,0x3b,0x7a);")
cpp_quote("")
cpp_quote("// {112EDA6B-95B3-476F-9D90-AEE82C6B8181}")
cpp_quote("DEFINE_GUID(IID_IUpdate3,0x112EDA6B,0x95B3,0x476F,0x9D,0x90,0xAE,0xE8,0x2C,0x6B,0x81,0x81);")
cpp_quote("")
cpp_quote("// {27E94B0D-5139-49A2-9A61-93522DC54652}")
cpp_quote("DEFINE_GUID(IID_IUpdate4,0x27e94b0d,0x5139,0x49a2,0x9a, 0x61, 0x93, 0x52, 0x2d, 0xc5, 0x46, 0x52);")
cpp_quote("")
cpp_quote("// {C1C2F21A-D2F4-4902-B5C6-8A081C19A890}")
cpp_quote("DEFINE_GUID(IID_IUpdate5,0xc1c2f21a,0xd2f4,0x4902,0xb5, 0xc6, 0x8a, 0x08, 0x1c, 0x19, 0xa8, 0x90);")
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("// {615c4269-7a48-43bd-96b7-bf6ca27d6c3e}")
cpp_quote("DEFINE_GUID(IID_IWindowsDriverUpdate2,0x615c4269,0x7a48,0x43bd,0x96,0xb7,0xbf,0x6c,0xa2,0x7d,0x6c,0x3e);")
cpp_quote("")
cpp_quote("// {49EBD502-4A96-41BD-9E3E-4C5057F4250C}")
cpp_quote("DEFINE_GUID(IID_IWindowsDriverUpdate3,0x49EBD502,0x4A96,0x41BD,0x9E,0x3E,0x4C,0x50,0x57,0xF4,0x25,0x0C);")
cpp_quote("")
cpp_quote("// {004C6A2B-0C19-4c69-9F5C-A269B2560DB9}")
cpp_quote("DEFINE_GUID(IID_IWindowsDriverUpdate4,0x004C6A2B,0x0C19,0x4c69,0x9F,0x5C,0xA2,0x69,0xB2,0x56,0x0D,0xB9);")
cpp_quote("")
cpp_quote("// {70CF5C82-8642-42bb-9DBC-0CFD263C6C4F}")
cpp_quote("DEFINE_GUID(IID_IWindowsDriverUpdate5,0x70CF5C82,0x8642,0x42bb,0x9d,0xbc,0x0c,0xfd,0x26,0x3c,0x6c,0x4f);")
cpp_quote("")
cpp_quote("// {0D521700-A372-4bef-828B-3D00C10ADEBD}")
cpp_quote("DEFINE_GUID(IID_IWindowsDriverUpdateEntryCollection,0x0D521700,0xA372,0x4bef,0x82,0x8B,0x3D,0x00,0xC1,0x0A,0xDE,0xBD);")
cpp_quote("")
cpp_quote("// {ED8BFE40-A60B-42ea-9652-817DFCFA23EC}")
cpp_quote("DEFINE_GUID(IID_IWindowsDriverUpdateEntry,0xED8BFE40,0xA60B,0x42ea,0x96,0x52,0x81,0x7D,0xFC,0xFA,0x23,0xEC);")
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("// {C2BFB780-4539-4132-AB8C-0A8772013AB6}")
cpp_quote("DEFINE_GUID(IID_IUpdateHistoryEntry2,0xc2bfb780,0x4539,0x4132,0xab,0x8c,0x0a,0x87,0x72,0x01,0x3a,0xb6);")
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("// {4CBDCB2D-1589-4BEB-BD1C-3E582FF0ADD0}")
cpp_quote("DEFINE_GUID(IID_IUpdateSearcher2,0x4cbdcb2d,0x1589,0x4beb,0xbd,0x1c,0x3e,0x58,0x2f,0xf0,0xad,0xd0);")
cpp_quote("")
cpp_quote("// {04C6895D-EAF2-4034-97F3-311DE9BE413A}")
cpp_quote("DEFINE_GUID(IID_IUpdateSearcher3,0x4c6895d,0xeaf2,0x4034,0x97,0xf3,0x31,0x1d,0xe9,0xbe,0x41,0x3a);")
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("// {3442d4fe-224d-4cee-98cf-30e0c4d229e6}")
cpp_quote("DEFINE_GUID(IID_IUpdateInstaller2,0x3442d4fe,0x224d,0x4cee,0x98,0xcf,0x30,0xe0,0xc4,0xd2,0x29,0xe6);")
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("// {918EFD1E-B5D8-4c90-8540-AEB9BDC56F9D}")
cpp_quote("DEFINE_GUID(IID_IUpdateSession3,0x918efd1e,0xb5d8,0x4c90,0x85,0x40,0xae,0xb9,0xbd,0xc5,0x6f,0x9d);")
cpp_quote("")
cpp_quote("// {76B3B17E-AED6-4DA5-85F0-83587F81ABE3}")
cpp_quote("DEFINE_GUID(IID_IUpdateService,0x76b3b17e,0xaed6,0x4da5,0x85,0xf0,0x83,0x58,0x7f,0x81,0xab,0xe3);")
cpp_quote("")
cpp_quote("// {1518B460-6518-4172-940F-C75883B24CEB}")
cpp_quote("DEFINE_GUID(IID_IUpdateService2,0x1518b460,0x6518,0x4172,0x94,0x0f,0xc7,0x58,0x83,0xb2,0x4c,0xeb);")
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("// {DDE02280-12B3-4E0B-937B-6747F6ACB286}")
cpp_quote("DEFINE_GUID(IID_IUpdateServiceRegistration,0xdde02280,0x12b3,0x4e0b,0x93,0x7b,0x67,0x47,0xf6,0xac,0xb2,0x86);")
cpp_quote("")
cpp_quote("// {23857E3C-02BA-44A3-9423-B1C900805F37}")
cpp_quote("DEFINE_GUID(IID_IUpdateServiceManager,0x23857E3C,0x02BA,0x44A3,0x94,0x23,0xB1,0xC9,0x00,0x80,0x5F,0x37);")
cpp_quote("")
cpp_quote("// {0BB8531D-7E8D-424F-986C-A0B8F60A3E7B}")
cpp_quote("DEFINE_GUID(IID_IUpdateServiceManager2,0x0BB8531D,0x7E8D,0x424F,0x98,0x6C,0xA0,0xB8,0xF6,0x0A,0x3E,0x7B);")
cpp_quote("")
cpp_quote("// {925CBC18-A2EA-4648-BF1C-EC8BADCFE20A}")
cpp_quote("DEFINE_GUID(IID_IInstallationAgent,0x925CBC18,0xA2EA,0x4648,0xBF,0x1C,0xEC,0x8B,0xAD,0xCF,0xE2,0x0A);")
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("// {C2E88C2F-6F5B-4AAA-894B-55C847AD3A2D}")
cpp_quote("DEFINE_GUID(CLSID_WindowsUpdateAgentInfo,0xC2E88C2F,0x6F5B,0x4AAA,0x89,0x4B,0x55,0xC8,0x47,0xAD,0x3A,0x2D);")
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("// {F8D253D9-89A4-4DAA-87B6-1168369F0B21}")
cpp_quote("DEFINE_GUID(CLSID_UpdateServiceManager,0xF8D253D9,0x89A4,0x4DAA,0x87,0xB6,0x11,0x68,0x36,0x9F,0x0B,0x21);")
cpp_quote("")
cpp_quote("// {317E92FC-1679-46FD-A0B5-F08914DD8623}")
cpp_quote("DEFINE_GUID(CLSID_InstallationAgent,0x317E92FC,0x1679,0x46FD,0xA0,0xB5,0xF0,0x89,0x14,0xDD,0x86,0x23);")
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 auto selection modes of update."),
    v1_enum
]
typedef [public] enum tagAutoSelectionMode
{
    [helpstring("Let windows update decide")]   asLetWindowsUpdateDecide    = 0,
    [helpstring("Auto select if downloaded")]   asAutoSelectIfDownloaded    = 1,
    [helpstring("Never auto select")]           asNeverAutoSelect           = 2,
    [helpstring("Always auto select")]          asAlwaysAutoSelect          = 3,
} AutoSelectionMode;

[
    helpstring("Defines possible auto download modes of update."),
    v1_enum
]
typedef [public] enum tagAutoDownloadMode
{
    [helpstring("Let windows update decide")]   adLetWindowsUpdateDecide = 0,
    [helpstring("Never auto download")]         adNeverAutoDownload      = 1,
    [helpstring("Always auto download")]        adAlwaysAutoDownload     = 2,
} AutoDownloadMode;

[
    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,
    [helpstring("Detection")]       daDetection         = 3,
} 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 types of users whose permissions can be checked "
               "via IAutomaticUpdatesSettings2.CheckPermission."),
    v1_enum
]
typedef [public] enum tagAutomaticUpdatesUserType
{
    [helpstring("The current user")]                            auutCurrentUser = 1,
    [helpstring("An administrative account calling locally")]   auutLocalAdministrator = 2,
} AutomaticUpdatesUserType;

[
    helpstring("Defines operations against which users' permissions can "
               "be checked via IAutomaticUpdatesSettings2::CheckPermission()."),
    v1_enum
]
typedef [public] enum tagAutomaticUpdatesPermissionType
{
    [helpstring("Set AU notification level")]               auptSetNotificationLevel = 1,
    [helpstring("Set AU notification level to Disabled")]   auptDisableAutomaticUpdates = 2,
    [helpstring("Set AU setting for recommended updates")]  auptSetIncludeRecommendedUpdates = 3,
    [helpstring("Set AU setting for featured updates")]  auptSetFeaturedUpdatesEnabled = 4,
    [helpstring("Set AU setting to increase priviliges for non administrator")]  auptSetNonAdministratorsElevated = 5,
} AutomaticUpdatesPermissionType;

[
    helpstring("Defines possible states of service registration."),
    v1_enum
]
typedef [public] enum tagUpdateServiceRegistrationState
{
    [helpstring("Not registered")]       usrsNotRegistered = 1,
    [helpstring("Registration pending")] usrsRegistrationPending = 2,
    [helpstring("Registered")]           usrsRegistered = 3,
} UpdateServiceRegistrationState;

[
    helpstring("Defines possible search scopes for a search call. The scope may indicate user updates" 
    "for the calling user updates for all users, machine updates or a combination of these."),
    v1_enum
]
typedef [public] enum tagSearchScope
{
    [helpstring("Default search scope")]    searchScopeDefault = 0,
    [helpstring("Machine updates only")]    searchScopeMachineOnly = 1,
    [helpstring("Per-user updates applicable to the calling user only")] searchScopeCurrentUserOnly = 2,
    [helpstring("Machine updates and per-user updates applicable to the calling user")] searchScopeMachineAndCurrentUser = 3,
    [helpstring("Machine updates and per-user updates applicable to any user")] searchScopeMachineAndAllUsers = 4,
    [helpstring("Per-user updates applicable to any user")] searchScopeAllUsers = 5
}SearchScope;

// Deprecated. Use UpdateLockdownOption.uloForWebsiteAccess instead.
const LONG UPDATE_LOCKDOWN_WEBSITE_ACCESS = 0x00000001;

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

[
    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* parentWindow,
                [in] BSTR title);

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

//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 information 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("IWindowsUpdateAgentInfo Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(85713fa1-7796-4fa2-be3b-e2d6124dd373),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IWindowsUpdateAgentInfo : IDispatch
{
//methods:
    [
        id(0x60020001),
        helpstring(
           "Get Windows Update Agent Info.")
    ]
    HRESULT GetInfo( 
               [in] VARIANT varInfoIdentifier,  
               [out, retval] VARIANT* retval);
}

[
    helpstring("IAutomaticUpdatesResults Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(E7A4D634-7942-4DD9-A111-82228BA33901),
    pointer_default(unique)
]
interface IAutomaticUpdatesResults : IDispatch
{
//properties:

    [
        id(0x60020001),
        propget,
        helpstring("Returns the date and time of the last successful search for updates.")
    ]
    HRESULT LastSearchSuccessDate(
                [out, retval] VARIANT* retval);

    [
        id(0x60020002),
        propget,
        helpstring("Returns the date and time of the last successful installation of updates.")
    ]
    HRESULT LastInstallationSuccessDate(
                [out, retval] VARIANT* 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("IAutomaticUpdatesSettings2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(6abc136a-c3ca-4384-8171-cb2b1e59b8dc),
    pointer_default(unique)
]
interface IAutomaticUpdatesSettings2 : IAutomaticUpdatesSettings
{
//properties:

    [
        id(0x60030001),
        propget,
        helpstring(
            "Indicates whether to include recommended updates.")
    ]
    HRESULT IncludeRecommendedUpdates(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60030001),
        propput,
        helpstring(
            "Specifies whether to include recommended updates.")
    ]
    HRESULT IncludeRecommendedUpdates(
                [in] VARIANT_BOOL value);

//methods:
    [
        id(0x60030002),
        helpstring(
            "Determines whether a class of users has permission to perform "
            "the specified action.")
    ]
    HRESULT CheckPermission(
            [in] AutomaticUpdatesUserType userType,
            [in] AutomaticUpdatesPermissionType permissionType,
            [out, retval] VARIANT_BOOL* userHasPermission);
}

[
    helpstring("IAutomaticUpdatesSettings3 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(b587f5c3-f57e-485f-bbf5-0d181c5cd0dc),
    pointer_default(unique)
]
interface IAutomaticUpdatesSettings3 : IAutomaticUpdatesSettings2
{
    //properties:
    [
        id(0x60040001),
        propget,
        helpstring(
            "Reports whether non-administrators can perform some update-related actions without administrator approval.")
    ]
    HRESULT NonAdministratorsElevated(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60040001),
        propput,
        helpstring(
            "Controls whether non-administrators can perform some update-related actions without administrator approval.")
    ]
    HRESULT NonAdministratorsElevated(
                [in] VARIANT_BOOL value);
    [
        id(0x60040002),
        propget,
        helpstring(
            "Reports whether to display notifications for featured updates.")
    ]
    HRESULT FeaturedUpdatesEnabled(
                [out, retval] VARIANT_BOOL* retval);
    [
        id(0x60040002),
        propput,
        helpstring(
            "Controls whether to display notifications for featured updates.")
    ]
    HRESULT FeaturedUpdatesEnabled(
                [in] VARIANT_BOOL value);
}

[
    helpstring("IAutomaticUpdates Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(673425bf-c082-4c7c-bdfd-569464b8e0ce),
    pointer_default(unique)
]
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("IAutomaticUpdates2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(4A2F5C31-CFD9-410E-B7FB-29A653973A0F),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IAutomaticUpdates2 : IAutomaticUpdates
{
//properties:
    [
        id(0x60030001),
        propget,
        helpstring(
            "Gets an IAutomaticUpdatesResults interface for querying "
            "results of past Automatic Updates operations.")
    ]
    HRESULT Results(
                [out, retval] IAutomaticUpdatesResults** retval);
}

[
    helpstring("IUpdateIdentity Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(46297823-9940-4c09-aed9-cd3ea6d05968),
    pointer_default(unique)
]
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("IUpdateDownloadContent2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(c97ad11b-f257-420b-9d9f-377f733f6f68),
    pointer_default(unique),
]
interface IUpdateDownloadContent2 : IUpdateDownloadContent
{
//properties:
    [
        id(0x60030001),
        propget,
        helpstring("Returns whether this forms part of the delta compressed download content.")
    ]
    HRESULT IsDeltaCompressedContent(
                [out, retval] VARIANT_BOOL* 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 applications such as Windows 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 license terms associated with "
            "the Update have been accepted for the target computer.")
    ]
    HRESULT EulaAccepted(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x6002000a),
        propget,
        helpstring(
            "Gets the full, localized text of the license terms "
            "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 license terms 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(144fe9b0-d23d-4a8b-8634-fb4457533b7a),
    pointer_default(unique),
]
interface IUpdate2 : IUpdate
{
// properties

    [
        id(0x60030001),
        propget,
        helpstring("Gets a value indicating whether the computer still needs to be "
            "rebooted after (un)installing this update.")
    ]
    HRESULT RebootRequired(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60030003),
        propget,
        helpstring("Indicates whether the update is present on the machine.")
    ]
    HRESULT IsPresent([out, retval] VARIANT_BOOL* retval);

    [
        id(0x60030004),
        propget,
        helpstring(
            "Gets the CVE IDs associated with the Update.")
    ]
    HRESULT CveIDs(
                [out, retval] IStringCollection** retval);

// methods

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

}

[
    helpstring("IUpdate3 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(112EDA6B-95B3-476F-9D90-AEE82C6B8181),
    pointer_default(unique),
]
interface IUpdate3 : IUpdate2
{
// properties

    [
        id(0x60040001),
        propget,
        helpstring("Gets a value indicating whether this update is intended only "
            "for discovery by end users browsing manually for updates.")
    ]
    HRESULT BrowseOnly(
                [out, retval] VARIANT_BOOL* retval);

}


[
    helpstring("IUpdate4 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(27e94b0d-5139-49a2-9a61-93522dc54652),
    pointer_default(unique),
]
interface IUpdate4 : IUpdate3
{
// properties

    [
        id(0x60050001),
        propget,
        helpstring("Indicates whether this is a per-user update")
    ]
    HRESULT PerUser( [out, retval] VARIANT_BOOL* retval);

}

[
    helpstring("IUpdate5 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(C1C2F21A-D2F4-4902-B5C6-8A081C19A890),
    pointer_default(unique),
]
interface IUpdate5 : IUpdate4
{
// properties

    [
        id(0x60060001),
        propget,
        helpstring("Gets a value indicating the auto selection mode of update in control panel of Windows Update.")
    ]
    HRESULT AutoSelection(
                [out, retval] AutoSelectionMode* retval);

    [
        id(0x60060002),
        propget,
        helpstring("Gets a value indicating the auto download mode of update.")
    ]
    HRESULT AutoDownload(
                [out, retval] AutoDownloadMode* retval);

}

[
    helpstring("IWindowsDriverUpdate2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(615c4269-7a48-43bd-96b7-bf6ca27d6c3e),
    pointer_default(unique),
]
interface IWindowsDriverUpdate2 : IWindowsDriverUpdate
{
// properties

    [
        id(0x60040001),
        propget,
        helpstring("Gets a value indicating whether the computer still needs to be "
            "rebooted after (un)installing this update.")
    ]
    HRESULT RebootRequired(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60040003),
        propget,
        helpstring("Indicates whether the update is present on the machine.")
    ]
    HRESULT IsPresent([out, retval] VARIANT_BOOL* retval);

    [
        id(0x60040004),
        propget,
        helpstring(
            "Gets the CVE IDs associated with the Update.")
    ]
    HRESULT CveIDs(
                [out, retval] IStringCollection** retval);
// methods

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

}

[
    helpstring("IWindowsDriverUpdate3 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(49EBD502-4A96-41BD-9E3E-4C5057F4250C),
    pointer_default(unique),
]
interface IWindowsDriverUpdate3 : IWindowsDriverUpdate2
{
// properties

    [
        id(0x60050001),
        propget,
        helpstring("Gets a value indicating whether this update is intended only "
            "for discovery by end users browsing manually for updates.")
    ]
    HRESULT BrowseOnly(
                [out, retval] VARIANT_BOOL* retval);

}

[
    helpstring("IWindowsDriverUpdateEntry Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(ED8BFE40-A60B-42ea-9652-817DFCFA23EC),
    pointer_default(unique),
]
interface IWindowsDriverUpdateEntry : IDispatch
{
//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("IWindowsDriverUpdateEntryCollection Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(0D521700-A372-4bef-828B-3D00C10ADEBD),
    pointer_default(unique),
]

interface IWindowsDriverUpdateEntryCollection : IDispatch
{
// properties
    [
        id(DISPID_VALUE),
        propget,
        helpstring("Gets an element in the collection.")
    ]
    HRESULT Item(
                [in] LONG index,
                [out, retval] IWindowsDriverUpdateEntry ** 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("IWindowsDriverUpdate4 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(004C6A2B-0C19-4c69-9F5C-A269B2560DB9),
    pointer_default(unique),
]
interface IWindowsDriverUpdate4 : IWindowsDriverUpdate3
{
// properties

    [
        id(0x60060001),
        propget,
        helpstring("Gets the driver update entries that are applicable for the "
          "update.")
    ]
    HRESULT WindowsDriverUpdateEntries(
                [out, retval] IWindowsDriverUpdateEntryCollection** retval);

    [
        id(0x60060002),
        propget,
        helpstring("Indicates whether this update is a per-user update ")
    ]
    HRESULT PerUser(
                [out, retval] VARIANT_BOOL* retval);
                

}

[
    helpstring("IWindowsDriverUpdate5 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(70CF5C82-8642-42bb-9DBC-0CFD263C6C4F),
    pointer_default(unique),
]
interface IWindowsDriverUpdate5 : IWindowsDriverUpdate4
{
// properties

    [
        id(0x60070001),
        propget,
        helpstring("Gets a value indicating the auto selection mode of update in control panel of Windows Update.")
    ]
    HRESULT AutoSelection(
                [out, retval] AutoSelectionMode* retval);

    [
        id(0x60070002),
        propget,
        helpstring("Gets a value indicating the auto download mode of update.")
    ]
    HRESULT AutoDownload(
                [out, retval] AutoDownloadMode* retval);

}

[
    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("IUpdateHistoryEntry2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(c2bfb780-4539-4132-ab8c-0a8772013ab6),
    pointer_default(unique),
]
interface IUpdateHistoryEntry2 : IUpdateHistoryEntry
{
//properties:
    [
        id(0x60030001),
        propget,
        helpstring("Gets the categories that the update belongs to.")
    ]
    HRESULT Categories(
                [out, retval] ICategoryCollection** 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),
]
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("IUpdateSearcher2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(4cbdcb2d-1589-4beb-bd1c-3e582ff0add0),
    pointer_default(unique)
]
interface IUpdateSearcher2 : IUpdateSearcher
{
//properties:
    [
        id(0x60030001),
        propget,
        helpstring(
            "Gets whether to ignore download priority of updates when "
            "computing potential supersedence.")
    ]
    HRESULT IgnoreDownloadPriority(
                [out, retval] VARIANT_BOOL* retval);
    
    [
        id(0x60030001),
        propput,
        helpstring(
            "Specifies whether to ignore download priority of updates when "
            "computing potential supersedence.")
    ]
    HRESULT IgnoreDownloadPriority(
                [in] VARIANT_BOOL value);
}

[
    helpstring("IUpdateSearcher3 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(04C6895D-EAF2-4034-97F3-311DE9BE413A),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateSearcher3 : IUpdateSearcher2
{
//properties:
    [
        id(0x60040001),
        propget,
        helpstring(
            "Gets a SearchScope enumeration value which indicates the scope of updates returned"
            " by the search.")
    ]
    HRESULT SearchScope(
                [out, retval] SearchScope* retval);
    
    [
        id(0x60040001),
        propput,
        helpstring("Specifies the scope of updates to be returned by the search.")
    ]
    HRESULT SearchScope(
                [in] SearchScope 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),
]
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, unique, 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(3442d4fe-224d-4cee-98cf-30e0c4d229e6),
    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 );
}

[
    helpstring("IUpdateSession Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(816858a4-260d-4260-933a-2585f1abc76b),
    pointer_default(unique),
]
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),
]
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("IUpdateSession3 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(918EFD1E-B5D8-4c90-8540-AEB9BDC56F9D),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateSession3 : IUpdateSession2
{
//methods:
    [
        id(0x60040001),
        helpstring("Creates an UpdateServiceManager within the UpdateSession.")
    ]
    HRESULT CreateUpdateServiceManager(
                [out, retval] IUpdateServiceManager2** retval);

    [
        id(0x60040002),
        helpstring(
            "Synchronously queries the target computer for the history of "
            "update events given a query criteria.")
    ]
    HRESULT QueryHistory(
                [in] BSTR criteria,
                [in] LONG startIndex,
                [in] LONG count,
                [out, retval] IUpdateHistoryEntryCollection** retval);
}

[
    helpstring("IUpdateService Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(76b3b17e-aed6-4da5-85f0-83587f81abe3),
    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(0x6002000A),
        propget,
        helpstring(
            "Indicates whether the service is registered as a scan package "
            "service.")
    ]
    HRESULT IsScanPackageService(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x6002000B),
        propget,
        helpstring(
            "Indicates whether the service can register with AU.")
    ]
    HRESULT CanRegisterWithAU(
                [out, retval] VARIANT_BOOL* retval);


    [
        id(0x6002000C),
        propget,
        helpstring(
            "Indicates the service URL.")
    ]
    HRESULT ServiceUrl(
                [out, retval] BSTR* retval);

    [
        id(0x6002000D),
        propget,
        helpstring(
            "Indicates the prefix for setup files.")
    ]
    HRESULT SetupPrefix(
                [out, retval] BSTR* retval);
}

[
    helpstring("IUpdateService2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(1518b460-6518-4172-940f-c75883b24ceb),
    pointer_default(unique)
]
interface IUpdateService2 : IUpdateService
{
//properties:
    [
        id(0x60030001),
        propget,
        helpstring(
            "Indicates whether the Service is in use by Automatic Updates.")
    ]
    HRESULT IsDefaultAUService(
                [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("IUpdateServiceRegistration Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(dde02280-12b3-4e0b-937b-6747f6acb286),
    pointer_default(unique)
]
interface IUpdateServiceRegistration : IDispatch
{
//properties:
    [
        id(DISPID_VALUE),
        propget,
        helpstring(
            "Gets the registration state of the Service.")
    ]
    HRESULT RegistrationState(
                [out, retval] UpdateServiceRegistrationState* retval);

    [
        id(0x60020001),
        propget,
        helpstring("Gets the service ID associated with the registration.")
    ]
    HRESULT ServiceID(
                [out, retval] BSTR* retval);

    [
        id(0x60020002),
        propget,
        helpstring("Whether the Service is pending registration with AU.")
    ]
    HRESULT IsPendingRegistrationWithAU(
                [out, retval] VARIANT_BOOL* retval);

    [
        id(0x60020003),
        propget,
        helpstring("Information on the Service.")
    ]
    HRESULT Service(
                [out, retval] IUpdateService2** retval);
}

[
    helpstring("IUpdateServiceManager Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(23857e3c-02ba-44a3-9423-b1c900805f37),
    pointer_default(unique)
]
interface IUpdateServiceManager : IDispatch
{
//properties:
    [
        id(0x60020001),
        propget,
        helpstring("Gets the services registered with Windows Update Agent.")
    ]
    HRESULT Services(
                [out, retval] IUpdateServiceCollection** retval);

//methods:
    [
        id(0x60020002),
        helpstring("Registers a service with 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 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 serviceName,
                [in] BSTR scanFileLocation,
                [in, defaultvalue(0)] LONG flags,
                [out, retval] IUpdateService **ppService);

    [
        id(0x60010007),
        helpstring("Sets options for the functionality this object provides.")
    ]
    HRESULT SetOption (
               [in] BSTR    optionName,
               [in] VARIANT optionValue);
}

[
    helpstring("IUpdateServiceManager2 Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(0bb8531d-7e8d-424f-986c-a0b8f60a3e7b),
    pointer_default(unique),
    hidden  // already exposed by a class
]
interface IUpdateServiceManager2 : IUpdateServiceManager
{
//properties:
    [
        id(0x60030001),
        propget,
        helpstring("Gets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [out, retval] BSTR* retval);
    [
        id(0x60030001),
        propput,
        helpstring("Sets the identifier of the current client application.")
    ]
    HRESULT ClientApplicationID(
                [in] BSTR value);

//methods:
    [
        id(0x60030002),
        helpstring("Look up an update service by its service ID.")
    ]
    HRESULT QueryServiceRegistration(
                [in]          BSTR serviceID,
                [out, retval] IUpdateServiceRegistration** retval);

    [
        id(0x60030003),
        helpstring(
            "Registers a service with Windows Update Agent without "
            "specifying an authorization cabinet file.")
    ]
    HRESULT AddService2(
                [in]          BSTR serviceID,
                [in]          LONG flags,
                [in]          BSTR authorizationCabPath,
                [out, retval] IUpdateServiceRegistration** retval);
}


[
    helpstring("IInstallationAgent Interface"),
    object,
    oleautomation,
    dual,
    nonextensible,
    uuid(925cbc18-a2ea-4648-bf1c-ec8badcfe20a),
    pointer_default(unique)
]
interface IInstallationAgent : IDispatch
{
//methods
    [
        id(0x60020001),
        helpstring("Records the specified result for the update.")
    ]
    HRESULT RecordInstallationResult(
                [in]          BSTR installationResultCookie,
                [in]          LONG hresult,
                [in]          IStringCollection* extendedReportingData);
}


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

    [
        helpstring(
            "Defines the possible restrictions for IUpdateLockdown::LockDown() "
            "to impose on an object"),
        v1_enum
    ]
    typedef [public] enum tagUpdateLockdownOption
    {
        [helpstring("For website access")] uloForWebsiteAccess = 0x00000001,
    } UpdateLockdownOption;

    [
        helpstring(
            "Defines the possible options for "
            "IUpdateServiceManager2::AddService2()"),
        v1_enum
    ]
    typedef [public] enum tagAddServiceFlag
    {
        [helpstring("Allow deferred processing when not online")]
        asfAllowPendingRegistration = 0x00000001,
        [helpstring("Allow online processing")]
        asfAllowOnlineRegistration  = 0x00000002,
        [helpstring("Register service with AU")]
        asfRegisterServiceWithAU    = 0x00000004,
    } AddServiceFlag;

    [
        helpstring(
            "Defines the possible service options when adding an update "
            "service"),
        v1_enum
    ]
    typedef [public] enum tagUpdateServiceOption
    {
        [helpstring("Non-volatile service")] usoNonVolatileService = 0x00000001,
    } UpdateServiceOption;

    // Interface declarations
    interface IUpdateLockdown;
    interface IInvalidProductLicenseException;
    interface IAutomaticUpdatesSettings2;    
    interface IAutomaticUpdatesSettings3;    
    interface IUpdate2;
    interface IUpdate3;
    interface IWindowsDriverUpdateEntry;        
    interface IWindowsDriverUpdateEntryCollection;    
    interface IUpdate4;
    interface IUpdate5;
    interface IWindowsDriverUpdate;
    interface IWindowsDriverUpdate2;
    interface IWindowsDriverUpdate3;
    interface IWindowsDriverUpdate4;
    interface IWindowsDriverUpdate5;
    interface ISearchCompletedCallback;
    interface IDownloadCompletedCallback;
    interface IDownloadProgressChangedCallback;
    interface IInstallationCompletedCallback;
    interface IInstallationProgressChangedCallback;
    interface IUpdateHistoryEntry2;
    interface IUpdateDownloadContent2;

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

    [
        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("WindowsUpdateAgentInfo Class"),
        uuid(C2E88C2F-6F5B-4AAA-894B-55C847AD3A2D)
    ]
    coclass WindowsUpdateAgentInfo
    {
        [default]   interface IWindowsUpdateAgentInfo;
    };

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

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

    [
        helpstring("UpdateServiceManager Class"),
        uuid(F8D253D9-89A4-4DAA-87B6-1168369F0B21)
    ]
    coclass UpdateServiceManager
    {
        [default]   interface IUpdateServiceManager2;
    };

    [
        helpstring("InstallationAgent Class"),
        uuid(317E92FC-1679-46FD-A0B5-F08914DD8623)
    ]
    coclass InstallationAgent
    {
        [default]   interface IInstallationAgent;
    };
};

