windows-nt/Source/XPSP1/NT/enduser/windows.com/wuau/wuaulib/wuaulib.h
2020-09-26 16:20:57 +08:00

218 lines
7.2 KiB
C++

//=======================================================================
//
// Copyright (c) 2001 Microsoft Corporation. All Rights Reserved.
//
// File: wuaulib.h
//
// Creator: PeterWi
//
// Purpose: library function declarations.
//
//=======================================================================
#pragma once
#include <tchar.h>
#include <wchar.h>
#include <timeutil.h>
#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
//=====================================================================================