194 lines
4.3 KiB
C
194 lines
4.3 KiB
C
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 2000
|
||
|
//
|
||
|
// File: wuaueng.h
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#pragma once
|
||
|
#include <windows.h>
|
||
|
#include <wchar.h>
|
||
|
#include <tchar.h>
|
||
|
#include <ole2.h>
|
||
|
#include <setupapi.h>
|
||
|
#include <wininet.h>
|
||
|
#include <inseng.h>
|
||
|
//#include <newtrust.h>
|
||
|
#include <malloc.h>
|
||
|
#include <stddef.h>
|
||
|
//#include <atlconv.h>
|
||
|
#include <wuaustate.h>
|
||
|
#include "wuaulib.h"
|
||
|
#include "AUSessions.h"
|
||
|
|
||
|
#include <URLLogging.h>
|
||
|
|
||
|
#define AUSCHEDINSTALLDAY_MIN 0
|
||
|
#define AUSCHEDINSTALLDAY_MAX 7
|
||
|
#define AUSCHEDINSTALLTIME_MIN 0
|
||
|
#define AUSCHEDINSTALLTIME_MAX 23
|
||
|
|
||
|
typedef struct tagWORKER_THREAD_INIT_DATA
|
||
|
{
|
||
|
UINT uFirstMsg;
|
||
|
BOOL fWaitB4Detect;
|
||
|
DWORD dwWaitB4Detect;
|
||
|
} WORKER_THREAD_INIT_DATA;
|
||
|
|
||
|
|
||
|
#define E_NOCONNECTION HRESULT_FROM_WIN32(ERROR_CONNECTION_UNAVAIL)
|
||
|
|
||
|
HRESULT SelfUpdate(void);
|
||
|
HRESULT CheckForUpdatedComponents(BOOL *pfInstalledWUAUENG);
|
||
|
HRESULT InstallFromCIF(LPCTSTR pstrCifCab, LPCTSTR pstrDownloadDir, LPCTSTR pstrWhich);
|
||
|
|
||
|
/////////////////////////////////////////////////////////
|
||
|
// Status ping information
|
||
|
/////////////////////////////////////////////////////////
|
||
|
class PingStatus: public CUrlLog //group together status ping functions
|
||
|
{
|
||
|
public:
|
||
|
inline PingStatus(void):CUrlLog(_T("au"), NULL, NULL){}
|
||
|
|
||
|
void ReadLiveServerUrlFromIdent(void);
|
||
|
void PingDetectionSuccess(
|
||
|
BOOL fOnline,
|
||
|
UINT cItems);
|
||
|
void PingDetectionFailure(
|
||
|
BOOL fOnline,
|
||
|
DWORD dwError,
|
||
|
LPCTSTR ptszMessage = NULL);
|
||
|
void PingDownload(
|
||
|
BOOL fOnline,
|
||
|
URLLOGSTATUS status,
|
||
|
DWORD dwError,
|
||
|
LPCTSTR ptszItemID = NULL,
|
||
|
LPCTSTR ptszDeviceID = NULL,
|
||
|
LPCTSTR ptszMessage = NULL);
|
||
|
void PingSelfUpdate(
|
||
|
BOOL fOnline,
|
||
|
URLLOGSTATUS status,
|
||
|
DWORD dwError);
|
||
|
void PingDeclinedItem(
|
||
|
BOOL fOnline,
|
||
|
URLLOGACTIVITY activity,
|
||
|
LPCTSTR ptszItemID);
|
||
|
|
||
|
|
||
|
private:
|
||
|
//----------------------------------------------------------------------
|
||
|
//
|
||
|
// private function to gather common info and perform ping
|
||
|
//
|
||
|
//----------------------------------------------------------------------
|
||
|
void _Ping(
|
||
|
BOOL fOnline,
|
||
|
URLLOGACTIVITY activity,
|
||
|
URLLOGSTATUS status,
|
||
|
DWORD dwError,
|
||
|
LPCTSTR ptszMessage,
|
||
|
LPCTSTR ptszItemID,
|
||
|
LPCTSTR ptszDeviceID);
|
||
|
};
|
||
|
|
||
|
|
||
|
#define IDOWNLOAD_COMPLETE_EVT 0
|
||
|
#define IDOWNLOAD_TRANSIENT_ERROR_EVT 1
|
||
|
#define IDOWNLOAD_DOWNLOAD_IN_PROGRESS 2
|
||
|
#define IDOWNLOAD_SERVICE_FINISH 3
|
||
|
#define IDOWNLOAD_SERVICE_DISABLED 4
|
||
|
#define IDOWNLOAD_DOWNLOAD_CANCELED 5
|
||
|
|
||
|
#define IDOWNLOAD_MESSAGE 6
|
||
|
#define CNUM_DOWNLOAD_EVT 6
|
||
|
|
||
|
extern HANDLE ghServiceFinished;
|
||
|
extern HANDLE ghEngineState;
|
||
|
extern HANDLE ghServiceDisabled;
|
||
|
extern HANDLE ghValidateCatalog;
|
||
|
extern HANDLE ghNotifyClient;
|
||
|
extern HANDLE ghWorkerThreadMsgQueueCreation;
|
||
|
extern CLIENT_NOTIFY_DATA gClientNotifyData;
|
||
|
extern DWORD gdwWorkerThreadId;
|
||
|
extern SESSION_STATUS gAdminSessions;
|
||
|
extern PingStatus gPingStatus;
|
||
|
|
||
|
|
||
|
typedef struct _ENGINE_EVENTS
|
||
|
{
|
||
|
public:
|
||
|
void CloseEvents(void)
|
||
|
{
|
||
|
//Don't close the ServiceFinish handle and EngineState events
|
||
|
m_grEvents[IDOWNLOAD_SERVICE_FINISH] = NULL;
|
||
|
m_grEvents[IDOWNLOAD_SERVICE_DISABLED] = NULL;
|
||
|
|
||
|
for ( int i = 0; i < CNUM_DOWNLOAD_EVT; i++)
|
||
|
{
|
||
|
SafeCloseHandleNULL(m_grEvents[i]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL CreateEvents(void)
|
||
|
{
|
||
|
BOOL fRet = TRUE;
|
||
|
ZeroMemory(m_grEvents, sizeof(m_grEvents));
|
||
|
|
||
|
m_grEvents[IDOWNLOAD_SERVICE_FINISH] = ghServiceFinished;
|
||
|
m_grEvents[IDOWNLOAD_SERVICE_DISABLED] = ghServiceDisabled;
|
||
|
|
||
|
for ( int i = 0; i < CNUM_DOWNLOAD_EVT; i++)
|
||
|
{
|
||
|
if ( IDOWNLOAD_SERVICE_FINISH != i && IDOWNLOAD_SERVICE_DISABLED != i )
|
||
|
{
|
||
|
if ( NULL == (m_grEvents[i] = CreateEvent(NULL, FALSE, FALSE, NULL)) )
|
||
|
{
|
||
|
CloseEvents();
|
||
|
fRet = FALSE;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return fRet;
|
||
|
}
|
||
|
|
||
|
void SetEvent(ULONG iEvent)
|
||
|
{
|
||
|
if ( (iEvent < CNUM_DOWNLOAD_EVT) && (NULL != m_grEvents[iEvent]) )
|
||
|
{
|
||
|
::SetEvent(m_grEvents[iEvent]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ULONG cEvents(void)
|
||
|
{
|
||
|
return CNUM_DOWNLOAD_EVT;
|
||
|
}
|
||
|
|
||
|
CONST HANDLE * grEventHandles(void)
|
||
|
{
|
||
|
return m_grEvents;
|
||
|
}
|
||
|
private:
|
||
|
HANDLE m_grEvents[CNUM_DOWNLOAD_EVT];
|
||
|
|
||
|
} ENGINE_EVENTS;
|
||
|
|
||
|
//defined in wuaueng.cpp
|
||
|
HRESULT HrCreateNewCatalog(void);
|
||
|
void CancelDownload(void);
|
||
|
void ResumeDownloadIfNeccesary(void);
|
||
|
HRESULT UpdateProc(WORKER_THREAD_INIT_DATA &initData);
|
||
|
DWORD RandomWaitTimeBeforeDetect();
|
||
|
|
||
|
|
||
|
//defined in service.cpp
|
||
|
BOOL FDownloadIsPaused();
|
||
|
|
||
|
|
||
|
|