//======================================================================= // // Copyright (c) 2001 Microsoft Corporation. All Rights Reserved. // // File: wuaulib.h // // Creator: PeterWi // // Purpose: library function declarations. // //======================================================================= #pragma once #include #include #include #include "WUTestKeys.h" #define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0])) // Defs for boolean AU options #define AUOPTION_UNSPECIFIED 0 #define AUOPTION_AUTOUPDATE_DISABLE 1 #define AUOPTION_PREDOWNLOAD_NOTIFY 2 #define AUOPTION_INSTALLONLY_NOTIFY 3 #define AUOPTION_SCHEDULED 4 #define AUOPTION_ADMIN_MIN AUOPTION_AUTOUPDATE_DISABLE #define AUOPTION_DOMAIN_MIN AUOPTION_PREDOWNLOAD_NOTIFY #define AUOPTION_MAX AUOPTION_SCHEDULED // download status #define DWNLDSTATUS_NOT_DOWNLOADING 0 #define DWNLDSTATUS_DOWNLOADING 1 #define DWNLDSTATUS_PAUSED 2 #define DWNLDSTATUS_CHECKING_CONNECTION 3 //////////////////////Client (WUAUCLT) exit codes ////////////////////////// #define CDWWUAUCLT_UNSPECIFY -1 #define CDWWUAUCLT_OK 1000 #define CDWWUAUCLT_RELAUNCHNOW 1001 #define CDWWUAUCLT_RELAUNCHLATER 1002 //ask service to launch client #define CDWWUAUCLT_ENDSESSION 1003 // user logs off or system shuts down #define CDWWUAUCLT_FATAL_ERROR 1004 #define CDWWUAUCLT_INSTALLNOW 1005 #define CDWWUAUCLT_REBOOTNOW 1007 #define CDWWUAUCLT_REBOOTLATER 1008 #define CDWWUAUCLT_REBOOTNEEDED 1009 //user hasn't made decision as weather to reboot or not #define CDWWUAUCLT_REBOOTTIMEOUT 1010 //reboot warning dialog times out //////////////////////No Active Admin Session found////////////////////////// #define DWNO_ACTIVE_ADMIN_SESSION_FOUND -1 // No Active Admin Session Found #define DWNO_ACTIVE_ADMIN_SESSION_SERVICE_FINISHED -2 // No Active Admin Sesion found due to Service Finishing or because caller routine needs to finish service #define DWSYSTEM_ACCOUNT -3 class AU_ENV_VARS { public: static const int s_AUENVVARCOUNT = 4; static const int s_AUENVVARBUFSIZE = 100; BOOL m_fRebootWarningMode ; //regular mode otherwise BOOL m_fEnableYes; //for reboot warning dialog BOOL m_fEnableNo; //for reboot warning dialog TCHAR m_szClientExitEvtName[s_AUENVVARBUFSIZE]; public: BOOL ReadIn(void); BOOL WriteOut(LPTSTR szEnvBuf, //at least size of 4*AUEVVARBUFSIZE size_t IN cchEnvBuf, BOOL IN fRebootWarningMode, BOOL IN fEnableYes = TRUE, BOOL IN fEnableNo = TRUE, LPCTSTR IN szClientExitEvtName = NULL); private: static const LPCTSTR s_AUENVVARNAMES[s_AUENVVARCOUNT]; HRESULT GetStringValue(int index, LPTSTR buf, DWORD dwCchSize); BOOL GetBOOLEnvironmentVar(LPCTSTR szEnvVar, BOOL *pfVal); BOOL GetStringEnvironmentVar(LPCTSTR szzEnvVar, LPTSTR szBuf, DWORD dwSize); }; //////////////// The following functions are all called from the outside! /////////////////////// ///////////////////////////////////////////////////////////////////// // cfreg.cpp - Functions to handle registry keys ///////////////////////////////////////////////////////////////////// BOOL fRegKeyCreate(LPCTSTR tszKey, DWORD dwOptions); BOOL fRegKeyExists(LPCTSTR tszSubKey, HKEY hRootKey = HKEY_LOCAL_MACHINE); inline HRESULT String2FileTime(LPCTSTR pszDateTime, FILETIME *pft) { SYSTEMTIME st; HRESULT hr = String2SystemTime(pszDateTime, &st); if ( SUCCEEDED(hr) ) { if ( !SystemTimeToFileTime(&st, pft) ) { hr = HRESULT_FROM_WIN32(GetLastError()); } } return hr; } inline HRESULT FileTime2String(FILETIME & ft, LPTSTR pszDateTime, size_t cchSize) { SYSTEMTIME st; HRESULT hr; if ( !FileTimeToSystemTime(&ft, &st) ) { hr = HRESULT_FROM_WIN32(GetLastError()); } else { hr = SystemTime2String(st, pszDateTime, cchSize); } return hr; } BOOL FHiddenItemsExist(); HRESULT setAddedTimeout(DWORD timeout, LPCTSTR strkey); HRESULT getAddedTimeout(DWORD *pdwTimeDiff, LPCTSTR strkey); extern const TCHAR AUREGKEY_REBOOT_REQUIRED[]; // = _T("Software\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\RebootRequired"); inline BOOL fSetRebootFlag(void) { return fRegKeyCreate(AUREGKEY_REBOOT_REQUIRED, REG_OPTION_VOLATILE); } inline BOOL fRegKeyDelete(LPCTSTR tszKey) { return (ERROR_SUCCESS == RegDeleteKey(HKEY_LOCAL_MACHINE, tszKey)); } inline BOOL fCheckRebootFlag(void) { return fRegKeyExists(AUREGKEY_REBOOT_REQUIRED); } ///////////////////////////////////////////////////////////////////// // helpers.cpp ///////////////////////////////////////////////////////////////////// DWORD getTimeOut(); int TimeDiff(SYSTEMTIME tm1, SYSTEMTIME tm2); HRESULT TimeAddSeconds(SYSTEMTIME tmBase, int iSeconds, SYSTEMTIME* pTimeNew); inline void setTimeOut(DWORD dwTimeOut) { SetRegDWordValue(_T("TimeOut"), dwTimeOut); } BOOL IsRTFDownloaded(BSTR bstrRTFPath, LANGID langid); BOOL FHiddenItemsExist(void); BOOL RemoveHiddenItems(void); void DisableUserInput(HWND hwnd); BOOL Hours2LocalizedString(SYSTEMTIME *pst, LPTSTR ptszBuffer, DWORD cbSize); BOOL FillHrsCombo(HWND hwnd, DWORD dwSchedInstallTime); BOOL FillDaysCombo(HINSTANCE hInstance, HWND hwnd, DWORD dwSchedInstallDay, UINT uMinResId, UINT uMaxResId); BOOL fAccessibleToAU(void); BOOL IsWin2K(void); extern const LPTSTR HIDDEN_ITEMS_FILE; ////////////////////////////////////////////////////////////////////////////////////// // platform.cpp ////////////////////////////////////////////////////////////////////////////////////// void GetOSName(LPTSTR _szOSName); UINT DetectPlatformID(void); HRESULT GetOSVersionStr(LPTSTR tszbuf, UINT uSize); BOOL fIsPersonalOrProfessional(void); HRESULT GetFileVersionStr(LPCTSTR tszFile, LPTSTR tszbuf, UINT uSize); const TCHAR g_szPropDialogPtr[] = TEXT("AutoUpdateProp_DialogPtr"); const TCHAR g_szHelpFile[] = _T("wuauhelp.chm::/auw2ktt.txt"); //TEXT("sysdm.hlp"); //used on both w2k and xp. const TCHAR gtszAUOverviewUrl[] = _T("wuauhelp.chm"); //default const TCHAR gtszAUW2kSchedInstallUrl[] = _T("wuauhelp.chm::/w2k_autoupdate_sched.htm"); const TCHAR gtszAUXPSchedInstallUrl[] = _T("wuauhelp.chm::/autoupdate_sched.htm"); ////////////////////////////////////////////////////////////////////////////////////// // DEBUG STUFF // ////////////////////////////////////////////////////////////////////////////////////// #ifdef DBG //===== DBG ========================================================================== void _cdecl WUAUTrace(char* pszFormat, ...); #define DEBUGMSG WUAUTrace inline BOOL fAUAssertBreak(void) { static DWORD dwVal = -1; if (-1 != dwVal) { return 1 == dwVal; } if (FAILED(GetRegDWordValue(_T("AssertBreak"), &dwVal))) { //if key is not there, don't read again and again dwVal = 0; } return 1 == dwVal; } #define AUASSERT(x) { if (!(x) && fAUAssertBreak()) DebugBreak();} #else // !DBG //===== !DBG ========================================================================== inline void _cdecl WUAUTrace(char* , ...) {} #define DEBUGMSG WUAUTrace #define AUASSERT(x) #endif // DBG //=====================================================================================