Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

780 lines
17 KiB

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
w95upg.h
Abstract:
Defines types and functions, and declares globals used for
w95upg.dll only.
Author:
Jim Schmidt (jimschm) 25-Sep-1996
Revision History:
See SLM log
--*/
#pragma once
// property sheet
#include <prsht.h>
// twain data structs
#include <twain.h>
#include "unattend.h"
WINNT32_PLUGIN_INIT_ROUTINE_PROTOTYPE Winnt32PluginInit;
WINNT32_PLUGIN_GETPAGES_ROUTINE_PROTOTYPE Winnt32PluginGetPages;
WINNT32_PLUGIN_WRITEPARAMS_ROUTINE_PROTOTYPE Winnt32WriteParams;
WINNT32_PLUGIN_CLEANUP_ROUTINE_PROTOTYPE Winnt32Cleanup;
extern UINT g_ProgressBarTime;
//
// Macro returns true if setup is running in unattended mode.
//
#define UNATTENDED() (g_UnattendedFlagPtr && *g_UnattendedFlagPtr)
//
// Macro returns true if setup is running in upgrade mode.
//
#define UPGRADE() (g_UpgradeFlagPtr && *g_UpgradeFlagPtr)
//
// Macro returns true if setup is running in report-only mode.
//
#define REPORTONLY() (g_ConfigOptions.ReportOnly)
//
// Macro returns true if setup is running in typical mode.
//
#define TYPICAL() (g_SetupFlags && (*g_SetupFlags & UPG_FLAG_TYPICAL))
//
// Macros for setting, clearing, and checking the cancel flag.
//
#define SETCANCEL() (g_CancelFlagPtr ? *g_CancelFlagPtr = TRUE : 0)
#define CLEARCANCEL() (g_CancelFlagPtr ? *g_CancelFlagPtr = FALSE : 0)
#define CANCELLED() (g_CancelFlagPtr && *g_CancelFlagPtr)
#define SOURCEDIRECTORYCOUNT() (g_SourceDirectoryCount)
#define SOURCEDIRECTORYARRAY() (g_SourceDirectories)
#define SOURCEDIRECTORY(n) (g_SourceDirectories[n])
#define OPTIONALDIRECTORYCOUNT() (g_OptionalDirectoryCount)
#define OPTIONALDIRECTORYARRAY() (g_OptionalDirectories)
#define OPTIONALDIRECTORY(n) (g_OptionalDirectories[n])
//
// Globals in dllentry.c
//
extern PTSTR g_WinDir;
extern PTSTR g_WinDirWack;
extern PTSTR g_WinDrive;
extern PTSTR g_PlugInDir;
extern PTSTR g_PlugInDirWack;
extern PTSTR g_PlugInTempDir;
extern PTSTR g_TempDir;
extern PTSTR g_Win9xSifDir;
extern PTSTR g_TempDirWack;
extern PTSTR g_SystemDir;
extern PTSTR g_SystemDirWack;
extern PTSTR g_System32Dir;
extern PTSTR g_System32DirWack;
extern PTSTR g_ProgramFilesDir;
extern PTSTR g_ProgramFilesDirWack;
extern PTSTR g_ProgramFilesCommonDir;
extern PTSTR g_RecycledDirWack;
extern PTSTR g_Win95UpgInfFile;
extern PTSTR g_ProfileDirNt;
extern PTSTR g_ProfileDir;
extern PTSTR g_ProfileDirWack;
extern PTSTR g_CommonProfileDir;
extern PTSTR g_DriversDir;
extern PTSTR g_InfDir;
extern PTSTR g_HelpDir;
extern PTSTR g_HelpDirWack;
extern PTSTR g_CatRootDir;
extern PTSTR g_CatRootDirWack;
extern PTSTR g_FontsDir;
extern PTSTR g_ViewersDir;
extern PTSTR g_ColorDir;
extern PTSTR g_SharedDir;
extern PTSTR g_SpoolDir;
extern PTSTR g_SpoolDriversDir;
extern PTSTR g_PrintProcDir;
extern PCTSTR g_SourceDirectories[MAX_SOURCE_COUNT];
extern DWORD g_SourceDirectoryCount;
extern PCTSTR g_OptionalDirectories[MAX_SOURCE_COUNT];
extern DWORD g_OptionalDirectoryCount;
extern PCTSTR* g_SourceDirectoriesFromWinnt32;
extern PDWORD g_SourceDirectoryCountFromWinnt32;
extern PCTSTR* g_OptionalDirectoriesFromWinnt32;
extern PDWORD g_OptionalDirectoryCountFromWinnt32;
extern PCTSTR* g_UnattendScriptFile;
extern PCTSTR* g_CmdLineOptions;
extern TCHAR g_DllDir[];
extern TCHAR g_UpgradeSources[];
extern BOOL * g_UnattendedFlagPtr;
extern BOOL * g_CancelFlagPtr;
extern BOOL * g_AbortFlagPtr;
extern BOOL * g_UpgradeFlagPtr;
extern BOOL * g_MakeLocalSourcePtr;
extern BOOL * g_CdRomInstallPtr;
extern BOOL * g_BlockOnNotEnoughSpace;
extern PDWORD g_LocalSourceDrive;
extern PLONGLONG g_LocalSourceSpace;
extern PLONGLONG g_WinDirSpace;
extern PUINT g_RamNeeded;
extern PUINT g_RamAvailable;
extern HINF g_Win95UpgInf;
extern HINF g_TxtSetupSif;
extern TCHAR g_Win95Name[MAX_TCHAR_PATH];
extern BOOL * g_ForceNTFSConversion;
extern UINT * g_ProductFlavor;
extern BOOL g_PersonalSKU;
extern PDWORD g_SetupFlags;
extern PTSTR g_DynamicUpdateLocalDir;
extern PTSTR g_DynamicUpdateDrivers;
extern BOOL * g_UnattendSwitchSpecified;
extern INT g_TempDirWackChars;
extern INT g_WinDirWackChars;
extern INT g_HelpDirWackChars;
extern INT g_CatRootDirWackChars;
extern INT g_SystemDirWackChars;
extern INT g_System32DirWackChars;
extern INT g_PlugInDirWackChars;
extern INT g_RecycledDirWackChars;
extern INT g_ProfileDirWackChars;
extern INT g_ProgramFilesDirWackChars;
extern PRODUCTTYPE * g_ProductType;
extern USEROPTIONS g_ConfigOptions;
extern BOOL g_UseSystemFont;
extern LPCTSTR g_ProfileName;
extern HWND g_ParentWnd;
extern PCTSTR g_AdministratorStr;
#ifdef PRERELEASE
extern BOOL g_Stress; // private stress mode
#endif
extern POOLHANDLE g_GlobalPool; // for global strings that last for the complete runtime
extern UINT * g_Boot16;
extern BOOL g_BadVirusScannerFound;
extern BOOL g_BlockingFileFound;
extern BOOL g_BlockingHardwareFound;
extern BOOL g_BlockingAppFound;
extern BOOL g_KillNav;
extern GROWLIST g_BadVirusScannerGrowList;
extern BOOL g_OtherOsExists;
extern BOOL g_UnknownOs;
extern BOOL g_ToolMode;
extern DWORD g_BackupDirCount;
extern PMAPSTRUCT g_CacheShellFolders;
//
// Globals in sysmig\migmain.c
//
extern ICON_EXTRACT_CONTEXT g_IconContext;
//
// Tool Mode: Routines specific to non-shipping tools
//
BOOL
InitToolMode (
HINSTANCE Instance
);
VOID
TerminateToolMode (
HINSTANCE Instance
);
//
// COMMON9X: common9x.c
//
VOID
InitializeKnownGoodIconMap (
VOID
);
VOID
CleanUpKnownGoodIconMap (
VOID
);
BOOL
IsIconKnownGood (
IN PCTSTR FileSpec,
IN INT Index
);
typedef struct {
TCHAR JoystickDriver[MAX_TCHAR_PATH];
TCHAR JoystickName[MAX_TCHAR_PATH];
HKEY Root;
UINT JoyId;
} JOYSTICK_ENUM, *PJOYSTICK_ENUM;
BOOL
EnumFirstJoystick (
OUT PJOYSTICK_ENUM EnumPtr
);
BOOL
EnumNextJoystick (
IN OUT PJOYSTICK_ENUM EnumPtr
);
VOID
AbortJoystickEnum (
IN OUT PJOYSTICK_ENUM EnumPtr
);
LRESULT
TwoButtonBox (
IN HWND Window,
IN PCTSTR Text,
IN PCTSTR Button1,
IN PCTSTR Button2
);
BOOL
DontTouchThisFile (
IN PCTSTR FileName
);
VOID
ReplaceOneEnvVar (
IN OUT PCTSTR *NewString,
IN PCTSTR Base,
IN PCTSTR Variable,
IN PCTSTR Value
);
VOID
Init9xEnvironmentVariables (
VOID
);
BOOL
Expand9xEnvironmentVariables (
IN PCSTR SourceString,
OUT PSTR DestinationString, // can be the same as SourceString
IN INT DestSizeInBytes
);
VOID
CleanUp9xEnvironmentVariables (
VOID
);
BOOL
FixGuid (
IN PCTSTR Guid,
OUT PTSTR NewGuid // can be the same as Guid
);
BOOL
IsGuid (
IN PCTSTR Guid,
IN BOOL MustHaveBraces
);
//
// COMMON9X: userenum.c
//
typedef enum {
NAMED_USER = 0x0001,
DEFAULT_USER = 0x0002,
ADMINISTRATOR = 0x0004,
LAST_LOGGED_ON_USER = 0x0008,
INVALID_ACCOUNT = 0x0010,
LOGON_PROMPT = 0x0020,
CURRENT_USER = 0x0040
} ACCOUNTTYPE;
typedef enum {
UE_STATE_INIT,
UE_STATE_BEGIN_WIN95REG,
UE_STATE_NEXT_WIN95REG,
UE_STATE_NO_USERS,
UE_STATE_ADMINISTRATOR,
UE_STATE_LOGON_PROMPT,
UE_STATE_DEFAULT_USER,
UE_STATE_RETURN,
UE_STATE_CLEANUP,
UE_STATE_END
} USERENUM_STATE;
typedef struct {
// Enumeration Output
TCHAR UserName[MAX_USER_NAME]; // always filled, even for logon prompt or default user
TCHAR FixedUserName[MAX_USER_NAME]; // always filled, unless caller specifically turns this off
TCHAR AdminUserName[MAX_USER_NAME]; // filled if AccountType is ADMINISTRATOR
TCHAR FixedAdminUserName[MAX_USER_NAME]; // filled if AccountType is ADMINISTRATOR
TCHAR UserDatPath[MAX_TCHAR_PATH]; // is empty if AccountType has INVALID_ACCOUNT
TCHAR ProfileDirName[MAX_TCHAR_PATH]; // is empty if AccountType has INVALID_ACCOUNT
TCHAR OrgProfilePath[MAX_TCHAR_PATH]; // is empty if AccountType has INVALID_ACCOUNT
TCHAR NewProfilePath[MAX_TCHAR_PATH]; // symbolic path because actual path is not known
ACCOUNTTYPE AccountType; // always filled
BOOL CreateAccountOnly; // TRUE for valid accounts that won't be migrated
HKEY UserRegKey; // NULL if AccountType has INVALID_ACCOUNT, or caller specifies no hive flag
BOOL CommonProfilesEnabled; // filled by EnumFirstUser
// Privates for enumeration
BOOL EnableNameFix;
BOOL DoNotMapHive;
BOOL WantCreateOnly;
BOOL WantLogonPrompt;
USERPOSITION pos;
BOOL DefaultUserHive;
BOOL RealAdminAccountExists;
BOOL LastEnumWasAdmin;
TCHAR LastLoggedOnUserName[MAX_USER_NAME];
TCHAR CurrentUserName[MAX_USER_NAME];
PVOID ProfileDirTable;
USERENUM_STATE State;
USERENUM_STATE NextState;
} USERENUM, *PUSERENUM;
#define ENUMUSER_ENABLE_NAME_FIX 0x0001
#define ENUMUSER_DO_NOT_MAP_HIVE 0x0002
#define ENUMUSER_ADMINISTRATOR_ALWAYS 0x0004
#define ENUMUSER_NO_LOGON_PROMPT 0x0008
BOOL
EnumFirstUser (
OUT PUSERENUM EnumPtr,
IN DWORD Flags
);
BOOL
EnumNextUser (
IN OUT PUSERENUM EnumPtr
);
VOID
EnumUserAbort (
IN OUT PUSERENUM EnumPtr
);
//
// COMMON9X: ntenv.c
//
VOID
InitNtEnvironment (
VOID
);
VOID
TerminateNtEnvironment (
VOID
);
VOID
InitNtUserEnvironment (
IN PUSERENUM UserEnumPtr
);
VOID
TerminateNtUserEnvironment (
VOID
);
VOID
MapNtUserEnvironmentVariable (
IN PCSTR Variable,
IN PCSTR Value
);
VOID
MapNtSystemEnvironmentVariable (
IN PCSTR Variable,
IN PCSTR Value
);
BOOL
ExpandNtEnvironmentVariables (
IN PCSTR SourceString,
OUT PSTR DestinationString, // can be the same as SourceString
IN INT DestSizeInBytes
);
//
// COMMON9X: namefix.c
//
BOOL
ValidateName (
IN HWND ParentWnd, OPTIONAL
IN PCTSTR NameGroup,
IN PCTSTR NameCandidate
);
BOOL
ValidateDomainNameChars (
IN PCTSTR NameCandidate
);
BOOL
ValidateUserNameChars (
IN PCTSTR NameCandidate
);
VOID
CreateNameTables (
VOID
);
BOOL
IsIncompatibleNamesTableEmpty (
VOID
);
BOOL
GetUpgradeComputerName (
OUT PTSTR NewComputerName
);
BOOL
GetUpgradeDomainName (
OUT PTSTR ComputerDomainName
);
BOOL
GetUpgradeWorkgroupName (
OUT PTSTR WorkgroupName
);
BOOL
GetUpgradeUserName (
IN PCTSTR User,
OUT PTSTR NewUserName
);
BOOL
WarnAboutBadNames (
IN HWND PopupParent
);
BOOL
IsOriginalDomainNameValid (
VOID
);
//
// COMMON9X: twain.c
//
//
// TWAIN support
//
typedef enum {
TE_INIT,
TE_BEGIN_ENUM,
TE_EVALUATE,
TE_RETURN,
TE_NEXT,
TE_END_ENUM,
TE_DONE
} TWAIN_ENUM_STATE;
typedef struct {
// externally used members
TW_STR32 Manufacturer;
TW_STR32 ProductFamily;
TW_STR32 DisplayName;
CHAR DataSourceModule[MAX_MBCHAR_PATH];
// internal enum members
TWAIN_ENUM_STATE State;
PCTSTR Dir;
TREE_ENUM Enum;
} TWAINDATASOURCE_ENUM, *PTWAINDATASOURCE_ENUM;
BOOL
EnumFirstTwainDataSource (
OUT PTWAINDATASOURCE_ENUM EnumPtr
);
BOOL
EnumNextTwainDataSource (
IN OUT PTWAINDATASOURCE_ENUM EnumPtr
);
VOID
AbortTwainDataSourceEnum (
IN OUT PTWAINDATASOURCE_ENUM EnumPtr
);
//
// Routine to add paths to Migration paths; defined in migapp\filescan.c
//
VOID
AddMigrationPathEx (
IN PCTSTR PathLong,
IN DWORD Levels,
IN BOOL Win9xOsPath
);
#define AddMigrationPath(p,l) AddMigrationPathEx(p,l,FALSE)
//
// Routine to check if a file is a Win32 DLL (migapp\modules.c)
//
BOOL
IsWin32Library (
IN PCTSTR ModuleName
);
//
// Routine to check if a file is a Win32 EXE (migapp\modules.c)
//
BOOL
IsWin32Exe (
IN PCTSTR ModuleName
);
//
// Routine to check if the currently generated report is empty,
// given a Level of filtration
//
BOOL
IsReportEmpty (
IN DWORD Level
);
//
// SYSMIG: userloop.c
//
PCTSTR
ShellFolderGetPath (
IN PUSERENUM EnumPtr,
IN PCTSTR ShellFolderId
);
//
// constant to identify the whole subtree of a path
//
#define MAX_DEEP_LEVELS 0xFFFFFFFF
//
// Enumeration structs
//
typedef enum {
ENUM_STATE_INIT,
ENUM_STATE_ENUM_FIRST_GROUP_ITEM,
ENUM_STATE_RETURN_GROUP_ITEM,
ENUM_STATE_ENUM_NEXT_GROUP_ITEM,
ENUM_STATE_ENUM_NEXT_GROUP,
ENUM_STATE_DONE
} INVALID_NAME_STATE;
typedef struct {
//
// Enumeration state
//
PCTSTR GroupName;
TCHAR DisplayGroupName[256];
PCTSTR OriginalName;
TCHAR NewName[MEMDB_MAX];
DWORD Identifier;
//
// Private enumeration members
//
MEMDB_ENUM NameGroup;
MEMDB_ENUM Name;
INVALID_NAME_STATE State;
} INVALID_NAME_ENUM, *PINVALID_NAME_ENUM;
//
// Enumeration routines
//
BOOL
EnumFirstInvalidName (
OUT PINVALID_NAME_ENUM EnumPtr
);
BOOL
EnumNextInvalidName (
IN OUT PINVALID_NAME_ENUM EnumPtr
);
//
// Maintenence routines
//
VOID
GetNamesFromIdentifier (
IN DWORD Identifier,
IN PTSTR NameGroup, OPTIONAL
IN PTSTR OriginalName, OPTIONAL
IN PTSTR NewName OPTIONAL
);
VOID
ChangeName (
IN DWORD Identifier,
IN PCTSTR NewName
);
VOID
DisableDomainChecks (
VOID
);
VOID
EnableDomainChecks (
VOID
);
DWORD
GetDomainIdentifier (
VOID
);
BOOL
TreatAsGood (
IN PCTSTR FullPath
);
VOID
TerminateWinntSifBuilder (
VOID
);
//
// win95upg.inf sections and keys
//
#define SECTION_MIGRATION_FILES TEXT("MigrationFiles")
#define SECTION_MIGRATION_DIRECTORIES TEXT("MigrationDirectories")
#define KEY_TEMP_BASE TEXT("TempBase")
#define KEY_MIG_EXT_ROOT TEXT("MigExtRoot")
#define KEY_PATHS_FILE TEXT("MigExtPathsFile")
#define WINDIR_SYSTEM_FIXED_FILES TEXT("WinDirSystemFixedFiles")
#define SYSTEM32_FORCED_MOVE TEXT("System32ForcedMove")
//
// Other string constants
//
#define STR_WIN95UPG_INF TEXT("win95upg.inf")
#define STR_SYSTEM32 TEXT("System32")
// ticks for all functions
#define TICKS_READ_NT_FILES 3000
#define TICKS_MISC_MESSAGES 1
#define TICKS_BUILD_UNATTEND 700
#define TICKS_PRESERVE_SHELL_ICONS 1300
#define TICKS_DELETE_WIN_DIR_WACK_INF 2100
#define TICKS_MOVE_INI_FILES 30
#define TICKS_SAVE_DOS_FILES 10
#define TICKS_INIT_WIN95_REGISTRY 10
#define TICKS_SAVE_SHARES 130
#define TICKS_BAD_NAMES_WARNING 10
#define TICKS_SAVE_MM_SETTINGS_SYSTEM 50
#define TICKS_SAVE_MM_SETTINGS_USER 1100
#define TICKS_CONDITIONAL_INCOMPATIBILITIES 200
#define TICKS_HARDWARE_PROFILE_WARNING 10
#define TICKS_UNSUPPORTED_PROTOCOLS_WARNING 30
#define TICKS_RAS_PREPARE_REPORT 100
#define TICKS_END_MIGRATION_DLL_PROCESSING 100
#define TICKS_PREPARE_PROCESS_MODULES 5000
#define TICKS_PROCESS_MODULES 10000
#define TICKS_PROCESS_COMPATIBLE_SECTION 100
#define TICKS_INIT_MIGDB 6200
#define TICKS_DONE_MIGDB 4100
#define TICKS_PROCESS_RUN_KEY 20
#define TICKS_PROCESS_SHELL_SETTINGS 25
#define TICKS_CHECK_NT_DIRS 300
#define TICKS_MOVE_SYSTEM_DIR 6200
#define TICKS_PROCESS_LINKS 3000
#define TICKS_PROCESS_CPLS 3000
#define TICKS_FILESCAN_DIR_INCREMENT 400
#define TICKS_DOSMIG_PREPARE_REPORT 300
#define TICKS_MIGDLL_QUERYVERSION 500
#define TICKS_MIGDLL_DELTA 1000
#define TICKS_MOVE_STATIC_FILES 15
#define TICKS_COPY_STATIC_FILES 15
#define TICKS_USERPROFILE_MIGRATION 250
#define TICKS_MOVE_SYSTEMREGISTRY 10
#define TICKS_OLEREG 8000
#define TICKS_TWAIN 100
#define TICKS_BACKUP_LAYOUT_OUTPUT 7000
#define TICKS_SPACECHECK 5000
#define TICKS_JOYSTICK_DETECTION 50
#define TICKS_RECYCLEBINS 2000
#define TICKS_GATHER_IME_INFO 2000
#define TICKS_INIT_HLP_PROCESSING 50
#define TICKS_ANSWER_FILE_DETECTION 20
#define TICKS_INIT_APP_COMPAT 1000
#define TICKS_DONE_APP_COMPAT 100
#define TICKS_GATHERDEAD 120
#define TICKS_CREATE_FILE_LISTS 7000
#define TICKS_PREPAREPNPIDLIST 450
#define TICKS_ADDDEFAULTCLEANUPDIRS 155
#define TICKS_INITINIPROCESSING 255
#define TICKS_DELETESTATICFILES 320
#define TICKS_PROCESSMIGRATIONSECTIONS 2400
#define TICKS_REPORTMAPIIFNOTHANDLED 200
#define TICKS_FUSIONFILES 300
#define TICKS_REPORTDARWINIFNOTHANDLED 200