//======================================================================= // // Copyright (c) 2000 Microsoft Corporation. All Rights Reserved. // // File: iuengine.h // // Description: // // Common include file for IUEngine DLL // //======================================================================= #ifndef __IUENGINE_H_ #define __IUENGINE_H_ #include #include #include #include "..\inc\iu.h" #include #include #include #include #include // #define __IUENGINE_USES_ATL_ #if defined(__IUENGINE_USES_ATL_) #include #define USES_IU_CONVERSION USES_CONVERSION #else #include #endif #include "schemakeys.h" #include #include //*********************************************************************** // // The following constants are defined in engmain.cpp // //*********************************************************************** /** * the following two groups of constants can be used to construct * lMode parameter of the following APIs: * Download() * DownloadAsync() * Install() * InstallAsync() * * Obviousely, you can only pick one from each group to make up * lMode parameter. * */ extern const LONG UPDATE_NOTIFICATION_DEFAULT; extern const LONG UPDATE_NOTIFICATION_ANYPROGRESS; extern const LONG UPDATE_NOTIFICATION_COMPLETEONLY; extern const LONG UPDATE_NOTIFICATION_1PCT; extern const LONG UPDATE_NOTIFICATION_5PCT; extern const LONG UPDATE_NOTIFICATION_10PCT; /** * constant can also be used for SetOperationMode() and GetOperationMode() */ extern const LONG UPDATE_MODE_THROTTLE; /** * constant can be used by Download() and DownloadAsync(), which will * tell these API's to use Corporate directory structure for destination folder. */ extern const LONG UPDATE_CORPORATE_MODE; /** * constant can be used by Install() and InstallAsync(). Will disable all * internet related features */ extern const LONG UPDATE_OFFLINE_MODE; /** * constants for SetOperationMode() API */ extern const LONG UPDATE_COMMAND_PAUSE; extern const LONG UPDATE_COMMAND_RESUME; extern const LONG UPDATE_COMMAND_CANCEL; /** * constants for GetOperationMode() API */ extern const LONG UPDATE_MODE_PAUSED; extern const LONG UPDATE_MODE_RUNNING; extern const LONG UPDATE_MODE_NOTEXISTS; /** * constants for SetProperty() and GetProperty() API */ extern const LONG UPDATE_PROP_USECOMPRESSION; extern const LONG UPDATE_PROP_OFFLINEMODE; /** * constants for BrowseForFolder() API * * IUBROWSE_WRITE_ACCESS - validate write access on selected folder * IUBROWSE_AFFECT_UI - write-access validation affect OK button enable/disable * IUBROWSE_NOBROWSE - do not show browse folder dialog box. validate path passed-in only * * default: * pop up browse folder dialog box, not doing any write-access validation * */ extern const LONG IUBROWSE_WRITE_ACCESS; extern const LONG IUBROWSE_AFFECT_UI; extern const LONG IUBROWSE_NOBROWSE; // constants for historical speed registry const TCHAR REGKEY_IUCTL[] = _T("Software\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\IUControl"); const TCHAR REGVAL_HISTORICALSPEED[] = _T("HistoricalSpeed"); // in bytes/sec const TCHAR REGVAL_TIMEELAPSED[] = _T("TimeElapsed"); // in seconds // constant for default downloads folder name const TCHAR IU_WUTEMP[] = _T("WUTemp"); // // Globals for the IUEngine extern LONG g_lThreadCounter; extern HANDLE g_evtNeedToQuit; extern CUrlAgent *g_pUrlAgent; typedef struct IUOPERATIONINFO { TCHAR szOperationUUID[64]; LONG lUpdateMask; BSTR bstrOperationResult; IUOPERATIONINFO *pNext; } IUOPERATIONINFO, *PIUOPERATIONINFO; class COperationMgr { public: COperationMgr(); ~COperationMgr(); BOOL AddOperation(LPCTSTR pszOperationID, LONG lUpdateMask); BOOL RemoveOperation(LPCTSTR pszOperationID); BOOL FindOperation(LPCTSTR pszOperationID, PLONG plUpdateMask, BSTR *pbstrOperationResult); BOOL UpdateOperation(LPCTSTR pszOperationID, LONG lUpdateMask, BSTR bstrOperationResult); private: PIUOPERATIONINFO m_pOperationInfoList; }; // // CEngUpdate class used to export apartment safe instances of the update class to WU clients (iuctl, AU, DU, CDM) // class CEngUpdate { public: CEngUpdate(); ~CEngUpdate(); public: HRESULT WINAPI GetSystemSpec(BSTR bstrXmlClasses, DWORD dwFlags, BSTR *pbstrXmlDetectionResult); HRESULT WINAPI GetManifest(BSTR bstrXmlClientInfo, BSTR bstrXmlSystemSpec, BSTR bstrXmlQuery, DWORD dwFlags, BSTR *pbstrXmlCatalog); HRESULT WINAPI Detect(BSTR bstrXmlCatalog, DWORD dwFlags, BSTR *pbstrXmlItems); HRESULT WINAPI Download(BSTR bstrXmlClientInfo, BSTR bstrXmlCatalog, BSTR bstrDestinationFolder, LONG lMode, IUnknown *punkProgressListener, HWND hWnd, BSTR *pbstrXmlItems); HRESULT WINAPI DownloadAsync(BSTR bstrXmlClientInfo, BSTR bstrXmlCatalog, BSTR bstrDestinationFolder, LONG lMode, IUnknown *punkProgressListener, HWND hWnd, BSTR bstrUuidOperation, BSTR *pbstrUuidOperation); HRESULT WINAPI Install(BSTR bstrXmlClientInfo, BSTR bstrXmlCatalog, BSTR bstrXmlDownloadedItems, LONG lMode, IUnknown *punkProgressListener, HWND hWnd, BSTR *pbstrXmlItems); HRESULT WINAPI InstallAsync(BSTR bstrXmlClientInfo, BSTR bstrXmlCatalog, BSTR bstrXmlDownloadedItems, LONG lMode, IUnknown *punkProgressListener, HWND hWnd, BSTR bstrUuidOperation, BSTR *pbstrUuidOperation); HRESULT WINAPI SetOperationMode(BSTR bstrUuidOperation, LONG lMode); HRESULT WINAPI GetOperationMode(BSTR bstrUuidOperation, LONG* plMode); HRESULT WINAPI GetHistory( BSTR bstrDateTimeFrom, BSTR bstrDateTimeTo, BSTR bstrClient, BSTR bstrPath, BSTR* pbstrLog); HRESULT WINAPI BrowseForFolder(BSTR bstrStartFolder, LONG flag, BSTR* pbstrFolder); HRESULT WINAPI RebootMachine(); private: void WINAPI ShutdownInstanceThreads(); // called in dtor to shut down any outstanding threads public: LONG m_lThreadCounter; HANDLE m_evtNeedToQuit; BOOL m_fOfflineMode; COperationMgr m_OperationMgr; }; // // CDM Internal Exports (called by IUCDM stub cdm.dll) // // // We use a separate Real(tm) global for CDM to hold an instance of the CEngUpdate class, // since it is never multiple instanced. // extern CEngUpdate* g_pCDMEngUpdate; VOID WINAPI InternalDetFilesDownloaded( IN HANDLE hConnection ); BOOL InternalDownloadGetUpdatedFiles( IN PDOWNLOADINFOWIN98 pDownloadInfoWin98, IN OUT LPTSTR lpDownloadPath, IN UINT uSize ); BOOL WINAPI InternalDownloadUpdatedFiles( IN HANDLE hConnection, IN HWND hwnd, IN PDOWNLOADINFO pDownloadInfo, OUT LPWSTR lpDownloadPath, IN UINT uSize, OUT PUINT puRequiredSize ); BOOL WINAPI InternalFindMatchingDriver( IN HANDLE hConnection, IN PDOWNLOADINFO pDownloadInfo, OUT PWUDRIVERINFO pWuDriverInfo ); VOID WINAPI InternalLogDriverNotFound( IN HANDLE hConnection, IN LPCWSTR lpDeviceInstanceID, IN DWORD dwFlags ); int WINAPI InternalQueryDetectionFiles( IN HANDLE hConnection, IN void* pCallbackParam, IN PFN_QueryDetectionFilesCallback pCallback ); void InternalSetGlobalOfflineFlag( IN BOOL fOfflineMode ); // // GetSystemSpec functionality exported for use by CDM // class CXmlSystemSpec; HRESULT AddComputerSystemClass(CXmlSystemSpec& xmlSpec); HRESULT AddRegKeyClass(CXmlSystemSpec& xmlSpec); HRESULT AddPlatformClass(CXmlSystemSpec& xmlSpec, IU_PLATFORM_INFO iuPlatformInfo); HRESULT AddLocaleClass(CXmlSystemSpec& xmlSpec, BOOL fIsUser); HRESULT AddDevicesClass(CXmlSystemSpec& xmlSpec, IU_PLATFORM_INFO iuPlatformInfo, BOOL fIsSysSpecCall); // // Misc. functionality // extern LONG g_lDoOnceOnLoadGuard; void WINAPI DeleteExpiredDownloadFolders(); HRESULT WINAPI CreateGlobalCDMEngUpdateInstance(); HRESULT WINAPI DeleteGlobalCDMEngUpdateInstance(); void WINAPI ShutdownThreads(); // called by UnlockEnginge -- maintains backwards CDM compatibility void WINAPI ShutdownGlobalThreads(); // called to shut down any outstanding global threads #endif // __IUENGINE_H_