|
|
/*++
Copyright (c) 2001 Microsoft Corporation
Module Name:
Precomp.h
Abstract:
Precompiled header file. Contains constants, function prototypes, macros, and structures used throughout the app.
Notes:
Unicode only.
History:
03/02/2001 rparsons Created --*/
#ifndef _X86_
#define _X86_
#endif
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <imagehlp.h>
#include <shlwapi.h>
#include <aclapi.h>
#include <shellapi.h>
#include <setupapi.h>
extern "C" { #include <spapip.h>
#include <sfcapip.h>
}
#include <stdio.h>
#include <stdarg.h>
#include <mscat.h>
#include "resource.h"
#include "eventlog.h"
#include "registry.h"
#include "enumdir.h"
#include "cqueue.h"
#include "wumsg.h"
#define ACCESS_READ 1
#define ACCESS_WRITE 2
#define ERROR 0
#define WARNING 1
#define TRACE 2
#define MAX_QUEUE_SIZE MAX_PATH*2
#define INF_FILE_NAMEW L"wuinst.inf"
#define INF_FILE_NAMEA "wuinst.inf"
#define UNINST_INF_FILE_NAMEW L"wuuninst.inf"
#define UNINST_INF_FILE_NAMEA "wuuninst.inf"
#define INF_MASTER_SECTIONS "Sections"
//
// Section names for install INF
//
#define INF_CAT_SECTION_NAME "CatalogsToInstall"
#define INF_BACKUP_FILES "Backup.Files"
#define INF_BACKUP_REGISTRY "Backup.Registry"
#define INF_COPY_FILES "Copy.Files"
#define INF_REGISTRATIONS "Registrations"
#define INF_ADD_REGISTRY "Add.Registry.Keys"
#define INF_VERSION_INFO "Registry.Data"
//
// Section names for uninstall INF
//
#define INF_RESTORE_FILES "Restore.Files"
#define INF_RESTORE_REGISTRY "Restore.Registry.Keys"
#define INF_RESTORE_REGISTRYW L"Restore.Registry.Keys"
#define INF_UNREGISTRATIONS "UnRegistrations"
#define INF_UNREGISTRATIONSW L"UnRegistrations"
//
// Common to both
//
#define INF_PROCESSES_TO_RUN "ProcessesToRun"
#define INF_DELETE_REGISTRY "Delete.Registry.Keys"
#define INF_DELETE_REGISTRYW L"Delete.Registry.Keys"
#define INF_EXCLUDE "Exclusions"
#define dwBackupFiles ((DWORD)0x0001)
#define dwBackupRegistry ((DWORD)0x0002)
#define dwDeleteRegistry ((DWORD)0x0003)
#define dwCopyFiles ((DWORD)0x0004)
#define dwRegistrations ((DWORD)0x0005)
#define dwExclusionsInstall ((DWORD)0x0006)
#define dwExclusionsUninstall ((DWORD)0x0007)
#define dwRestoreFiles ((DWORD)0x0008)
#define dwRestoreRegistry ((DWORD)0x0009)
#define dwUnRegistrations ((DWORD)0x0010)
#define dwAddRegistry ((DWORD)0x0011)
#define REG_DISPLAY_NAME L"DisplayName"
#define REG_UNINSTALL_STRING L"UninstallString"
#define UNINSTALL_SWITCH L"-u"
#define REG_PROT_RENAMES L"AllowProtectedRenames"
#define REG_ACTIVE_SETUP L"SOFTWARE\\Microsoft\\Active Setup\\Installed Components"
#define REG_UNINSTALL L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
#define REG_WINFP_PATH L"SOFTWARE\\Policies\\Microsoft\\Windows NT\\Windows File Protection"
#define REG_WINLOGON_PATH L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"
#define REG_INSTALL_SOURCES L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup"
#define REG_SESSION_MANAGER L"System\\CurrentControlSet\\Control\\Session Manager"
#define LOAD_STRING_FAILED L"Unable to load a string from the module."
#define MALLOC(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s))
#define REALLOC(s,b) HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s),(b))
#define FREE(b) HeapFree(GetProcessHeap(),0,(b))
//
// Structures
//
typedef struct _tagSETUPINFO { HINSTANCE hInstance; HINF hInf; UINT nErrorLevel; BOOL fInstall; BOOL fQuiet; BOOL fForceInstall; BOOL fNoReboot; BOOL fNoUninstall; BOOL fEventSourceCreated; BOOL fNeedToAdjustACL; BOOL fOnWin2K; BOOL fCanUninstall; BOOL fSourceDirAdded; BOOL fUpdateDllCache; WCHAR wszDebugOut[2048]; LPWSTR lpwUninstallINFPath; LPWSTR lpwInstallINFPath; LPWSTR lpwExtractPath; LPWSTR lpwMessageBoxTitle; LPWSTR lpwPrettyAppName; LPWSTR lpwInstallDirectory; LPWSTR lpwUninstallDirectory; LPWSTR lpwWindowsDirectory; LPWSTR lpwSystem32Directory; LPWSTR lpwEventLogSourceName; DWORD dwRequiredFreeSpaceNoUninstall; DWORD dwRequiredFreeSpaceWithUninstall; DWORDLONG dwlUpdateVersion; CQueue BackupFileQueue; CQueue BackupRegistryQueue; CQueue CopyFileQueue; CQueue DeleteRegistryQueue; CQueue RegistrationQueue; CQueue ExclusionQueue; CQueue RestoreRegistryQueue; CQueue RestoreFileQueue; CQueue AddRegistryQueue; } SETUP_INFO, *LPSETUP_INFO;
//
// Functions contained in wumain.cpp
//
BOOL DoInstallation(); BOOL DoUninstallation();
//
// Functions contained in wuinst.cpp
//
int InstallCheckVersion(); BOOL InstallBackupFiles(); BOOL InstallCopyFiles(); BOOL InstallWriteUninstallKey(); BOOL InstallRunINFProcesses(); BOOL InstallGetSectionsFromINF(); BOOL InstallBackupRegistryKeys(); BOOL InstallRegistryData();
BOOL InstallCatalogFiles( IN HINF hInf, IN LPCWSTR lpwSourcePath );
BOOL InstallWFPFile( IN LPCWSTR lpwSourceFileName, IN LPCWSTR lpwDestFileName, IN LPCWSTR lpwDestFileNamePath, IN BOOL fUpdateDllCache );
BOOL InstallPrepareDirectory( IN LPWSTR lpwDirectoryPath, IN DWORD dwAttributes );
//
// Functions contained in wufns.cpp
//
BOOL CommonDeleteRegistryKeys(); BOOL CommonEnableProtectedRenames();
BOOL CommonRegisterServers( IN BOOL fRegister );
BOOL CommonRemoveDirectoryAndFiles( IN LPCWSTR lpwDirectoryPath, IN PVOID pEnumerateParameter, IN BOOL fRemoveDirectory, IN BOOL fRemoveSubDirs );
LPWSTR GetNextToken( IN LPWSTR lpwSourceString, IN LPCWSTR lpwSeparator );
BOOL ForceMove( IN LPCWSTR lpwSourceFileName, IN LPCWSTR lpwDestFileName );
BOOL ForceDelete( IN LPCWSTR lpwFileName );
BOOL ForceCopy( IN LPCWSTR lpwSourceFileName, IN LPCWSTR lpwDestFileName );
BOOL IsFileProtected( IN LPCWSTR lpwFileName );
DWORD pInstallCatalogFile( IN LPCWSTR lpwCatalogFullPath, IN LPCWSTR lpwNewBaseName );
BOOL GetVersionInfoFromImage( IN LPCWSTR lpwFileName, OUT PDWORDLONG pdwVersion );
LPWSTR CopyTempFile( IN LPCWSTR lpwSrcFileName, IN LPCWSTR lpwDestDir );
BOOL ParseCommandLine();
BOOL IsAnotherInstanceRunning( IN LPCWSTR lpwInstanceName );
BOOL AdjustDirectoryPerms( IN LPWSTR lpwDirPath );
BOOL DeleteOneFile( IN LPCWSTR lpwPath, IN PWIN32_FIND_DATA pFindFileData, IN PVOID pEnumerateParameter );
BOOL MirrorDirectoryPerms( IN LPWSTR lpwSourceDir, IN LPWSTR lpwDestDir );
DWORD GetCatVersion( IN LPWSTR lpwCatName );
LPWSTR GetCurWorkingDirectory();
int IsUserAnAdministrator();
void pUnicodeToAnsi( IN LPCWSTR lpwUnicodeString, IN OUT LPSTR lpAnsiString, IN int nLen );
void pAnsiToUnicode( IN LPCSTR lpAnsiString, IN OUT LPWSTR lpwUnicodeString, IN int nLen );
#if DBG
void _cdecl Print( IN UINT uLevel, IN LPWSTR lpwFmt, IN ... ); #else
#define Print
#endif
BOOL WUInitialize();
void WUCleanup();
DWORDLONG GetDiskSpaceFreeOnNTDrive();
BOOL DisplayErrMsg( IN HWND hWnd, IN DWORD dwMessageId, IN LPWSTR lpwMessageArray );
BOOL GetInfValue( IN HINF hInf, IN LPCSTR lpSectionName, IN LPCSTR lpKeyName, OUT PDWORD pdwValue );
BOOL VersionStringToNumber( IN LPCWSTR lpwVersionString, IN OUT DWORDLONG *lpVersionNumber );
BOOL LaunchProcessAndWait( IN LPCWSTR lpwCommandLine, OUT PDWORD pdwReturnCode );
BOOL ModifyTokenPrivilege( IN LPCWSTR lpwPrivilege, IN BOOL fEnable );
BOOL ShutdownSystem( IN BOOL fForceClose, IN BOOL fReboot );
BOOL SaveEntryToINF( IN LPCWSTR lpwSectionName, IN LPCWSTR lpwKeyName, IN LPCWSTR lpwEntryName, IN LPCWSTR lpwFileName );
//
// Functions contained in wulog.cpp
//
void LogWUEvent( IN WORD wType, IN DWORD dwEventID, IN WORD wNumStrings, IN LPCWSTR *lpwStrings );
BOOL LogEventDisplayError( IN WORD wType, IN DWORD dwEventID, IN BOOL fDisplayErr, IN BOOL fCritical );
//
// Functions contained in wuuninst.cpp
//
BOOL UninstallGetSectionsFromINF(); BOOL UninstallRestoreRegistryKeys(); BOOL UninstallRemoveFiles(); BOOL UninstallRestoreFiles(); void UninstallCustomWorker();
void UninstallDeleteSubKey( IN LPCWSTR lpwKey, IN LPCWSTR lpwSubKey );
BOOL UninstallWFPFile( IN LPCWSTR lpwSourceFileName, IN LPCWSTR lpwDestFileName, IN LPCWSTR lpwDestFileNamePath, IN BOOL fUpdateDllCache );
|