1/* 2 * Copyright 2015 Jacek Caban for CodeWeavers 3 * Copyright 2016 Michael M�ller 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 18 */ 19 20#ifndef __WIDL__ 21#define threading(model) 22#endif 23 24cpp_quote("#if 0") 25import "unknwn.idl"; 26cpp_quote("#endif") 27 28interface IStream; 29 30cpp_quote("#define MAX_ID_LENGTH 48") 31cpp_quote("#define MAX_DISPLAYNAME_LENGTH 128") 32 33cpp_quote("#define URLF_DEFAULT 0x0") 34cpp_quote("#define URLF_EXTRACT 0x1") 35cpp_quote("#define URLF_RELATIVEURL 0x2") 36cpp_quote("#define URLF_DELETE_AFTER_EXTRACT 0x4") 37 38cpp_quote("#define ENGINESTATUS_NOTREADY 0x0") 39cpp_quote("#define ENGINESTATUS_LOADING 0x1") 40cpp_quote("#define ENGINESTATUS_INSTALLING 0x2") 41cpp_quote("#define ENGINESTATUS_READY 0x3") 42 43cpp_quote("#define SETACTION_NONE 0x0") 44cpp_quote("#define SETACTION_INSTALL 0x1") 45 46cpp_quote("#define INSTALLOPTIONS_NOCACHE 0x01") 47cpp_quote("#define INSTALLOPTIONS_DOWNLOAD 0x02") 48cpp_quote("#define INSTALLOPTIONS_INSTALL 0x04") 49cpp_quote("#define INSTALLOPTIONS_DONTALLOWXPLATFORM 0x08") 50cpp_quote("#define INSTALLOPTIONS_FORCEDEPENDENCIES 0x10") 51 52cpp_quote("#define EXECUTEJOB_SILENT 0x01") 53cpp_quote("#define EXECUTEJOB_DELETE_JOB 0x02") 54cpp_quote("#define EXECUTEJOB_VERIFYFILES 0x08") 55cpp_quote("#define EXECUTEJOB_IGNORETRUST 0x10") 56cpp_quote("#define EXECUTEJOB_IGNOREDOWNLOADERROR 0x20") 57cpp_quote("#define EXECUTEJOB_DONTALLOWCANCEL 0x40") 58 59cpp_quote("#define ENGINEPROBLEM_DOWNLOADFAIL 0x1") 60 61cpp_quote("#define PLATFORM_WIN95 0x01") 62cpp_quote("#define PLATFORM_WIN98 0x02") 63cpp_quote("#define PLATFORM_NT4 0x04") 64cpp_quote("#define PLATFORM_NT5 0x08") 65cpp_quote("#define PLATFORM_NT4ALPHA 0x10") 66cpp_quote("#define PLATFORM_NT5ALPHA 0x20") 67cpp_quote("#define PLATFORM_MILLEN 0x40") 68cpp_quote("#define PLATFORM_ALL (PLATFORM_WIN95 | PLATFORM_WIN98 | PLATFORM_NT4 | PLATFORM_NT5 | PLATFORM_NT4ALPHA | PLATFORM_NT5ALPHA | PLATFORM_MILLEN)") 69 70enum InstallStatus 71{ 72 INSTALLSTATUS_INITIALIZING, 73 INSTALLSTATUS_DEPENDENCY, 74 INSTALLSTATUS_DOWNLOADING, 75 INSTALLSTATUS_COPYING, 76 INSTALLSTATUS_RETRYING, 77 INSTALLSTATUS_CHECKINGTRUST, 78 INSTALLSTATUS_EXTRACTING, 79 INSTALLSTATUS_RUNNING, 80 INSTALLSTATUS_FINISHED, 81 INSTALLSTATUS_DOWNLOADFINISHED, 82}; 83 84enum ComponentAction 85{ 86 ActionNone, 87 ActionInstall, 88 ActionUninstall, 89}; 90 91[ 92 object, 93 local, 94 pointer_default(unique) 95] 96interface ICifComponent 97{ 98 HRESULT GetID(char *id, DWORD size); 99 HRESULT GetGUID(char *guid, DWORD size); 100 HRESULT GetDescription(char *desc, DWORD size); 101 HRESULT GetDetails(char *details, DWORD size); 102 HRESULT GetUrl(UINT index, char *url, DWORD size, DWORD *flags); 103 HRESULT GetFileExtractList(UINT index, char *extract, DWORD size); 104 HRESULT GetUrlCheckRange(UINT index, DWORD *min, DWORD *max); 105 HRESULT GetCommand(UINT index, char *cmd, DWORD cmd_size, char *switches, DWORD switch_size, DWORD *type); 106 HRESULT GetVersion(DWORD *version, DWORD *build); 107 HRESULT GetLocale(char *pszLocale, DWORD size); 108 HRESULT GetUninstallKey(char *key, DWORD size); 109 HRESULT GetInstalledSize(DWORD *win, DWORD *app); 110 DWORD GetDownloadSize(); 111 DWORD GetExtractSize(); 112 HRESULT GetSuccessKey(char *key, DWORD size); 113 HRESULT GetProgressKeys(char *progress, DWORD progress_size, char *cancel, DWORD cancel_size); 114 HRESULT IsActiveSetupAware(); 115 HRESULT IsRebootRequired(); 116 HRESULT RequiresAdminRights(); 117 DWORD GetPriority(); 118 HRESULT GetDependency(UINT index, char *id, DWORD buf, char *type, DWORD *ver, DWORD *build); 119 DWORD GetPlatform(); 120 HRESULT GetMode(UINT index, char *mode, DWORD size); 121 HRESULT GetGroup(char *id, DWORD size); 122 HRESULT IsUIVisible(); 123 HRESULT GetPatchID(char *id, DWORD size); 124 HRESULT GetDetVersion(char *dll, DWORD dll_size, char *entry, DWORD entry_size); 125 HRESULT GetTreatAsOneComponents(UINT index, char *id, DWORD buf); 126 HRESULT GetCustomData(char *key, char *data, DWORD size); 127 DWORD IsComponentInstalled(); 128 HRESULT IsComponentDownloaded(); 129 DWORD IsThisVersionInstalled(DWORD version, DWORD build, DWORD *ret_version, DWORD *ret_build); 130 DWORD GetInstallQueueState(); 131 HRESULT SetInstallQueueState(DWORD state); 132 DWORD GetActualDownloadSize(); 133 DWORD GetCurrentPriority(); 134 HRESULT SetCurrentPriority(DWORD priority); 135}; 136 137[ 138 object, 139 local, 140 pointer_default(unique) 141] 142interface ICifRWComponent : ICifComponent 143{ 144 HRESULT SetGUID(const char *guid); 145 HRESULT SetDescription(const char *desc); 146 HRESULT SetUrl(UINT index, const char *url, DWORD url_flags); 147 HRESULT SetCommand(UINT index, const char *cmd, const char *switches, DWORD type); 148 HRESULT SetVersion(const char *version); 149 HRESULT SetUninstallKey(const char *key); 150 HRESULT SetInstalledSize(DWORD win, DWORD app); 151 HRESULT SetDownloadSize(DWORD size); 152 HRESULT SetExtractSize(DWORD size); 153 HRESULT DeleteDependency(const char *id, char type); 154 HRESULT AddDependency(const char *id, char type); 155 HRESULT SetUIVisible(BOOL visible); 156 HRESULT SetGroup(const char *id); 157 HRESULT SetPlatform(DWORD platform); 158 HRESULT SetPriority(DWORD priority); 159 HRESULT SetReboot(BOOL reboot); 160 HRESULT DeleteFromModes(const char *mode); 161 HRESULT AddToMode(const char *mode); 162 HRESULT SetModes(const char *mode); 163 HRESULT CopyComponent(const char *ciffile); 164 HRESULT AddToTreatAsOne(const char *compid); 165 HRESULT SetDetails(const char *desc); 166}; 167 168[ 169 object, 170 local, 171 pointer_default(unique) 172] 173interface IEnumCifComponents : IUnknown 174{ 175 HRESULT Next(ICifComponent **); 176 HRESULT Reset(); 177}; 178 179[ 180 object, 181 local, 182 pointer_default(unique) 183] 184interface ICifGroup 185{ 186 HRESULT GetID(char *id, DWORD size); 187 HRESULT GetDescription(char *desc, DWORD size); 188 DWORD GetPriority(); 189 190 HRESULT EnumComponents(IEnumCifComponents **, DWORD filter, void *pv); 191 DWORD GetCurrentPriority(); 192}; 193 194[ 195 object, 196 local, 197 pointer_default(unique) 198] 199interface ICifRWGroup : ICifGroup 200{ 201 HRESULT SetDescription(const char *desc); 202 HRESULT SetPriority(DWORD priority); 203 HRESULT SetDetails(const char *details); 204}; 205 206[ 207 object, 208 local, 209 pointer_default(unique) 210] 211interface IEnumCifGroups : IUnknown 212{ 213 HRESULT Next(ICifGroup **); 214 HRESULT Reset(); 215}; 216 217[ 218 object, 219 local, 220 pointer_default(unique) 221] 222interface ICifMode 223{ 224 HRESULT GetID(char *id, DWORD size); 225 HRESULT GetDescription(char *desc, DWORD size); 226 HRESULT GetDetails(char *details, DWORD size); 227 228 HRESULT EnumComponents(IEnumCifComponents **, DWORD filter, void *pv); 229}; 230 231[ 232 object, 233 local, 234 pointer_default(unique) 235] 236interface ICifRWMode : ICifMode 237{ 238 HRESULT SetDescription(const char *desc); 239 HRESULT SetDetails(const char *details); 240}; 241 242[ 243 object, 244 local, 245 pointer_default(unique) 246] 247interface IEnumCifModes : IUnknown 248{ 249 HRESULT Next(ICifMode **); 250 HRESULT Reset(); 251}; 252 253typedef struct 254{ 255 DWORD cbSize; 256 DWORD dwInstallSize; 257 DWORD dwWinDriveSize; 258 DWORD dwDownloadSize; 259 DWORD dwDependancySize; 260 DWORD dwInstallDriveReq; 261 DWORD dwWinDriveReq; 262 DWORD dwDownloadDriveReq; 263 char chWinDrive; 264 char chInstallDrive; 265 char chDownloadDrive; 266 DWORD dwTotalDownloadSize; 267} COMPONENT_SIZES; 268 269typedef struct 270{ 271 DWORD cbSize; 272 DWORD dwDownloadKBRemaining; 273 DWORD dwInstallKBRemaining; 274 DWORD dwDownloadSecsRemaining; 275 DWORD dwInstallSecsRemaining; 276} INSTALLPROGRESS; 277 278[ 279 uuid(6e449688-c509-11cf-aafa-00aa00b6015c), 280 local 281] 282interface ICifFile : IUnknown 283{ 284 HRESULT EnumComponents(IEnumCifComponents **enum_components, DWORD filter, void *pv); 285 HRESULT FindComponent(const char *id, ICifComponent **p); 286 HRESULT EnumGroups(IEnumCifGroups **enum_groups, DWORD filter, void *pv); 287 HRESULT FindGroup(const char *id, ICifGroup **p); 288 HRESULT EnumModes(IEnumCifModes **cuf_modes, DWORD filter, void *pv); 289 HRESULT FindMode(const char *id, ICifMode **p); 290 HRESULT GetDescription(char *desc, DWORD size); 291 HRESULT GetDetDlls(char *dlls, DWORD size); 292} 293 294[ 295 object, 296 local, 297 pointer_default(unique) 298] 299interface ICifRWFile : ICifFile 300{ 301 HRESULT SetDescription(const char *desc); 302 HRESULT CreateComponent(const char *id, ICifRWComponent **p); 303 HRESULT CreateGroup(const char *id, ICifRWGroup **p); 304 HRESULT CreateMode(const char *id, ICifRWMode **p); 305 HRESULT DeleteComponent(const char *id); 306 HRESULT DeleteGroup(const char *id); 307 HRESULT DeleteMode(const char *id); 308 HRESULT Flush(); 309} 310 311[ 312 uuid(6e449685-c509-11cf-aafa-00aa00b6015c), 313 local 314] 315interface IInstallEngineCallback : IUnknown 316{ 317 HRESULT OnEngineStatusChange(DWORD status, DWORD substatus); 318 HRESULT OnStartInstall(DWORD dl_size, DWORD install_size); 319 HRESULT OnStartComponent(const char *id, DWORD dl_size, DWORD install_size, const char *string); 320 HRESULT OnComponentProgress(const char *id, DWORD phrase, const char *string, 321 const char *msg_string, ULONG progress, ULONG max); 322 HRESULT OnStopComponent(const char *id, HRESULT error, DWORD phrase, const char *string, DWORD status); 323 HRESULT OnStopInstall(HRESULT error, const char *error_string, DWORD status); 324 HRESULT OnEngineProblem(DWORD problem, DWORD *action); 325} 326 327[ 328 uuid(6e449684-c509-11cf-aafa-00aa00b6015c), 329 local 330] 331interface IInstallEngine : IUnknown 332{ 333 HRESULT GetEngineStatus(DWORD *status); 334 HRESULT SetCifFile(const char *cab_name, const char *cif_name); 335 HRESULT DownloadComponents(DWORD flags); 336 HRESULT InstallComponents(DWORD flags); 337 HRESULT EnumInstallIDs(UINT index, char **id); 338 HRESULT EnumDownloadIDs(UINT index, char **id); 339 HRESULT IsComponentInstalled(const char *id, DWORD *status); 340 HRESULT RegisterInstallEngineCallback(IInstallEngineCallback *callback); 341 HRESULT UnregisterInstallEngineCallback(); 342 HRESULT SetAction(const char *id, DWORD action, DWORD priority); 343 HRESULT GetSizes(const char *id, COMPONENT_SIZES *sizes); 344 HRESULT LaunchExtraCommand(const char *inf_name, const char *section); 345 HRESULT GetDisplayName(const char *id, const char *name); 346 HRESULT SetBaseUrl(const char *base_name); 347 HRESULT SetDownloadDir(const char *download_dir); 348 HRESULT SetInstallDrive(char drive); 349 HRESULT SetInstallOptions(DWORD flags); 350 HRESULT SetHWND(HWND hwnd); 351 HRESULT SetIStream(IStream *stream); 352 HRESULT Abort(DWORD flags); 353 HRESULT Suspend(); 354 HRESULT Resume(); 355} 356 357[ 358 uuid(6e449689-c509-11cf-aafa-00aa00b6015c), 359 local 360] 361interface IInstallEngine2 : IInstallEngine 362{ 363 HRESULT SetLocalCif(const char *cif); 364 HRESULT GetICifFile(ICifFile **cif_file); 365} 366 367[ 368 uuid(6e449687-c509-11cf-aafa-00aa00b6015c), 369 local 370] 371interface IInstallEngineTiming : IUnknown 372{ 373 HRESULT GetRates(DWORD *download, DWORD *install); 374 HRESULT GetInstallProgress(INSTALLPROGRESS *progress); 375} 376 377[ 378 helpstring("Microsoft Active Setup Engine"), 379 threading(apartment), 380 uuid(6e449686-c509-11cf-aafa-00aa00b6015c) 381] 382coclass InstallEngine { } 383 384[ 385 helpstring("Download Site Manager"), 386 threading(apartment), 387 uuid(bfc880f1-7484-11d0-8309-00aa00b6015c) 388] 389coclass DownloadSiteMgr { } 390 391cpp_quote("HRESULT WINAPI GetICifFileFromFile(ICifFile **, const char *);") 392cpp_quote("HRESULT WINAPI GetICifRWFileFromFile(ICifRWFile **, const char *);") 393