Inno-Setup-issrc/Projects/Src/Shared.Struct.pas
Martijn Laan 46252ab541
Cleanup.
2025-06-12 10:51:25 +02:00

428 lines
17 KiB
ObjectPascal

unit Shared.Struct;
{
Inno Setup
Copyright (C) 1997-2025 Jordan Russell
Portions by Martijn Laan
For conditions of distribution and use, see LICENSE.TXT.
Various records and other types that are shared by the ISCmplr, Setup,
SetupLdr, and Uninst projects
}
interface
uses
Windows, Shared.Int64Em, SHA256;
const
SetupTitle = 'Inno Setup';
SetupVersion = '6.5.0-dev';
SetupBinVersion = (6 shl 24) + (4 shl 16) + (3 shl 8) + 0;
type
TSetupID = array[0..63] of AnsiChar;
TUninstallLogID = array[0..63] of AnsiChar;
TMessagesHdrID = array[0..63] of AnsiChar;
TMessagesLangOptionsID = array[1..8] of AnsiChar;
TCompID = array[1..4] of AnsiChar;
TDiskSliceID = array[1..8] of AnsiChar;
const
{ SetupID is used by the Setup program to check if the SETUP.0 file is
compatible with it. If you make any modifications to the records in
this file it's recommended you change SetupID. Any change will do (like
changing the letters or numbers), as long as your format is
unrecognizable by the standard Inno Setup. }
SetupID: TSetupID = 'Inno Setup Setup Data (6.5.0)';
UninstallLogID: array[Boolean] of TUninstallLogID =
('Inno Setup Uninstall Log (b)', 'Inno Setup Uninstall Log (b) 64-bit');
MessagesHdrID: TMessagesHdrID = 'Inno Setup Messages (6.5.0) (u)';
MessagesLangOptionsID: TMessagesLangOptionsID = '!mlo!001';
ZLIBID: TCompID = 'zlb'#26;
DiskSliceID: TDiskSliceID = 'idska32'#26;
type
TSetupVersionDataVersion = packed record
Build: Word;
Minor, Major: Byte;
end;
TSetupVersionData = packed record
WinVersion, NTVersion: Cardinal;
NTServicePack: Word;
end;
TSetupHeaderOption = (shDisableStartupPrompt, shCreateAppDir,
shAllowNoIcons, shAlwaysRestart, shAlwaysUsePersonalGroup,
shEnableDirDoesntExistWarning,
shPassword, shAllowRootDirectory, shDisableFinishedPage, shUsePreviousAppDir,
shUsePreviousGroup, shUpdateUninstallLogAppName,
shUsePreviousSetupType, shDisableReadyMemo, shAlwaysShowComponentsList,
shFlatComponentsList, shShowComponentSizes, shUsePreviousTasks,
shDisableReadyPage, shAlwaysShowDirOnReadyPage, shAlwaysShowGroupOnReadyPage,
shAllowUNCPath, shUserInfoPage, shUsePreviousUserInfo,
shUninstallRestartComputer, shRestartIfNeededByRun, shShowTasksTreeLines,
shAllowCancelDuringInstall, shWizardImageStretch, shAppendDefaultDirName,
shAppendDefaultGroupName, shEncryptionUsed, shSetupLogging,
shSignedUninstaller, shUsePreviousLanguage, shDisableWelcomePage,
shCloseApplications, shRestartApplications, shAllowNetworkDrive,
shForceCloseApplications, shAppNameHasConsts, shUsePreviousPrivileges,
shWizardResizable, shUninstallLogging);
TSetupLanguageDetectionMethod = (ldUILanguage, ldLocale, ldNone);
TSetupCompressMethod = (cmStored, cmZip, cmBzip, cmLZMA, cmLZMA2);
TSetupKDFSalt = array[0..15] of Byte;
TSetupEncryptionKey = array[0..31] of Byte;
TSetupEncryptionNonce = record
RandomXorStartOffset: Int64;
RandomXorFirstSlice: Int32;
RemainingRandom: array[0..2] of Int32;
end;
TSetupProcessorArchitecture = (paUnknown, paX86, paX64, paArm32, paArm64);
TSetupProcessorArchitectures = set of TSetupProcessorArchitecture;
TSetupDisablePage = (dpAuto, dpNo, dpYes);
TSetupPrivilegesRequired = (prNone, prPowerUser, prAdmin, prLowest);
TSetupPrivilegesRequiredOverride = (proCommandLine, proDialog);
TSetupPrivilegesRequiredOverrides = set of TSetupPrivilegesRequiredOverride;
TSetupWizardStyle = (wsClassic, wsModern);
const
SetupProcessorArchitectureNames: array[TSetupProcessorArchitecture] of String =
('Unknown', 'x86', 'x64', 'Arm32', 'Arm64');
const
SetupHeaderStrings = 34;
SetupHeaderAnsiStrings = 4;
type
TSetupHeader = packed record
AppName, AppVerName, AppId, AppCopyright, AppPublisher, AppPublisherURL,
AppSupportPhone, AppSupportURL, AppUpdatesURL, AppVersion, DefaultDirName,
DefaultGroupName, BaseFilename, UninstallFilesDir, UninstallDisplayName,
UninstallDisplayIcon, AppMutex, DefaultUserInfoName, DefaultUserInfoOrg,
DefaultUserInfoSerial, AppReadmeFile, AppContact, AppComments,
AppModifyPath, CreateUninstallRegKey, Uninstallable, CloseApplicationsFilter,
SetupMutex, ChangesEnvironment, ChangesAssociations,
ArchitecturesAllowed, ArchitecturesInstallIn64BitMode, CloseApplicationsFilterExcludes,
SevenZipLibraryName: String;
LicenseText, InfoBeforeText, InfoAfterText, CompiledCodeText: AnsiString;
NumLanguageEntries, NumCustomMessageEntries, NumPermissionEntries,
NumTypeEntries, NumComponentEntries, NumTaskEntries, NumDirEntries,
NumISSigKeyEntries, NumFileEntries, NumFileLocationEntries, NumIconEntries, NumIniEntries,
NumRegistryEntries, NumInstallDeleteEntries, NumUninstallDeleteEntries,
NumRunEntries, NumUninstallRunEntries: Integer;
MinVersion, OnlyBelowVersion: TSetupVersionData;
WizardStyle: TSetupWizardStyle;
WizardSizePercentX, WizardSizePercentY: Integer;
WizardImageAlphaFormat: (afIgnored, afDefined, afPremultiplied); // Must be same as Graphics.TAlphaFormat
PasswordTest: Integer;
EncryptionKDFSalt: TSetupKDFSalt;
EncryptionKDFIterations: Integer;
EncryptionBaseNonce: TSetupEncryptionNonce;
ExtraDiskSpaceRequired: Integer64;
SlicesPerDisk: Integer;
UninstallLogMode: (lmAppend, lmNew, lmOverwrite);
DirExistsWarning: (ddAuto, ddNo, ddYes);
PrivilegesRequired: TSetupPrivilegesRequired;
PrivilegesRequiredOverridesAllowed: TSetupPrivilegesRequiredOverrides;
ShowLanguageDialog: (slYes, slNo, slAuto);
LanguageDetectionMethod: TSetupLanguageDetectionMethod;
CompressMethod: TSetupCompressMethod;
DisableDirPage, DisableProgramGroupPage: TSetupDisablePage;
UninstallDisplaySize: Integer64;
Options: set of TSetupHeaderOption;
end;
const
SetupPermissionEntryStrings = 0;
SetupPermissionEntryAnsiStrings = 1;
type
PSetupPermissionEntry = ^TSetupPermissionEntry;
TSetupPermissionEntry = packed record
Permissions: AnsiString; { an array of TGrantPermissionEntry's }
end;
const
SetupLanguageEntryStrings = 6;
SetupLanguageEntryAnsiStrings = 4;
type
PSetupLanguageEntry = ^TSetupLanguageEntry;
TSetupLanguageEntry = packed record
Name, LanguageName, DialogFontName, TitleFontName, WelcomeFontName,
CopyrightFontName: String;
Data, LicenseText, InfoBeforeText, InfoAfterText: AnsiString;
LanguageID: Cardinal;
DialogFontSize: Integer;
TitleFontSize: Integer;
WelcomeFontSize: Integer;
CopyrightFontSize: Integer;
RightToLeft: Boolean;
end;
const
SetupCustomMessageEntryStrings = 2;
SetupCustomMessageEntryAnsiStrings = 0;
type
PSetupCustomMessageEntry = ^TSetupCustomMessageEntry;
TSetupCustomMessageEntry = packed record
Name, Value: String;
LangIndex: Integer;
end;
const
SetupTypeEntryStrings = 4;
SetupTypeEntryAnsiStrings = 0;
type
TSetupTypeOption = (toIsCustom);
TSetupTypeOptions = set of TSetupTypeOption;
TSetupTypeType = (ttUser, ttDefaultFull, ttDefaultCompact, ttDefaultCustom);
PSetupTypeEntry = ^TSetupTypeEntry;
TSetupTypeEntry = packed record
Name, Description, Languages, CheckOnce: String;
MinVersion, OnlyBelowVersion: TSetupVersionData;
Options: TSetupTypeOptions;
Typ: TSetupTypeType;
{ internally used: }
Size: Integer64;
end;
const
SetupComponentEntryStrings = 5;
SetupComponentEntryAnsiStrings = 0;
type
PSetupComponentEntry = ^TSetupComponentEntry;
TSetupComponentEntry = packed record
Name, Description, Types, Languages, CheckOnce: String;
ExtraDiskSpaceRequired: Integer64;
Level: Integer;
Used: Boolean;
MinVersion, OnlyBelowVersion: TSetupVersionData;
Options: set of (coFixed, coRestart, coDisableNoUninstallWarning,
coExclusive, coDontInheritCheck);
{ internally used: }
Size: Integer64;
end;
const
SetupTaskEntryStrings = 6;
SetupTaskEntryAnsiStrings = 0;
type
PSetupTaskEntry = ^TSetupTaskEntry;
TSetupTaskEntry = packed record
Name, Description, GroupDescription, Components, Languages, Check: String;
Level: Integer;
Used: Boolean;
MinVersion, OnlyBelowVersion: TSetupVersionData;
Options: set of (toExclusive, toUnchecked, toRestart, toCheckedOnce,
toDontInheritCheck);
end;
const
SetupDirEntryStrings = 7;
SetupDirEntryAnsiStrings = 0;
type
PSetupDirEntry = ^TSetupDirEntry;
TSetupDirEntry = packed record
DirName: String;
Components, Tasks, Languages, Check, AfterInstall, BeforeInstall: String;
Attribs: Integer;
MinVersion, OnlyBelowVersion: TSetupVersionData;
PermissionsEntry: Smallint;
Options: set of (doUninsNeverUninstall, doDeleteAfterInstall,
doUninsAlwaysUninstall, doSetNTFSCompression, doUnsetNTFSCompression);
end;
const
SetupISSigKeyEntryStrings = 3;
SetupISSigKeyEntryAnsiStrings = 0;
type
PSetupISSigKeyEntry = ^TSetupISSigKeyEntry;
TSetupISSigKeyEntry = packed record
PublicX, PublicY, RuntimeID: String;
end;
const
SetupFileEntryStrings = 15;
SetupFileEntryAnsiStrings = 1;
type
PSetupFileEntry = ^TSetupFileEntry;
TSetupFileVerificationType = (fvNone, fvHash, fvISSig);
TSetupFileVerification = packed record
ISSigAllowedKeys: AnsiString; { Must be first }
Hash: TSHA256Digest;
Typ: TSetupFileVerificationType;
end;
TSetupFileEntry = packed record
SourceFilename, DestName, InstallFontName, StrongAssemblyName, Components,
Tasks, Languages, Check, AfterInstall, BeforeInstall, Excludes,
DownloadISSigSource, DownloadUserName, DownloadPassword, ExtractArchivePassword: String;
Verification: TSetupFileVerification; { Must be first after strings }
MinVersion, OnlyBelowVersion: TSetupVersionData;
LocationEntry: Integer;
Attribs: Integer;
ExternalSize: Integer64;
PermissionsEntry: Smallint;
Options: set of (foConfirmOverwrite, foUninsNeverUninstall, foRestartReplace,
foDeleteAfterInstall, foRegisterServer, foRegisterTypeLib, foSharedFile,
foCompareTimeStamp, foFontIsntTrueType,
foSkipIfSourceDoesntExist, foOverwriteReadOnly, foOverwriteSameVersion,
foCustomDestName, foOnlyIfDestFileExists, foNoRegError,
foUninsRestartDelete, foOnlyIfDoesntExist, foIgnoreVersion,
foPromptIfOlder, foDontCopy, foUninsRemoveReadOnly,
foRecurseSubDirsExternal, foReplaceSameVersionIfContentsDiffer,
foDontVerifyChecksum, foUninsNoSharedFilePrompt, foCreateAllSubDirs,
fo32Bit, fo64Bit, foExternalSizePreset, foSetNTFSCompression,
foUnsetNTFSCompression, foGacInstall, foDownload,
foExtractArchive);
FileType: (ftUserFile, ftUninstExe);
end;
const
SetupFileLocationEntryStrings = 0;
SetupFileLocationEntryAnsiStrings = 0;
type
PSetupFileLocationEntry = ^TSetupFileLocationEntry;
TSetupFileLocationEntry = packed record
FirstSlice, LastSlice: Integer;
StartOffset: Longint;
ChunkSuboffset: Integer64;
OriginalSize: Integer64;
ChunkCompressedSize: Integer64;
SHA256Sum: TSHA256Digest;
SourceTimeStamp: TFileTime;
FileVersionMS, FileVersionLS: DWORD;
Flags: set of (floVersionInfoValid, floTimeStampInUTC, floCallInstructionOptimized,
floChunkEncrypted, floChunkCompressed);
end;
const
SetupIconEntryStrings = 13;
SetupIconEntryAnsiStrings = 0;
type
TSetupIconCloseOnExit = (icNoSetting, icYes, icNo);
PSetupIconEntry = ^TSetupIconEntry;
TSetupIconEntry = packed record
IconName, Filename, Parameters, WorkingDir, IconFilename, Comment: String;
Components, Tasks, Languages, Check, AfterInstall, BeforeInstall: String;
AppUserModelID: String;
AppUserModelToastActivatorCLSID: TGUID;
MinVersion, OnlyBelowVersion: TSetupVersionData;
IconIndex, ShowCmd: Integer;
CloseOnExit: TSetupIconCloseOnExit;
HotKey: Word;
Options: set of (ioUninsNeverUninstall, ioCreateOnlyIfFileExists,
ioUseAppPaths, ioExcludeFromShowInNewInstall,
ioPreventPinning, ioHasAppUserModelToastActivatorCLSID);
end;
const
SetupIniEntryStrings = 10;
SetupIniEntryAnsiStrings = 0;
type
PSetupIniEntry = ^TSetupIniEntry;
TSetupIniEntry = packed record
Filename, Section, Entry, Value: String;
Components, Tasks, Languages, Check, AfterInstall, BeforeInstall: String;
MinVersion, OnlyBelowVersion: TSetupVersionData;
Options: set of (ioCreateKeyIfDoesntExist, ioUninsDeleteEntry,
ioUninsDeleteEntireSection, ioUninsDeleteSectionIfEmpty,
{ internally used: }
ioHasValue);
end;
const
SetupRegistryEntryStrings = 9;
SetupRegistryEntryAnsiStrings = 0;
type
PSetupRegistryEntry = ^TSetupRegistryEntry;
TSetupRegistryEntry = packed record
Subkey, ValueName, ValueData: String;
Components, Tasks, Languages, Check, AfterInstall, BeforeInstall: String;
MinVersion, OnlyBelowVersion: TSetupVersionData;
RootKey: HKEY;
PermissionsEntry: Smallint;
Typ: (rtNone, rtString, rtExpandString, rtDWord, rtBinary, rtMultiString, rtQWord);
Options: set of (roCreateValueIfDoesntExist, roUninsDeleteValue,
roUninsClearValue, roUninsDeleteEntireKey, roUninsDeleteEntireKeyIfEmpty,
roPreserveStringType, roDeleteKey, roDeleteValue, roNoError,
roDontCreateKey, ro32Bit, ro64Bit);
end;
const
SetupDeleteEntryStrings = 7;
SetupDeleteEntryAnsiStrings = 0;
type
TSetupDeleteType = (dfFiles, dfFilesAndOrSubdirs, dfDirIfEmpty);
PSetupDeleteEntry = ^TSetupDeleteEntry;
TSetupDeleteEntry = packed record
Name: String;
Components, Tasks, Languages, Check, AfterInstall, BeforeInstall: String;
MinVersion, OnlyBelowVersion: TSetupVersionData;
DeleteType: TSetupDeleteType;
end;
const
SetupRunEntryStrings = 13;
SetupRunEntryAnsiStrings = 0;
type
PSetupRunEntry = ^TSetupRunEntry;
TSetupRunEntry = packed record
Name, Parameters, WorkingDir, RunOnceId, StatusMsg, Verb: String;
Description, Components, Tasks, Languages, Check, AfterInstall, BeforeInstall: String;
MinVersion, OnlyBelowVersion: TSetupVersionData;
ShowCmd: Integer;
Wait: (rwWaitUntilTerminated, rwNoWait, rwWaitUntilIdle);
Options: set of (roShellExec, roSkipIfDoesntExist,
roPostInstall, roUnchecked, roSkipIfSilent, roSkipIfNotSilent,
roHideWizard, roRun32Bit, roRun64Bit, roRunAsOriginalUser,
roDontLogParameters, roLogOutput);
end;
const
MaxGrantPermissionEntries = 32; { must keep in synch with Helper.c }
type
{ TGrantPermissionEntry is stored inside string fields named 'Permissions' }
TGrantPermissionSid = record { must keep in synch with Helper.c }
Authority: TSIDIdentifierAuthority;
SubAuthCount: Byte;
SubAuth: array[0..1] of DWORD;
end;
TGrantPermissionEntry = record { must keep in synch with Helper.c }
Sid: TGrantPermissionSid;
AccessMask: DWORD;
end;
{ A TDiskSliceHeader record follows DiskSliceID in a SETUP-*.BIN file }
TDiskSliceHeader = packed record
TotalSize: Cardinal;
end;
{ A TMessageHeader record follows MessagesHdrID in a SETUP.MSG file }
TMessagesHeader = packed record
NumMessages: Cardinal;
TotalSize: Cardinal;
NotTotalSize: Cardinal;
CRCMessages: Longint;
end;
{ TSetupLdrOffsetTable is stored inside SetupLdr's SetupLdrOffsetTableResID
RCDATA resource }
PSetupLdrOffsetTable = ^TSetupLdrOffsetTable;
TSetupLdrOffsetTable = packed record
ID: array[1..12] of AnsiChar; { = SetupLdrOffsetTableID }
Version: LongWord; { = SetupLdrOffsetTableVersion }
TotalSize: LongWord; { Minimum expected size of setup.exe }
OffsetEXE: LongWord; { Offset of compressed setup.e32 }
UncompressedSizeEXE: LongWord; { Size of setup.e32 before compression }
CRCEXE: Longint; { CRC of setup.e32 before compression }
Offset0: LongWord; { Offset of embedded setup-0.bin data }
Offset1: LongWord; { Offset of embedded setup-1.bin data,
or 0 when DiskSpanning=yes }
TableCRC: Longint; { CRC of all prior fields in this record }
end;
{ TMessagesLangOptions is a simplified version of TSetupLanguageEntry that
is used by the uninstaller and RegSvr }
TMessagesLangOptions = packed record
ID: TMessagesLangOptionsID;
DialogFontName: array[0..31] of Char;
DialogFontSize: Integer;
Flags: set of (lfRightToLeft);
end;
TUninstallerMsgTail = packed record
ID: Longint;
Offset: Longint;
end;
const
SetupLdrOffsetTableResID = 11111;
SetupLdrOffsetTableID = 'rDlPtS'#$CD#$E6#$D7#$7B#$0B#$2A;
SetupLdrOffsetTableVersion = 1;
SetupExeModeOffset = $30;
SetupExeModeUninstaller = $6E556E49;
SetupExeModeRegSvr = $53526E49;
UninstallerMsgTailID = $67734D49;
implementation
end.