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.
 
 
 
 
 
 

328 lines
15 KiB

//***************************************************************************
//* Copyright (c) Microsoft Corporation 1995. All rights reserved. *
//***************************************************************************
//* *
//* ADVPACK.H - Self-extracting/Self-installing stub. *
//* *
//***************************************************************************
// Check out different levels of quiet mode.
#ifndef _ADVPACK_H_
#define _ADVPACK_H_
//***************************************************************************
//* INCLUDE FILES *
//***************************************************************************
#include <shlobj.h>
#include <shellapi.h>
#include "res.h"
#include "advpub.h"
#include "sdsutils.h"
//***************************************************************************
//* DEFINES *
//***************************************************************************
#define ADVPACK_VERSION 205 // Format: MajorVer*100+MinorVer
#define BIG_STRING 512
#define BUF_1K 1024
#define MAX_INFLINE 256
#define SHFREE_ORDINAL 195 // Required for BrowseForDir
#define _OSVER_WIN95 0
#define _OSVER_WINNT3X 1
#define _OSVER_WINNT40 2
#define _OSVER_WINNT50 3
#define _OSVER_WINNT51 4
//#define MAXERRORCHECK
// define quiet modes
#define QUIETMODE_ALL 0x0001
#define QUIETMODE_SHOWMSG 0x0002
// Flags specified in advanced INF file
#define FLAG_VALUE 0x0001 // Bit 0
#define FLAG_FAIL 0x0002 // Bit 1
#define FLAG_QUIET 0x0004 // Bit 2
#define FLAG_NOSTRIP 0x0008 // Bit 3
#define FLAG_NODIRCHECK 0x0010 // Bit 4
#define FLAG_FAIL_NOT 0x0020 // Bit 5
#define FLAG_STRIPAFTER_FIRST 0x0040
#define DEFAULT_FLAGS FLAG_VALUE
// Flags specifying how to set the LDID
#define LDID_SFN 0x0001 // Bit 0
#define LDID_OEM_CHARS 0x0002 // Bit 1
#define LDID_SFN_NT_ALSO 0x0004 // Bit 2
// Setup engine types
#define ENGINE_SETUPAPI 0
#define ENGINE_SETUPX 1
// CoreInstall() flags
#define COREINSTALL_PROMPT 0x0001 // Bit 0
#define COREINSTALL_GRPCONV 0x0002 // Bit 1
#define COREINSTALL_SMARTREBOOT 0x0004 // Bit 2
#define COREINSTALL_BKINSTALL 0x0008
#define COREINSTALL_ROLLBACK 0x0010
#define COREINSTALL_REBOOTCHECKONINSTALL 0x0020
#define COREINSTALL_ROLLBKDOALL 0x0040
#define COREINSTALL_DELAYREGISTEROCX 0x0080
#define COREINSTALL_SETUPAPI 0x0100
#define COREINSTALL_DELAYREBOOT 0x0200
#define COREINSTALL_DELAYPOSTCMD 0x0400
// Cleanup bitfield
#define CLEN_REMVINF 0x0001
// registeries for store save/restore info
//
#define REGKEY_SAVERESTORE "Software\\Microsoft\\Advanced INF Setup"
#define REGSUBK_REGBK "RegBackup"
#define REGSUBK_CATALOGS "Catalogs"
#define REGVAL_BKDIR "BackupPath"
#define REGVAL_BKSIZE "BackupFileSize"
#define REGVAL_BKFILE "BackupFileName"
#define REGVAL_BKINSTCAB "InstallCabFile"
#define REGVAL_BKINSTINF "InstallINFFile"
#define REGVAL_BKINSTSEC "InstallINFSection"
#define REGVAL_BKREGDATA "BackupRegistry"
#define REGVAL_BKMODVER "ComponentVersion"
#define DEF_BACKUPPATH "Uninstall Information" // default fullpath: PROGRAMFILES\backup information\<module>
// registeries for system pathes
#define REGVAL_SM_ACCESSORIES "SM_AccessoriesName"
#define REGVAL_PF_ACCESSORIES "PF_AccessoriesName"
#define REGVAL_PROGRAMFILESPATH "ProgramFilesPath"
#define REGVAL_PROGRAMFILES "ProgramFilesDir"
//***************************************************************************
//* TYPE DEFINITIONS *
//***************************************************************************
// Required for BrowseForDir()
typedef WINSHELLAPI HRESULT (WINAPI *SHGETSPECIALFOLDERLOCATION)(HWND, int, LPITEMIDLIST *);
typedef WINSHELLAPI LPITEMIDLIST (WINAPI *SHBROWSEFORFOLDER)(LPBROWSEINFO);
typedef WINSHELLAPI void (WINAPI *SHFREE)(LPVOID);
typedef WINSHELLAPI BOOL (WINAPI *SHGETPATHFROMIDLIST)( LPCITEMIDLIST, LPSTR );
// Args passed to directory dialog
typedef struct _DIRDLGPARMS {
LPSTR lpszPromptText;
LPSTR lpszDefault;
LPSTR lpszDestDir;
ULONG cbDestDirSize;
DWORD dwInstNeedSize;
} DIRDLGPARMS, *PDIRDLGPARMS;
// list of INF Install Section key names
typedef struct _INFOPT {
PCSTR pszInfKey;
} INFOPT, *PINFOPT;
// OCX data struct
typedef struct _REGOCXData {
PSTR pszOCX;
PSTR pszSwitch;
PSTR pszParam;
} REGOCXDATA, *PREGOCXDATA;
typedef UINT (WINAPI *MYFILEQUEUECALLBACK)( PVOID Context,UINT Notification,UINT_PTR parm1,UINT_PTR parm2 );
typedef struct tagVERHEAD {
WORD wTotLen;
WORD wValLen;
WORD wType; /* always 0 */
WCHAR szKey[(sizeof("VS_VERSION_INFO")+3)&~03];
VS_FIXEDFILEINFO vsf;
} VERHEAD ;
//***************************************************************************
//* MACRO DEFINITIONS *
//***************************************************************************
#define MsgBox( hWnd, nMsgID, uIcon, uButtons ) \
MsgBox2Param( hWnd, nMsgID, NULL, NULL, uIcon, uButtons )
#define MsgBox1Param( hWnd, nMsgID, szParam, uIcon, uButtons ) \
MsgBox2Param( hWnd, nMsgID, szParam, NULL, uIcon, uButtons )
#define ErrorMsg( hWnd, nMsgID ) \
MsgBox2Param( hWnd, nMsgID, NULL, NULL, MB_ICONERROR, MB_OK )
#define ErrorMsg1Param( hWnd, nMsgID, szParam ) \
MsgBox2Param( hWnd, nMsgID, szParam, NULL, MB_ICONERROR, MB_OK )
#define ErrorMsg2Param( hWnd, nMsgID, szParam1, szParam2 ) \
MsgBox2Param( hWnd, nMsgID, szParam1, szParam2, MB_ICONERROR, MB_OK )
#define ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0]))
#define SIZEOF(x) (sizeof(x))
//***************************************************************************
//* string defines *
//***************************************************************************
#define szNT4XDelayUntilReboot "System\\CurrentControlSet\\Control\\Session Manager"
#define szNT4XPendingValue "PendingFileRenameOperations"
#define szNT3XDelayUntilReboot "System\\CurrentControlSet\\Control\\Session Manager\\FileRenameOperations"
// install OCX
#define achREGSVREXE " /RegServer"
#define achUNREGSVREXE " /UnRegServer"
#define achREGSVRDLL "DllRegisterServer"
#define achUNREGSVRDLL "DllUnregisterServer"
#define achIEXREG "IExpressRegOCX%d"
#define achRUNDLL "rundll32.exe advpack.dll,RegisterOCX %s,%s,%s"
#define RUNONCEEX "RunOnceEx"
#define RUNONCEEXDATA "%s|%s"
#define RUNONCE_IERNONCE "rundll32.exe %s,RunOnceExProcess"
#define W95INF32DLL "W95INF32.DLL"
#define SETUPAPIDLL "SETUPAPI.DLL"
// INF Install section keys
#define ADVINF_DELDIRS "DelDirs"
#define ADVINF_CLEANUP "Cleanup"
#define ADVINF_MODNAME "ComponentName"
#define ADVINF_ADDREG "AddReg"
#define ADVINF_DELREG "DelReg"
#define ADVINF_BKREG "BackupReg"
#define ADVINF_COPYFILE "CopyFiles"
#define ADVINF_DELFILE "DelFiles"
#define ADVINF_PREROLBK "PreRollBack"
#define ADVINF_POSTROLBK "PostRollBack"
#define ADVINF_BACKUPPATH "BackupPath"
#define ADVINF_CHKADMIN "CheckAdminRights"
#define ADVINF_PERUSER "PerUserInstall"
#define ADVINF_PU_DSP "DisplayName"
#define ADVINF_PU_GUID "GUID"
#define ADVINF_PU_VER "Version"
#define ADVINF_PU_LANG "Locale"
#define ADVINF_PU_ISINST "IsInstalled"
#define ADVINF_PU_STUB "StubPath"
#define ADVINF_PU_CID "ComponentID"
#define ADVINF_PU_ROLLBK "RollbackUninstall"
#define ADVINF_FLAGS "AdvOptions"
#define ADVINF_MODVER "ComponentVersion"
#define ADVINF_UPDINFENG "UpdateINFEngine"
#define ADVINF_NOBACKPLATF "NoBackupPlatform"
#define ADVINF_CATALOG_NAME "CatalogName"
//***************************************************************************
//* FUNCTION PROTOTYPES *
//***************************************************************************
// EXPORTED FUNCTIONS
BOOL WINAPI DllMain( HINSTANCE, DWORD, LPVOID );
HRESULT WINAPI DoInfInstall( ADVPACKARGS * );
DWORD WINAPI GetInfInstallSectionName( LPCSTR, LPSTR, DWORD );
INT WINAPI RegisterOCX( HWND, HINSTANCE, PSTR, INT );
// INTERNAL FUNCTIONS
HRESULT CommonInstallInit( PCSTR, PCSTR, PSTR, DWORD, PCSTR, BOOL, DWORD );
VOID CommonInstallCleanup( VOID );
HRESULT CoreInstall( PCSTR, PCSTR, PCSTR, DWORD, DWORD, PCSTR );
HRESULT RunCommands( PCSTR, PCSTR, PCSTR, DWORD, BOOL );
DWORD GetTranslatedInt( PCSTR pszInfFilename, PCSTR pszTranslateSection,
PCSTR pszTranslateKey, DWORD dwDefault );
HRESULT GetTranslatedString( PCSTR, PCSTR, PCSTR, PSTR, DWORD, PDWORD );
HRESULT GetTranslatedLine( PCSTR, PCSTR, DWORD, PSTR*, PDWORD );
DWORD GetTranslatedSection(PCSTR c_pszInfFilename, PCSTR c_pszTranslateSection,
PSTR pszBuffer, DWORD dwBufSize );
BOOL MyNTReboot( VOID );
PSTR GetStringField( PSTR*, PCSTR, CHAR, BOOL );
BOOL IsSeparator( CHAR, PCSTR );
PSTR StripWhitespace( PSTR );
PSTR StripQuotes( PSTR );
BOOL IsGoodAdvancedInfVersion( PCSTR );
BOOL SelectSetupEngine( PCSTR, PCSTR, DWORD );
INT BeginPrompt( PCSTR, PCSTR, PSTR, DWORD );
VOID EndPrompt( PCSTR, PCSTR );
BOOL MyGetPrivateProfileString( PCSTR, PCSTR, PCSTR, PSTR, DWORD );
BOOL LoadSetupLib( PCSTR, PCSTR, BOOL, DWORD );
VOID UnloadSetupLib( VOID );
BOOL CheckOSVersion( VOID );
INT MsgBox2Param( HWND, UINT, LPCSTR, LPCSTR, UINT, UINT );
LPSTR LoadSz( UINT, LPSTR, UINT );
BOOL UserDirPrompt( LPSTR, LPSTR, LPSTR, ULONG, DWORD );
INT_PTR CALLBACK DirDlgProc( HWND, UINT, WPARAM, LPARAM );
BOOL BrowseForDir( HWND, LPCSTR, LPSTR );
BOOL CenterWindow( HWND, HWND );
BOOL IsGoodDir( LPCSTR );
HRESULT CtlSetLddPath( UINT, LPSTR, DWORD );
HRESULT GenInstall(LPSTR, LPSTR, LPSTR);
BOOL GetValueFromRegistry( LPSTR, UINT, LPSTR, LPSTR, LPSTR );
HRESULT SetLDIDs( PCSTR, PCSTR, DWORD, PCSTR );
HRESULT GetDestinationDir( PCSTR, PCSTR, DWORD, DWORD, PSTR, DWORD );
BOOL DirExists( LPSTR );
DWORD ParseDestinationLine( PSTR, PSTR, PSTR *, PDWORD, PDWORD, PDWORD, PDWORD );
BOOL ParseCustomLine( PSTR, PSTR *, PSTR *, PSTR *, PSTR *, PSTR *, BOOL, BOOL );
BOOL RegisterOCXs( LPSTR, LPSTR, BOOL, BOOL, DWORD);
BOOL InstallOCX( PREGOCXDATA, BOOL, BOOL, int );
DWORD FormStrWithoutPlaceHolders( LPCSTR, LPSTR, DWORD, LPCSTR );
DWORD IsMyKeyExists( LPCSTR, LPCSTR, LPSTR, UINT, LPCSTR );
DWORD GetWininitSize();
DWORD GetRegValueSize(LPCSTR lpcszRegKey, LPCSTR lpcszValue);
DWORD GetNumberOfValues(LPCSTR lpcszRegKey);
DWORD InternalNeedRebootInit(WORD wOSVer);
BOOL InternalNeedReboot(DWORD dwRebootCheck, WORD wOSVer);
BOOL IsEnoughInstSpace( LPSTR szPath, DWORD cbInstNeedSize, LPDWORD pdwPadSize );
LONG My_atol( LPSTR );
INT My_atoi( LPSTR );
BOOL IsFullPath( PCSTR );
//BOOL GetUNCroot( LPSTR, LPSTR );
DWORD MyFileSize( PCSTR );
HRESULT CreateFullPath( PCSTR, BOOL );
HRESULT LaunchAndWait( LPSTR, LPSTR, HANDLE *, DWORD, DWORD );
DWORD RO_GetPrivateProfileSection( LPCSTR lpSec, LPSTR lpBuf, DWORD dwSize, LPCSTR lpFile);
HINSTANCE MyLoadLibrary( LPSTR lpFile );
BOOL GetThisModulePath( LPSTR lpPath, int size );
BOOL UpdateHelpDlls( LPCSTR *ppszDlls, INT numDlls, LPSTR pszPath, LPSTR pszMsg, DWORD dwFlag);
void DoCleanup( LPCSTR szInfFilename, LPCSTR szInstallSection );
void DelDirs( LPCSTR szInfFilename, LPCSTR szInstallSection );
void MyRemoveDirectory( LPSTR szFolder );
PSTR FindFileExt( PSTR pszFile );
BOOL GetFullInfNameAndSrcDir( PCSTR pszInfFilename, PSTR pszFilename, PSTR pszSrcDir );
HRESULT ProcessFileSections( PCSTR pszSection, PCSTR pszSrcDir, MYFILEQUEUECALLBACK pMyFileQueueCallback );
HRESULT SaveRestoreInfo( PCSTR pszInf, PCSTR pszSection, PCSTR pszSrcDir, PCSTR pszCatalogs, DWORD dwFlags );
//HRESULT ExtractFiles(LPCSTR pszCabName, LPCSTR pszExpandDir, DWORD dwFlags,
// LPCSTR pszFileList, LPVOID lpReserved, DWORD dwReserved);
//BOOL GetParentDir( LPSTR szFolder );
PSTR GetNextToken(PSTR *ppszData, CHAR chDeLim);
HRESULT RegRestoreAllEx( HKEY hkBckupKey );
HRESULT ProcessAllRegSec( HWND hw, PCSTR pszTitle, PCSTR pszInf, PCSTR pszSection, HKEY hKey, HKEY hCUKey, DWORD dwFlags, BOOL *lpbOneReg );
HRESULT ProcessAllFiles( HWND hw, PCSTR pszSection, PCSTR pszSrcDir, PCSTR pszBackupPath,
PCSTR pszBaseName, PCSTR pszCatalogs, PCSTR pszModule, DWORD dwFlags );
BOOL AddEnvInPath( PSTR pszOldPath, PSTR pszNew );
BOOL GetProgramFilesDir( LPSTR pszPrgfDir, int iSize );
void SetSysPathsInReg();
HRESULT ProcessPerUserSec( PCSTR pcszInf, PCSTR pcszSec );
HRESULT DirSafe(LPCSTR pszDir);
BOOL GetUniHiveKeyName( HKEY hKey, LPSTR pszRegHiveKey, DWORD dwSize, LPCSTR pszBackupPath );
void SetPathForRegHiveUse( LPSTR pszPath, DWORD * adwAttr, int iLevels, BOOL bSave );
HRESULT RunCommandsSections( PCSTR pcszInf, PCSTR pcszSection, PCSTR c_pszKey, PCSTR c_pszSourceDir, DWORD dwFlags, BOOL bNeedReboot );
void GetNextRunOnceExSubKey( HKEY hKey, PSTR pszSubKey, int *piSubKeyNum );
void GetNextRunOnceValName( HKEY hKey, PCSTR pszFormat, PSTR pszValName, int line );
BOOL UseRunOnceEx();
BOOL RemoveBackupBaseOnVer( LPCSTR pszInf, LPCSTR pszSection );
LPSTR GetStringFieldNoQuote( PSTR *ppszString, PCSTR c_pszSeparators, BOOL bStripWhiteSpace);
BOOL GetFieldString(LPSTR lpszLine, int iField, LPSTR lpszField, int cbSize);
BOOL InitializeSetupAPI();
HRESULT RunPatchingCommands(PCSTR c_pszInfFilename, PCSTR szInstallSection, PCSTR c_pszSourceDir);
#endif // _ADVPACK_H_