391 lines
7.5 KiB
C
391 lines
7.5 KiB
C
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dynupdt.h
|
|
|
|
Abstract:
|
|
|
|
Interface for code that implements the Dynamic Update feature of Winnt32.
|
|
|
|
Author:
|
|
|
|
Ovidiu Temereanca (ovidiut) 06-Jul-2000
|
|
|
|
Revision History:
|
|
|
|
<alias> <date> <comment>
|
|
|
|
--*/
|
|
|
|
|
|
#define DynUpdtLogLevel Winnt32LogInformation
|
|
|
|
|
|
#ifdef PRERELEASE
|
|
#define TRY
|
|
#define EXCEPT(e) goto __skip;
|
|
#define _exception_code() 0
|
|
#define END_EXCEPT __skip:;
|
|
#else
|
|
#define TRY __try
|
|
#define EXCEPT(e) __except (e)
|
|
#define END_EXCEPT
|
|
#endif
|
|
|
|
|
|
#define S_DUCTRL_DLL TEXT("wsdu.dll")
|
|
#define S_HWDB_DLL TEXT("hwdb.dll")
|
|
|
|
#define S_REGKEY_MIGRATION_DLLS_WIN9X TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Setup\\Migration DLLs")
|
|
#define S_REGVALUE_DYNUPDT TEXT("DynUpdt")
|
|
|
|
|
|
typedef
|
|
BOOL
|
|
(CALLBACK* PWIN9XGETINCOMPDRVS) (
|
|
OUT PSTR** IncompatibleDrivers
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(CALLBACK* PWIN9XRELEASEINCOMPDRVS) (
|
|
IN PSTR* IncompatibleDrivers
|
|
);
|
|
|
|
typedef enum {
|
|
DUS_INITIAL = 0,
|
|
DUS_SKIP,
|
|
DUS_PREPARING,
|
|
DUS_PREPARING_CONNECTIONUNAVAILABLE,
|
|
DUS_PREPARING_INVALIDURL,
|
|
DUS_DOWNLOADING,
|
|
DUS_DOWNLOADING_ERROR,
|
|
DUS_PROCESSING,
|
|
DUS_SUCCESSFUL,
|
|
DUS_CANCELLED,
|
|
DUS_ERROR,
|
|
DUS_FATALERROR,
|
|
} DUS_STATUS;
|
|
|
|
typedef struct {
|
|
DUS_STATUS DUStatus;
|
|
BOOL Disabled;
|
|
BOOL SupportQueried;
|
|
BOOL SupportPresent;
|
|
BOOL RestartWinnt32;
|
|
BOOL PrepareWinnt32;
|
|
BOOL Winnt32Restarted;
|
|
BOOL Cancelled;
|
|
BOOL PreserveWorkingDir;
|
|
BOOL ForceRemoveWorkingDir;
|
|
PTSTR RestartCmdLine;
|
|
TCHAR RestartAnswerFile[MAX_PATH];
|
|
TCHAR DynamicUpdatesSource[MAX_PATH];
|
|
TCHAR UpdatesPath[MAX_PATH];
|
|
TCHAR UpdatesCabSource[MAX_PATH];
|
|
TCHAR UpdatesCabTarget[MAX_PATH];
|
|
TCHAR DuasmsSource[MAX_PATH];
|
|
TCHAR DuasmsTarget[MAX_PATH];
|
|
TCHAR WorkingDir[MAX_PATH];
|
|
TCHAR DriversSource[MAX_PATH];
|
|
TCHAR SelectedDrivers[MAX_PATH];
|
|
TCHAR GuidrvsInfSource[MAX_PATH];
|
|
BOOL UserSpecifiedUpdates;
|
|
TCHAR Winnt32Path[MAX_PATH];
|
|
TCHAR TempDir[MAX_PATH];
|
|
PSDLIST NewDriversList;
|
|
PSTRINGLIST BootDriverPathList;
|
|
DWORD IncompatibleDriversCount;
|
|
//
|
|
// target OS information
|
|
//
|
|
OSVERSIONINFOEX TargetOsVersion;
|
|
TCHAR TargetPlatform[32]; // "i386", "ia64"
|
|
LCID TargetLCID;
|
|
|
|
//
|
|
// Support libraries stuff
|
|
//
|
|
HWND ProgressWindow;
|
|
|
|
HANDLE DuLib;
|
|
HANDLE Connection;
|
|
|
|
PDUISSUPPORTED DuIsSupported;
|
|
PDUINITIALIZE DuInitialize;
|
|
PDUDODETECTION DuDoDetection;
|
|
PDUQUERYUNSUPDRVS DuQueryUnsupDrvs;
|
|
PDUBEGINDOWNLOAD DuBeginDownload;
|
|
PDUABORTDOWNLOAD DuAbortDownload;
|
|
PDUUNINITIALIZE DuUninitialize;
|
|
|
|
|
|
HANDLE HwdbLib;
|
|
HANDLE HwdbDatabase;
|
|
|
|
PHWDBINITIALIZE HwdbInitialize;
|
|
PHWDBTERMINATE HwdbTerminate;
|
|
PHWDBOPEN HwdbOpen;
|
|
PHWDBCLOSE HwdbClose;
|
|
PHWDBAPPENDINFS HwdbAppendInfs;
|
|
PHWDBFLUSH HwdbFlush;
|
|
PHWDBHASDRIVER HwdbHasDriver;
|
|
PHWDBHASANYDRIVER HwdbHasAnyDriver;
|
|
#ifndef UNICODE
|
|
PWIN9XGETINCOMPDRVS Win9xGetIncompDrvs;
|
|
PWIN9XRELEASEINCOMPDRVS Win9xReleaseIncompDrvs;
|
|
#endif
|
|
|
|
} DYNUPDT_STATUS, *PDYNUPDT_STATUS;
|
|
|
|
extern PDYNUPDT_STATUS g_DynUpdtStatus;
|
|
|
|
|
|
|
|
typedef struct {
|
|
PCTSTR DownloadRoot;
|
|
POSVERSIONINFOEX TargetOsVersion;
|
|
PCTSTR TargetPlatform; // "i386", "ia64"
|
|
LCID TargetLCID;
|
|
BOOL Upgrade;
|
|
PCTSTR* SourceDirs;
|
|
DWORD SourceDirsCount;
|
|
BOOL Unattend;
|
|
PCTSTR AnswerFile;
|
|
HWND ProgressWindow;
|
|
PTSTR TempDir;
|
|
} DYNUPDT_INIT, *PDYNUPDT_INIT;
|
|
|
|
|
|
typedef struct {
|
|
TCHAR BaseDir[MAX_PATH];
|
|
} DYNUPDTSTATUS_INFO, *PDYNUPDTSTATUS_INFO;
|
|
|
|
|
|
typedef struct {
|
|
BOOL ExpressUpgrade; // WelcomeWizPage
|
|
TCHAR OemPid[30]; // OemPid30WizPage
|
|
TCHAR CdPid[30]; // CdPid30WizPage
|
|
} RESTART_DATA, *PRESTART_DATA;
|
|
|
|
extern RESTART_DATA g_RestartData;
|
|
|
|
#define S_DOWNLOAD_ROOT TEXT("setupupd")
|
|
#define S_CABNAME_UPDATES TEXT("updates.cab")
|
|
#define S_CABNAME_UPGINFS TEXT("upginfs.cab")
|
|
#define S_CABNAME_MIGDLLS TEXT("migdlls.cab")
|
|
#define S_CABNAME_WINNT32 TEXT("winnt32.cab")
|
|
#define S_CABNAME_IDENT TEXT("ident.cab")
|
|
#define S_CABNAME_WSDUENG TEXT("wsdueng.cab")
|
|
#define S_CABNAME_DUASMS TEXT("duasms.cab")
|
|
#define S_SUBDIRNAME_UPDATES TEXT("updates")
|
|
#define S_SUBDIRNAME_UPGINFS TEXT("upginfs")
|
|
#define S_SUBDIRNAME_MIGDLLS TEXT("migdlls")
|
|
#define S_SUBDIRNAME_WINNT32 TEXT("winnt32")
|
|
#define S_SUBDIRNAME_DUASMS TEXT("duasms")
|
|
#define S_SUBDIRNAME_TEMP TEXT("temp")
|
|
#define S_SUBDIRNAME_DRIVERS TEXT("dudrvs")
|
|
#define S_SECTIONNAME_UPDATES TEXT("updates")
|
|
#define S_RESTART_TXT TEXT("restart.txt")
|
|
#define S_PATCH_FILE_EXT TEXT("*._p1")
|
|
#define S_HWCOMP_DAT TEXT("hwcomp.dat")
|
|
#define S_GUI_DRIVERS_INF TEXT("guidrvs.inf")
|
|
#define S_SECTION_VERSION TEXT("Version")
|
|
#define S_SECTION_DRIVERS TEXT("Drivers")
|
|
#define S_SECTION_EXCLUDED_DRVS TEXT("ExcludedDrivers")
|
|
#define S_DRIVER_TYPE_KEY TEXT("DriversAreGuiApproved")
|
|
#define S_DU_SYNC_EVENT_NAME TEXT("_WINNT32_DU_")
|
|
//
|
|
// if this file is present in winnt32.cab, Setup will restart unconditionally
|
|
//
|
|
#define S_RESTART_FILENAME TEXT("winnt32.rst")
|
|
//
|
|
// if this file is present in updates.cab, Setup will create a local source directory
|
|
//
|
|
#define S_MAKE_LS_FILENAME TEXT("updates.~ls")
|
|
|
|
#define DYN_DISKSPACE_PADDING 10000000
|
|
|
|
BOOL
|
|
DynamicUpdateInitialize (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DynamicUpdateUninitialize (
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
DynamicUpdateBuildDefaultPaths (
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
DynamicUpdateIsSupported (
|
|
IN HWND ParentWnd
|
|
);
|
|
|
|
BOOL
|
|
__inline
|
|
DynamicUpdateSuccessful (
|
|
VOID
|
|
)
|
|
{
|
|
return g_DynUpdtStatus && g_DynUpdtStatus->DUStatus == DUS_SUCCESSFUL;
|
|
}
|
|
|
|
DWORD
|
|
WINAPI
|
|
DoDynamicUpdate (
|
|
LPVOID Parameter
|
|
);
|
|
|
|
BOOL
|
|
DynamicUpdateInitDownload (
|
|
IN HWND hNotifyWnd
|
|
);
|
|
|
|
BOOL
|
|
DynamicUpdateStart (
|
|
OUT PDWORD TotalEstimatedTime,
|
|
OUT PDWORD TotalEstimatedSize
|
|
);
|
|
|
|
VOID
|
|
DynamicUpdateCancel (
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
DynamicUpdateProcessFiles (
|
|
OUT PBOOL StopSetup
|
|
);
|
|
|
|
BOOL
|
|
DynamicUpdateWriteParams (
|
|
IN PCTSTR ParamsFile
|
|
);
|
|
|
|
BOOL
|
|
DynamicUpdatePrepareRestart (
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
Winnt32Restarted (
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
Winnt32RestartedWithAF (
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
WINAPI
|
|
Winnt32DuIsSupported (
|
|
VOID
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(WINAPI* PWINNT32DUISSUPPORTED) (
|
|
IN PCTSTR* SourceDirs,
|
|
IN DWORD Count
|
|
);
|
|
|
|
|
|
BOOL
|
|
WINAPI
|
|
Winnt32DuInitialize (
|
|
IN PDYNUPDT_INIT InitData
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(WINAPI* PWINNT32DUINITIALIZE) (
|
|
IN PDYNUPDT_INIT InitData
|
|
);
|
|
|
|
|
|
BOOL
|
|
WINAPI
|
|
Winnt32DuInitiateGetUpdates (
|
|
OUT PDWORD TotalEstimatedTime,
|
|
OUT PDWORD TotalEstimatedSize
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(WINAPI* PWINNT32DUINITIATEGETUPDATES) (
|
|
OUT PDWORD TotalEstimatedTime,
|
|
OUT PDWORD TotalEstimatedSize
|
|
);
|
|
|
|
|
|
VOID
|
|
WINAPI
|
|
Winnt32DuCancel (
|
|
VOID
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(WINAPI* PWINNT32DUCANCEL) (
|
|
VOID
|
|
);
|
|
|
|
|
|
BOOL
|
|
WINAPI
|
|
Winnt32DuProcessFiles (
|
|
OUT PBOOL StopSetup
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(WINAPI* PWINNT32DUPROCESSFILES) (
|
|
);
|
|
|
|
|
|
BOOL
|
|
WINAPI
|
|
Winnt32DuWriteParams (
|
|
IN PCTSTR ParamsFile
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(WINAPI* PWINNT32DUWRITEPARAMS) (
|
|
IN PCTSTR ParamsFile
|
|
);
|
|
|
|
|
|
VOID
|
|
WINAPI
|
|
Winnt32DuUninitialize (
|
|
VOID
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(WINAPI* PWINNT32DUUNINITIALIZE) (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
BuildSifName (
|
|
IN PCTSTR CabName,
|
|
OUT PTSTR SifName
|
|
);
|
|
|
|
BOOL
|
|
ProcessDownloadedFiles (
|
|
OUT PBOOL StopSetup
|
|
);
|
|
|