|
|
#include <windows.h>
#include <setupapi.h>
#include <shlwapi.h>
#include <devguid.h>
#include <regstr.h>
#include <stdio.h>
#include <lmcons.h>
#include <wininet.h>
#include <fdi.h>
#include <wuv3.h>
#include <varray.h>
#include <v3stdlib.h>
#include <filecrc.h>
#include <newtrust.h>
#include "log.h"
#include "v3server.h"
#include "dynamic.h"
#include "MultiSZArray.h"
#define DU_STATUS_SUCCESS 1
#define DU_STATUS_ABORT 2
#define DU_STATUS_FAILED 3
#define WM_DYNAMIC_UPDATE_COMPLETE WM_APP + 1000 + 1000
// (WPARAM) Completion Status (SUCCESS, ABORTED, FAILED) : (LPARAM) (DWORD) Error Code if Status Failed
#define WM_DYNAMIC_UPDATE_PROGRESS WM_APP + 1000 + 1001
// (WPARAM) (DWORD) TotalDownloadSize : (LPARAM) (DWORD) BytesDownloaded
#define DU_CONNECTION_RETRY 2
// REMOVE THIS when checked into Whistler Tree .. Personal Should be Defined.
#ifndef VER_SUITE_PERSONAL
#define VER_SUITE_PERSONAL 0x00000200
#endif
// RogerJ --- the next part of this header file contains information for avoid autodisconnection
//
#define WM_DIALMON_FIRST WM_USER+100
#define WM_WINSOCK_ACTIVITY WM_DIALMON_FIRST + 0
static const char c_szDialmonClass[] = "MS_WebcheckMonitor"; // DONE
#define DU_PINGBACK_DOWNLOADSTATUS 0
#define DU_PINGBACK_DRIVERNOTFOUND 1
#define DU_PINGBACK_SETUPDETECTIONFAILED 2
#define DU_PINGBACK_DRIVERDETECTIONFAILED 3
#define sizeOfArray(a) (sizeof(a) / sizeof(a[0]))
#define SafeGlobalFree(x) if (NULL != x) { GlobalFree(x); x = NULL; }
#define SafeInternetCloseHandle(x) if (NULL != x) { InternetCloseHandle(x); x = NULL; }
#define SafeCloseHandle(x) if (INVALID_HANDLE_VALUE != x) { CloseHandle(x); x = INVALID_HANDLE_VALUE; }
void WINAPI SetEstimatedDownloadSpeed(DWORD dwBytesPerSecond); HANDLE WINAPI DuInitializeA(IN LPCSTR pszBasePath, IN LPCSTR pszTempPath, IN POSVERSIONINFOEXA posviTargetOS, IN LPCSTR pszTargetArch, IN LCID lcidTargetLocale, IN BOOL fUnattend, IN BOOL fUpgrade, IN PWINNT32QUERY pfnWinnt32QueryCallback); BOOL WINAPI DuDoDetection(IN HANDLE hConnection, OUT PDWORD pdwEstimatedTime, OUT PDWORD pdwEstimatedSize); BOOL WINAPI DuBeginDownload(IN HANDLE hConnection, IN HWND hwndNotify); void WINAPI DuAbortDownload(IN HANDLE hConnection); void WINAPI DuUninitialize(IN HANDLE hConnection);
// fdi.cpp
BOOL fdi(char *cabinet_fullpath, char *directory);
typedef struct DOWNLOADITEM { char mszFileList[2048]; // MultiSZ list of Cabs to Download
DWORD dwTotalFileSize; DWORD dwBytesDownload; int iCurrentCab; int iNumberOfCabs; BOOL fComplete; PUID puid;
DOWNLOADITEM *pNext; DOWNLOADITEM *pPrev; } DOWNLOADITEM;
typedef struct DOWNLOADTHREADPROCINFO { char szLocalFile[MAX_PATH]; BOOL fCheckTrust; BOOL fDecompress; HWND hwndNotify; HINTERNET hInternet; } DOWNLOADTHREADPROCINFO, *PDOWNLOADTHREADPROCINFO;
class CDynamicUpdate { public: CDynamicUpdate(int iPlatformID, LCID lcidLocaleID, WORD wPlatformSKU, LPCSTR pszTempPath, LPCSTR pszDownloadPath, PWINNT32QUERY pfnWinnt32QueryCallback, POSVERSIONINFOEXA pVersionInfo); ~CDynamicUpdate();
public: BOOL DoDriverDetection(void); BOOL IsHardwareIdHasDriversOnCD(LPCSTR pszHardwareIdList); BOOL DoWindowsUpdateDriverDetection(void); BOOL DoPrinterDriverDetection(void); DWORD DoSetupUpdateDetection(void);
public: // Class Member Access Functions
LPCSTR GetDuTempPath(); LPCSTR GetDuDownloadPath(); LPCSTR GetDuServerUrl(); int GetTargetPlatformID(); LCID GetTargetLocaleID(); void SetCallbackHWND(HWND hwnd); void SetAbortDownload(BOOL fAbort);
// Helper Functions
LPSTR DuUrlCombine(LPSTR pszDest, LPCSTR pszBase, LPCSTR pszAdd);
// Download Funcntions
DWORD DownloadFilesAsync(); DWORD DownloadFile(LPCSTR pszDownloadUrl, LPCSTR pszLocalFile, BOOL fDecompress, BOOL fCheckTrust); DWORD DownloadFileToMem(LPCSTR pszDownloadUrl, PBYTE *lpBuffer, DWORD *pdwAllocatedLength, BOOL fDecompress, LPSTR pszFileName, LPSTR pszDecompresedFileName); DWORD AsyncDownloadProc(); DWORD PingBack(int iPingBackType, PUID puid, LPCSTR pszPnPID, BOOL fSucceeded); // Download Item Management Functions
void AddDownloadItemToList(DOWNLOADITEM *pDownloadItem); void RemoveDownloadItemFromList(DOWNLOADITEM *pDownloadItem); void ClearDownloadItemList(); void UpdateDownloadItemSize(); void EnterDownloadListCriticalSection(); void LeaveDownloadListCriticalSection(); BOOL NeedRetry(DWORD dwErrCode);
// Language Fix Up Helpers (BUG: 435184) Need to map Some Languages from XP LCID's to V3 LCID's.
void FixUpV3LocaleID();
// Download Helper Functions
DWORD OpenHttpConnection(LPCSTR pszDownloadUrl, BOOL fGetRequest); BOOL IsServerFileNewer(FILETIME ft, DWORD dwServerFileSize, LPCSTR pszLocalFile);
public: CV31Server *m_pV3;
int m_iPlatformID; LCID m_lcidLocaleID; WORD m_wPlatformSKU; char m_szTempPath[MAX_PATH]; char m_szDownloadPath[MAX_PATH]; char m_szServerUrl[INTERNET_MAX_URL_LENGTH + 1]; // This is the core list of files that we will download. It contains all the setup
// update items, and all the drivers that are going to be downloaded.
DOWNLOADITEM *m_pDownloadItemList; DWORD m_dwCurrentBytesDownloaded; DWORD m_dwDownloadItemCount; DWORD m_dwTotalDownloadSize; DWORD m_dwDownloadSpeedInBytesPerSecond;
HWND m_hwndClientNotify; DWORD m_dwLastPercentComplete; BOOL m_fAbortDownload; CRITICAL_SECTION m_cs; CRITICAL_SECTION m_csDownload; OSVERSIONINFOEX m_VersionInfo;
// RogerJ, this is the multi-sz array used for driver detection
CMultiSZArray m_arrayHardwareId;
// Download Connection Handles
HINTERNET m_hInternet; HINTERNET m_hConnect; HINTERNET m_hOpenRequest;
char m_szCurrentConnectedServer[INTERNET_MAX_URL_LENGTH];
// RogerJ October 5th, 2000
// call back function pointer
PWINNT32QUERY m_pfnWinNT32Query; HANDLE m_hDownloadThreadProc; };
|