Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

193 lines
4.5 KiB

//+-------------------------------------------------------------------------
//
// 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();