diff --git a/Templates/au3.tpl b/Templates/au3.tpl new file mode 100644 index 0000000..97eadb7 --- /dev/null +++ b/Templates/au3.tpl @@ -0,0 +1,135 @@ +[$$SETUP$$] +Comment=; +Extension=.au3 +OnlyNewEntries=1 +LogUNLOrder=0 +OutSeparateObjs=0 +NoVals=1 + +[$$HEADER$$] +{{##LINEFEED}} +{{##COMMENT}} ============================================================================================================== +{{##COMMENT}} !!! USE AUTOIT3_64.EXE TO HIT THE CORRECT REGISTRY KEYS !!! +{{##COMMENT}} ============================================================================================================== +{{##LINEFEED}} +#cs +{{##COMMENT}} Maintence.SKT: +{{##LEFTBRACKET}}] +Transaction={{##TITLE}} +TEXT=Regshot's uninstaller for "{{##TITLE}}" +SAP=0 +DeleteReadOnly = {{##DELETEREADONLY}} +DeleteDirRecurse = {{##DELETERECURSE}} +{{##LINEFEED}} +{{##COMMENT}} I18N\SAPGui-Automation.de.lng, SAPGui-Automation.en.lng: +{{##LEFTBRACKET}}{{##TITLE}}] +NAME=Unlock {{##TITLE}} +#ce +{{##LINEFEED}} +AutoItSetOption("MustDeclareVars", 1) +#RequireAdmin +{{##LINEFEED}} +Dim $bSimulation = 0 +Dim $strTitle = "Regshot's uninstaller for ""{{##TITLE}}""" & ($bSimulation ? " (SIMULATION)" : "") +Dim $bLog = 1 +Dim $hOpenFile = -1 +Dim $bAppendLog = 1 ; 1 = Append, 2 = Overwrite +Dim $bReadyMessage = 1 +Dim $LogFileName = @ScriptDir & "\" & "{{##SCRIPTNAME}}.log" +Dim $ret = 1 +If $bReadyMessage = 1 Then MsgBox (65, $strTitle, "Start script """ & @ScriptFullPath & """?", 3) +if $ret = 2 Then exit +{{##LINEFEED}} +{{##TITLE}}() +{{##LINEFEED}} +Local $strLogLine = "Script """ & @ScriptFullPath & """ finished." +_FileWriteLog($hOpenFile, $strLogLine) +If $hOpenFile <> -1 Then FileClose($hOpenFile) +If $bReadyMessage = 1 Then MsgBox (64, $strTitle, $strLogLine) +{{##LINEFEED}} +Func {{##TITLE}}() +{{##BLANK}} Dim $bDeleteReadOnly = {{##DELETEREADONLY}} +{{##BLANK}} Dim $bDeleteDirRecurse = {{##DELETERECURSE}} +{{##BLANK}} If $bLog = 1 Then $hOpenFile = FileOpen($LogFileName, $bAppendLog) +{{##BLANK}} _FileWriteLog($hOpenFile, "") +{{##BLANK}} _FileWriteLog($hOpenFile, "Script """ & @ScriptFullPath & """ started.") +{{##BLANK}} _FileWriteLog($hOpenFile, "--------------------------------------------------------------------------------------------------------------") +{{##BLANK}} _FileWriteLog($hOpenFile, "DeleteReadOnly: " & ($bDeleteReadOnly ? "1" : "0")) +{{##BLANK}} _FileWriteLog($hOpenFile, "DeleteDirRecurse: " & ($bDeleteDirRecurse ? "1" : "0")) +{{##BLANK}} _FileWriteLog($hOpenFile, "Simulation: " & ($bSimulation ? "1" : "0")) +{{##BLANK}} _FileWriteLog($hOpenFile, "--------------------------------------------------------------------------------------------------------------") + +[$$DATALINES$$] +RegDefaultVal="" +VALDELETENormal= {{##BLANK}} _REGVALDEL("{{##WHOLEKEYNAME}}", "{{##VALNAME}}") +VALDELETEShort = {{##BLANK}} _REGVALDEL("{{##WHOLEKEYNAME}}", "{{##VALNAME}}") +KEYDELETENormal= {{##BLANK}} _REGKEYDEL("{{##WHOLEKEYNAME}}") +FILEDELETENormal= {{##BLANK}} _DEL("{{##FILENAME}}", $bDeleteReadOnly) +FILEDELETEDeleteReadOnly={{##BLANK}} _DEL("{{##FILENAME}}", $bDeleteReadOnly) +DIRDELETENormal= {{##BLANK}} _RMDIR("{{##DIRNAME}}", $bDeleteDirRecurse) +DIRDELETEDeleteRecurse= {{##BLANK}} _RMDIR("{{##DIRNAME}}", $bDeleteDirRecurse) + +[$$FOOTER$$] +Endfunc +{{##LINEFEED}} +{{##COMMENT}} -------------------------------------------------------------------------------------------------------------- +{{##COMMENT}} Coding, Routines +{{##COMMENT}} -------------------------------------------------------------------------------------------------------------- +Func _RMDIR($DIR, $RECURSE) +{{##BLANK}} Local $strLogLine = "Directory deleted : " +{{##BLANK}} If Not FileExists($DIR) Then +{{##BLANK}} $strLogLine = "=> Directory doesn't exist: " +{{##BLANK}} Elseif Not $bSimulation = 1 Then +{{##BLANK}} If Not DirRemove($DIR, $RECURSE) Then $strLogLine = "=> Directory couldn't be deleted: " +{{##BLANK}} Endif +{{##BLANK}} $strLogLine = $strLogLine & """" & $DIR & """" +{{##BLANK}} _FileWriteLog($hOpenFile, $strLogLine) +EndFunc +{{##LINEFEED}} +Func _DEL($FILE, $READONLY) +{{##BLANK}} Local $strLogLine = "File(s) deleted : " +{{##BLANK}} If Not FileExists($FILE) Then +{{##BLANK}} $strLogLine = "=> File doesn't exist: " +{{##BLANK}} Elseif Not $bSimulation = 1 Then +{{##BLANK}} If $READONLY = 1 Then FileSetAttrib($FILE, "-R") +{{##BLANK}} If Not FileDelete($FILE) Then $strLogLine = "=> File couldn't be deleted: " +{{##BLANK}} Endif +{{##BLANK}} $strLogLine = $strLogLine & """" & $FILE & """" +{{##BLANK}} _FileWriteLog($hOpenFile, $strLogLine) +EndFunc +{{##LINEFEED}} +Func _REGKEYDEL($KEYNAME) +{{##BLANK}} Local $strLogLine = "Registry key deleted: " +{{##BLANK}} RegEnumKey($KEYNAME, 0) +{{##BLANK}} If @error = 1 Then +{{##BLANK}} $strLogLine="=> Registry key doesn't exist: " +{{##BLANK}} ElseIf Not $bSimulation = 1 Then +{{##BLANK}} If RegDelete($KEYNAME) = 2 Then $strLogLine = "=> Registry key couldn't be deleted: " +{{##BLANK}} Endif +{{##BLANK}} $strLogLine = $strLogLine & """" & $KEYNAME & """" +{{##BLANK}} _FileWriteLog($hOpenFile, $strLogLine) +EndFunc +{{##LINEFEED}} +Func _REGVALDEL($KEYNAME, $VALNAME) +{{##BLANK}} Local $strLogLine = "Registry value deleted: " +{{##BLANK}} RegRead($KEYNAME, $VALNAME) +{{##BLANK}} If @error = -1 or @error = 1 Then +{{##BLANK}} $strLogLine="=> Registry value doesn't exist: " +{{##BLANK}} ElseIf $bSimulation = 0 Then +{{##BLANK}} If RegDelete($KEYNAME, $VALNAME) = 2 Then $strLogLine = "=> Registry value couldn't be deleted: " +{{##BLANK}} Endif +{{##BLANK}} $strLogLine = $strLogLine & """" & $KEYNAME & """, """ & $VALNAME & """" +{{##BLANK}} _FileWriteLog($hOpenFile, $strLogLine) +EndFunc +{{##LINEFEED}} +Func _FileWriteLog($hOpenFile, $sLogMsg ) +{{##BLANK}} Local $sDateNow +{{##BLANK}} Local $sTimeNow +{{##BLANK}} Local $sMsg +{{##LINEFEED}} +{{##BLANK}} $sDateNow = @MDAY & "." & @MON & "." & @YEAR +{{##BLANK}} $sTimeNow = @Hour & ":" & @MIN & ":" & @SEC & "." & @MSEC +{{##BLANK}} $sMsg = $sDateNow & " " & $sTimeNow & " " & $sLogMsg +{{##BLANK}} +{{##BLANK}} If $bLog = 1 Then FileWriteLine($hOpenFile, $sMsg) +EndFunc diff --git a/Templates/cmd.tpl b/Templates/cmd.tpl new file mode 100644 index 0000000..0ed64f0 --- /dev/null +++ b/Templates/cmd.tpl @@ -0,0 +1,18 @@ +[$$SETUP$$] +Comment=:: +Extension=.cmd +OnlyNewEntries=1 +LogUNLOrder=0 +OutSeparateObjs=0 +NoVals=1 +UseLongRegHead=0 + +[$$DATALINES$$] +RegDefaultVal={{##BS}}{{##BS}}e{{##DEL}} +VALDELETENormal= REG DELETE "{{##WHOLEKEYNAME}}" /f /reg:64 /v "{{##VALNAME}}" +VALDELETEShort = REG DELETE "{{##WHOLEKEYNAME}}" /f /reg:64 /v "{{##VALNAME}}" +KEYDELETENormal= REG DELETE "{{##WHOLEKEYNAME}}" /f /reg:64 +FILEDELETENormal= DEL "{{##FILENAME}}" +FILEDELETEDeleteReadOnly=DEL /F "{{##FILENAME}}" +DIRDELETENormal= RMDIR "{{##DIRNAME}}" +DIRDELETEDeleteRecurse= RMDIR /S /Q "{{##DIRNAME}}" diff --git a/Templates/common-deutsch.tpl b/Templates/common-deutsch.tpl new file mode 100644 index 0000000..dafe45e --- /dev/null +++ b/Templates/common-deutsch.tpl @@ -0,0 +1,53 @@ +[$$HEADER$$] +{{##COMMENT}} +{{##COMMENT}} Maintenance-File {{##SCRIPTFILE}} +{{##COMMENT}} @ Patrick (skydive241@gmx.de) +{{##COMMENT}} !!!!!!!! H A N D L E W I T H C A R E !!!!!!!! +{{##COMMENT}} +{{##COMMENT}} {{##VERSION}} +{{##COMMENT}} Kommentar: {{##COMMENTTEXT}} +{{##COMMENT}} Datum und Zeit: {{##DATE1}}, {{##DATE2}} +{{##COMMENT}} Computer: {{##COMPUTER1}}, {{##COMPUTER2}} +{{##COMMENT}} Benutzername: {{##USER1}}, {{##USER1}} + +[$$TABLEHEAD$$] +{{##LINEFEED}} +{{##COMMENT}} -------------------------------------------------------------------------------------------------------------- +{{##COMMENT}} {{##PARTCOUNTTEXT}} {{##PARTCOUNT}} +{{##COMMENT}} -------------------------------------------------------------------------------------------------------------- + +[$$USABLE MACROS$$] +{{##COMMENT}} +{{##BLANK}} +{{##LINEFEED}} +{{##LEFTBRACKET}} +{{##TITLE}} +{{##SCRIPTFILE}} +{{##SCRIPTNAME}} +{{##OUTDIR}} +{{##OUTFILE}} +{{##VERSION}} +{{##DATE1}} +{{##DATE2}} +{{##COMPUTER1}} +{{##COMPUTER2}} +{{##USER1}} +{{##USER1}} +{{##COMMENTTEXT}} +{{##PARTCOUNTTEXT}} +{{##PARTCOUNT}} +{{##DELETERECURSE}} +{{##DELETEREADONLY}} + +{{##ROOTKEYNAME}} +{{##WHOLEKEYNAME}} +{{##KEYNAME}} +{{##VALNAME}} +{{##VALTYPE}} +{{##DIRNAME}} +{{##DIROFFILENAME}} +{{##FILENAME}} +{{##BLANK}} +{{##LINEFEED}} +{{##BS}} +{{##DEL}} \ No newline at end of file diff --git a/Templates/common-english.tpl b/Templates/common-english.tpl new file mode 100644 index 0000000..20ac6f3 --- /dev/null +++ b/Templates/common-english.tpl @@ -0,0 +1,53 @@ +[$$HEADER$$] +{{##COMMENT}} +{{##COMMENT}} Maintenance-File {{##SCRIPTFILE}} +{{##COMMENT}} @ Patrick (skydive241@gmx.de) +{{##COMMENT}} !!!!!!!! H A N D L E W I T H C A R E !!!!!!!! +{{##COMMENT}} +{{##COMMENT}} {{##VERSION}} +{{##COMMENT}} Comments: {{##COMMENTTEXT}} +{{##COMMENT}} Datetime: {{##DATE1}}, {{##DATE2}} +{{##COMMENT}} Computer: {{##COMPUTER1}}, {{##COMPUTER2}} +{{##COMMENT}} Username: {{##USER1}}, {{##USER1}} + +[$$TABLEHEAD$$] +{{##LINEFEED}} +{{##COMMENT}} -------------------------------------------------------------------------------------------------------------- +{{##COMMENT}} {{##PARTCOUNTTEXT}} {{##PARTCOUNT}} +{{##COMMENT}} -------------------------------------------------------------------------------------------------------------- + +[$$USABLE MACROS$$] +{{##COMMENT}} +{{##BLANK}} +{{##LINEFEED}} +{{##LEFTBRACKET}} +{{##TITLE}} +{{##SCRIPTFILE}} +{{##SCRIPTNAME}} +{{##OUTDIR}} +{{##OUTFILE}} +{{##VERSION}} +{{##DATE1}} +{{##DATE2}} +{{##COMPUTER1}} +{{##COMPUTER2}} +{{##USER1}} +{{##USER1}} +{{##COMMENTTEXT}} +{{##PARTCOUNTTEXT}} +{{##PARTCOUNT}} +{{##DELETERECURSE}} +{{##DELETEREADONLY}} + +{{##ROOTKEYNAME}} +{{##WHOLEKEYNAME}} +{{##KEYNAME}} +{{##VALNAME}} +{{##VALTYPE}} +{{##DIRNAME}} +{{##DIROFFILENAME}} +{{##FILENAME}} +{{##BLANK}} +{{##LINEFEED}} +{{##BS}} +{{##DEL}} \ No newline at end of file diff --git a/Templates/html.tpl b/Templates/html.tpl new file mode 100644 index 0000000..b6e5dae --- /dev/null +++ b/Templates/html.tpl @@ -0,0 +1,105 @@ +[$$SETUP$$] +Extension=.htm +NoVals=0 +Logger=1 + +[$$HEADER$$] + +[$$DATALINES$$] +RegDefaultVal="" +MultiSzStringDivider={break} +;MultiSzStringDivider={break} +;Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows\Windows Error Reporting\TermReason\19476"; ValueName: "Terminator"; Components: registry ; Flags: deletevalue +;Root: "HKCU"; Subkey: "SOFTWARE\Seifert\WinDirStat\Settings"; Flags: deletekey; Components: registry +;Root: "HKU"; Subkey: "S-1-5-19\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Wpad\34-31-c4-66-c2-38"; ValueType: binary; ValueName: "WpadDecisionTime"; Components: registry ; ValueData: +VALADDNormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; ValueType: {{##VALTYPE}}; Components: registry; ValueData:{{##BLANK}} +VALADDShort= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; ValueType: {{##VALTYPE}}; Components: registry; ValueData:{{##BLANK}} +VALCHANGENormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; ValueType: {{##VALTYPE}}; Components: registry; ValueData:{{##BLANK}} +VALCHANGEShort= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; ValueType: {{##VALTYPE}}; Components: registry; ValueData:{{##BLANK}} +VALDELETENormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; Components: registry ; Flags: deletevalue +VALDELETEShort = Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; Components: registry ; Flags: deletevalue +KEYADDNormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; Components: registry +KEYDELETENormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; Flags: deletekey; Components: registry +;Type: files; Name: "{{##FILENAME}}"; Components: filesystem +FILEADDNormal= Source: "{{##FILENAME}}"; DestDir:"{{##DIROFFILENAME}}"; Components: filesystem +FILEDELETENormal= Type: files; Name: "{{##FILENAME}}"; Components: filesystem +FILEDELETEDeleteReadOnly=Type: files; Name: "{{##FILENAME}}"; Components: filesystem +DIRADDNormal= Name: "{{##DIRNAME}}"; Components: filesystem +DIRDELETENormal= Type: dirifempty; Name: "{{##DIRNAME}}"; Components: filesystem +DIRDELETEDeleteRecurse= Type: filesandordirs; Name: "{{##DIRNAME}}"; Components: filesystem + +[$$REGPREFS$$] +NameREG_SZ=string +NameREG_EXPAND_SZ=expandsz +NameREG_MULTI_SZ=multisz +NameREG_DWORD_LITTLE_ENDIAN=dword +NameREG_DWORD_BIG_ENDIAN=dword +NameREG_QWORD_LITTLE_ENDIAN=qword +NameREG_NONE=none +NameREG_BINARY=binary +PrefixREG_SZ= +PrefixREG_EXPAND_SZ= +PrefixREG_MULTI_SZ= +PrefixREG_DWORD_LITTLE_ENDIAN= +PrefixREG_DWORD_BIG_ENDIAN= +PrefixREG_QWORD_LITTLE_ENDIAN= +PrefixREG_NONE= +PrefixREG_BINARY= + +[$$TABLEHEAD$$] + +{{##BLANK}}   + + +{{##BLANK}} {{##PARTCOUNTTEXT}} {{##PARTCOUNT}} + + +[$$STARTREGSECTION$$] + + +[$$STARTFILEADDPART$$] + +[$$STARTDIRADDPART$$] + +[$$STARTFILEDELPART$$] + +[$$STARTDIRDELPART$$] + +[$$FOOTER$$] +{{##BLANK}} + + +[$$CSS$$] +body, table { background-color: #FFFFFF; font-family: Tahoma; font-size: 10pt } +div.m { background-color: #FFFFE0; width: 100%; text-align: center; border: 1px solid #808080; padding-top: 1px; padding-bottom: 3px } +h2 { font-size: 11pt; text-align: center } +td { vertical-align: top; padding-left: 8px; padding-right: 8px; padding-top: 2px; padding-bottom: 2px } +#info { border: 1px solid #E0E0E0; background-color: #F8F8F4 } +#info tr.a { background-color: #FFFFFF } +#info tr.b { background-color: #F0F0EC } +#info tr.h { background-color: #DBE8F0; text-align: center; font-weight: bold } +#info td.a { text-align: left } +#info td.b { text-align: right } +#info td.c { text-align: justify } +#info td.h { text-align: center } +#info span.i { font-style: italic; color: #800000 } +#hive { width: 100% } +#hive tr.a { background-color: #FFFFFF } +#hive tr.b { background-color: #F4F4F4 } +#hive tr.c { background-color: #FFFFFF; font-family: Courier New } +#hive tr.d { background-color: #F0F4F4; font-family: Courier New } +#hive tr.e { background-color: #DAEAD5; font-weight: bold } +#hive tr.f { background-color: #FFFFFF; font-family: Courier New } +#hive tr.g { background-color: #F4F8F4; font-family: Courier New } +#hive tr.h { background-color: #DBE8F0; font-weight: bold } +#hive span.r { color: #FF0000 } +#file { width: 100% } +#file tr.a { background-color: #FFFFFF } +#file tr.b { background-color: #F4F8FC } +#file tr.h { background-color: #DBE8F0; font-weight: bold } +.hash td { font-family: Courier New; font-size: 9pt; padding-top: 0px; padding-bottom: 0px; text-align:right } +a { color: #0000FF } +a:active { color: #FF0000 } +a:hover { color: #FF0000 } +a:link { color: #0000FF } +a:visited { color: #800080 } diff --git a/Templates/iss.tpl b/Templates/iss.tpl new file mode 100644 index 0000000..88aa79c --- /dev/null +++ b/Templates/iss.tpl @@ -0,0 +1,102 @@ +[$$SETUP$$] +Extension=.iss +UseLongRegHead=0 +LogUNLOrder=0 +OutSeparateObjs=0 +NoVals=0 +LogEnvironmentStrings=0 + +[$$HEADER$$] +#define MyAppName "Regshot's uninstaller for ""{{##TITLE}}"" +#define MyAppVersion "1.0" +{{##LINEFEED}} +{{##LEFTBRACKET}}Setup] +AppName={#MyAppName} +AppVersion={#MyAppVersion} +ArchitecturesAllowed=x64 arm64 ia64 +CreateAppDir=no +OutputBaseFilename={{##SCRIPTNAME}} +Compression=lzma +SolidCompression=yes +Uninstallable=no +SetupLogging=True +OutputDir={{##OUTDIR}} +{{##LINEFEED}} +{{##LEFTBRACKET}}Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" +{{##LINEFEED}} +{{##LEFTBRACKET}}Types] +Name: "full"; Description: "Full maintenance"; Flags: iscustom +Name: "filesystem"; Description: "Filesystem maintenance" +Name: "registry"; Description: "Registry maintenance" +{{##LINEFEED}} +{{##LEFTBRACKET}}Components] +Name: "Filesystem"; Types: full filesystem; Description: "Filesystem maintenance" +Name: "Registry"; Types: full registry; Description: "Registry maintenance" + +[$$DATALINES$$] +RegDefaultVal="" +MultiSzStringDivider={break} +;MultiSzStringDivider={break} +;Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows\Windows Error Reporting\TermReason\19476"; ValueName: "Terminator"; Components: registry ; Flags: deletevalue +;Root: "HKCU"; Subkey: "SOFTWARE\Seifert\WinDirStat\Settings"; Flags: deletekey; Components: registry +;Root: "HKU"; Subkey: "S-1-5-19\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Wpad\34-31-c4-66-c2-38"; ValueType: binary; ValueName: "WpadDecisionTime"; Components: registry ; ValueData: +VALADDNormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; ValueType: {{##VALTYPE}}; Components: registry; ValueData:{{##BLANK}} +VALADDShort= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; ValueType: {{##VALTYPE}}; Components: registry; ValueData:{{##BLANK}} +VALCHANGENormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; ValueType: {{##VALTYPE}}; Components: registry; ValueData:{{##BLANK}} +VALCHANGEShort= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; ValueType: {{##VALTYPE}}; Components: registry; ValueData:{{##BLANK}} +VALDELETENormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; Components: registry ; Flags: deletevalue +VALDELETEShort = Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; ValueName: "{{##VALNAME}}"; Components: registry ; Flags: deletevalue +KEYADDNormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; Components: registry +KEYDELETENormal= Root: "{{##ROOTKEYNAME}}"; Subkey: "{{##KEYNAME}}"; Flags: deletekey; Components: registry +;Type: files; Name: "{{##FILENAME}}"; Components: filesystem +FILEADDNormal= Source: "{{##FILENAME}}"; DestDir:"{{##DIROFFILENAME}}"; Components: filesystem +FILEDELETENormal= Type: files; Name: "{{##FILENAME}}"; Components: filesystem +FILEDELETEDeleteReadOnly=Type: files; Name: "{{##FILENAME}}"; Components: filesystem +DIRADDNormal= Name: "{{##DIRNAME}}"; Components: filesystem +DIRDELETENormal= Type: dirifempty; Name: "{{##DIRNAME}}"; Components: filesystem +DIRDELETEDeleteRecurse= Type: filesandordirs; Name: "{{##DIRNAME}}"; Components: filesystem + +[$$REGPREFS$$] +NameREG_SZ=string +NameREG_EXPAND_SZ=expandsz +NameREG_MULTI_SZ=multisz +NameREG_DWORD_LITTLE_ENDIAN=dword +NameREG_DWORD_BIG_ENDIAN=dword +NameREG_QWORD_LITTLE_ENDIAN=qword +NameREG_NONE=none +NameREG_BINARY=binary +PrefixREG_SZ= +PrefixREG_EXPAND_SZ= +PrefixREG_MULTI_SZ= +PrefixREG_DWORD_LITTLE_ENDIAN= +PrefixREG_DWORD_BIG_ENDIAN= +PrefixREG_QWORD_LITTLE_ENDIAN= +PrefixREG_NONE= +PrefixREG_BINARY= + +[$$STARTREGSECTION$$] +{{##LINEFEED}} +{{##LEFTBRACKET}}Registry] + +[$$STARTFILEADDPART$$] +{{##LINEFEED}} +{{##LEFTBRACKET}}Files] + +[$$STARTDIRADDPART$$] +{{##LINEFEED}} +{{##LEFTBRACKET}}Dirs] + +[$$STARTFILEDELPART$$] +{{##LINEFEED}} +{{##LEFTBRACKET}}InstallDelete] + +[$$STARTDIRDELPART$$] +{{##LINEFEED}} +{{##LEFTBRACKET}}InstallDelete] + +[$$FOOTER$$] +{{##LEFTBRACKET}}Messages] +ReadyLabel1=[name]. +ReadyLabel2b=Click (Un)install to continue. +ButtonInstall=(Un)install diff --git a/Templates/nsi.tpl b/Templates/nsi.tpl new file mode 100644 index 0000000..0ac1273 --- /dev/null +++ b/Templates/nsi.tpl @@ -0,0 +1,93 @@ +[$$SETUP$$] +Extension=.nsi +NoVals=0 +LogUNLOrder=0 +LogEnvironmentStrings=0 +OutSeparateObjs=0 + +[$$HEADER$$] +!include "MUI2.nsh" +{{##LINEFEED}} +Name "{{##SCRIPTNAME}}" +OutFile "{{##OUTFILE}}.exe" +RequestExecutionLevel admin +Unicode True +ShowInstDetails Show +InstallDir "$EXEDIR" +{{##LINEFEED}} +{{##COMMENT}}-------------------------------- +{{##COMMENT}} Pages +{{##COMMENT}}-------------------------------- +!insertmacro MUI_PAGE_COMPONENTS +!insertmacro MUI_PAGE_INSTFILES +{{##LINEFEED}} +{{##COMMENT}}-------------------------------- +{{##COMMENT}} Languages +{{##COMMENT}}-------------------------------- +!insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "German" + +[$$STARTREGSECTION$$] +{{##LINEFEED}} +Section "Registry" +{{##COMMENT}}---------------------------------------------------------- +{{##COMMENT}} Switch LogSet On if NSIS_CONFIG_LOG build setting is used +{{##COMMENT}} LogSet On +{{##COMMENT}}---------------------------------------------------------- +{{##BLANK}} SetRegView 64 + +[$$ENDREGSECTION$$] +{{##LINEFEED}} +SectionEnd + +[$$STARTFSSECTION$$] +{{##LINEFEED}} +Section "Filesystem" +{{##COMMENT}}---------------------------------------------------------- +{{##COMMENT}} Switch LogSet On if NSIS_CONFIG_LOG build setting is used +{{##COMMENT}} LogSet On +{{##COMMENT}}---------------------------------------------------------- + +[$$ENDFSSECTION$$] +{{##LINEFEED}} +SectionEnd + +[$$DATALINES$$] +RegDefaultVal="" +VALADDNormal= {{##BLANK}} WriteReg{{##VALTYPE}} {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}"{{##BLANK}} +VALADDShort= {{##BLANK}} WriteReg{{##VALTYPE}} {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}"{{##BLANK}} +VALCHANGENormal= {{##BLANK}} WriteReg{{##VALTYPE}} {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}"{{##BLANK}} +VALCHANGEShort= {{##BLANK}} WriteReg{{##VALTYPE}} {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}"{{##BLANK}} +VALDELETENormal= {{##BLANK}} DeleteRegValue {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}" +VALDELETEShort= {{##BLANK}} DeleteRegValue {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}" +KEYADDNormal= {{##BLANK}} WriteRegNone {{##ROOTKEYNAME}} "{{##KEYNAME}}" "" +KEYDELETENormal= {{##BLANK}} DeleteRegKey {{##ROOTKEYNAME}} "{{##KEYNAME}}" +FILEADDNormal= {{##BLANK}} File "/oname={{##FILENAME}}" "{{##FILENAME}}" +FILEDELETENormal= {{##BLANK}} Delete "{{##FILENAME}}" +FILEDELETEDeleteReadOnly={{##BLANK}} Delete "{{##FILENAME}}" +DIRADDNormal= {{##BLANK}} CreateDirectory "{{##DIRNAME}}" +DIRDELETENormal= {{##BLANK}} RMDir "{{##DIRNAME}}" +DIRDELETEDeleteRecurse= {{##BLANK}} RMDir /r "{{##DIRNAME}}" +; Type specific macros +VALADDNormalQWORD= ; WriteReg{{##VALTYPE}} {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}"{{##BLANK}} +VALADDShortQWORD= ; WriteReg{{##VALTYPE}} {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}"{{##BLANK}} +VALCHANGENormalQWORD= ; WriteReg{{##VALTYPE}} {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}"{{##BLANK}} +VALCHANGEShortQWORD= ; WriteReg{{##VALTYPE}} {{##ROOTKEYNAME}} "{{##KEYNAME}}" "{{##VALNAME}}"{{##BLANK}} + +[$$REGPREFS$$] +NameREG_SZ=Str +NameREG_EXPAND_SZ=ExpandStr +NameREG_MULTI_SZ=MultiStr /REGEDIT5 +NameREG_DWORD_LITTLE_ENDIAN=DWORD +NameREG_DWORD_BIG_ENDIAN=DWORD +NameREG_QWORD_LITTLE_ENDIAN=QWORD +NameREG_NONE=None +NameREG_BINARY=Bin +PrefixREG_SZ= +PrefixREG_EXPAND_SZ= +PrefixREG_MULTI_SZ= +PrefixREG_DWORD_LITTLE_ENDIAN= +PrefixREG_DWORD_BIG_ENDIAN= +PrefixREG_QWORD_LITTLE_ENDIAN= +PrefixREG_NONE= +PrefixREG_BINARY= \ No newline at end of file diff --git a/Templates/reg4.tpl b/Templates/reg4.tpl new file mode 100644 index 0000000..a3db1b1 --- /dev/null +++ b/Templates/reg4.tpl @@ -0,0 +1,27 @@ +[$$SETUP$$] +Extension=.reg +LogUNLOrder=0 +UseLongRegHead=1 +OutSeparateObjs=0 +NoVals=0 +GroupRegKeys=1 + +BOM=0 +CodePage=0 + +Filesystem=0 + +[$$HEADER$$] +REGEDIT4 + +[$$DATALINES$$] +RegDefaultVal= +SuppressedKeyPart= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}} +VALADDNormal= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"= +VALADDShort= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"= +VALCHANGENormal= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"= +VALCHANGEShort= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"= +VALDELETENormal= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"=- +KEYADDNormal= {{##LINEFEED}}[{{##WHOLEKEYNAME}}] +KEYDELETENormal= {{##LINEFEED}}[-{{##WHOLEKEYNAME}}] + diff --git a/Templates/reg5.tpl b/Templates/reg5.tpl new file mode 100644 index 0000000..5e4f583 --- /dev/null +++ b/Templates/reg5.tpl @@ -0,0 +1,33 @@ +[$$SETUP$$] +Extension=.reg +LogUNLOrder=0 +UseLongRegHead=1 +OutSeparateObjs=0 +NoVals=0 +GroupRegKeys=1 + +BOM=1 +CodePage=-1 + +Registry=1 + +[$$HEADER$$] +Windows Registry Editor Version 5.00 + +[$$DATALINES$$] +RegDefaultVal= +SuppressedKeyPart= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}} +VALADDNormal= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"= +VALADDShort= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"= +VALCHANGENormal= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"= +VALCHANGEShort= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"= +VALDELETENormal= {{##LINEFEED}}[{{##WHOLEKEYNAME}}]{{##LINEFEED}}"{{##VALNAME}}"=- +KEYADDNormal= {{##LINEFEED}}[{{##WHOLEKEYNAME}}] +KEYDELETENormal= {{##LINEFEED}}[-{{##WHOLEKEYNAME}}] + +[$$DATAESCAPES$$] +"=\" + +[$$NAMEESCAPES$$] +"=\" +\=\\ diff --git a/Templates/report.css b/Templates/report.css new file mode 100644 index 0000000..6a69f7a --- /dev/null +++ b/Templates/report.css @@ -0,0 +1,33 @@ +body, table { background-color: #FFFFFF; font-family: Tahoma; font-size: 10pt } +div.m { background-color: #FFFFE0; width: 100%; text-align: center; border: 1px solid #808080; padding-top: 1px; padding-bottom: 3px } +h2 { font-size: 11pt; text-align: center } +td { vertical-align: top; padding-left: 8px; padding-right: 8px; padding-top: 2px; padding-bottom: 2px } +#info { border: 1px solid #E0E0E0; background-color: #F8F8F4 } +#info tr.a { background-color: #FFFFFF } +#info tr.b { background-color: #F0F0EC } +#info tr.h { background-color: #DBE8F0; text-align: center; font-weight: bold } +#info td.a { text-align: left } +#info td.b { text-align: right } +#info td.c { text-align: justify } +#info td.h { text-align: center } +#info span.i { font-style: italic; color: #800000 } +#hive { width: 100% } +#hive tr.a { background-color: #FFFFFF } +#hive tr.b { background-color: #F4F4F4 } +#hive tr.c { background-color: #FFFFFF; font-family: Courier New } +#hive tr.d { background-color: #F0F4F4; font-family: Courier New } +#hive tr.e { background-color: #DAEAD5; font-weight: bold } +#hive tr.f { background-color: #FFFFFF; font-family: Courier New } +#hive tr.g { background-color: #F4F8F4; font-family: Courier New } +#hive tr.h { background-color: #DBE8F0; font-weight: bold } +#hive span.r { color: #FF0000 } +#file { width: 100% } +#file tr.a { background-color: #FFFFFF } +#file tr.b { background-color: #F4F8FC } +#file tr.h { background-color: #DBE8F0; font-weight: bold } +.hash td { font-family: Courier New; font-size: 9pt; padding-top: 0px; padding-bottom: 0px; text-align:right } +a { color: #0000FF } +a:active { color: #FF0000 } +a:hover { color: #FF0000 } +a:link { color: #0000FF } +a:visited { color: #800080 } diff --git a/Templates/txt.tpl b/Templates/txt.tpl new file mode 100644 index 0000000..0509891 --- /dev/null +++ b/Templates/txt.tpl @@ -0,0 +1,5 @@ +[$$SETUP$$] +Comment= +Extension=.txt +NoVals=0 +Logger=1 diff --git a/Templates/unl.tpl b/Templates/unl.tpl new file mode 100644 index 0000000..c5969fc --- /dev/null +++ b/Templates/unl.tpl @@ -0,0 +1,37 @@ +[$$SETUP$$] +Comment=; +Extension=.unl +OutSeparateObjs=0 +Logger=1 + +[$$HEADER$$] +{{##LINEFEED}} +Title={{##TITLE}} +Log=1 +{{##COMMENT}} NewFileLog=1 +{{##COMMENT}} LogOnlyErrors=1 +{{##COMMENT}} Simulation=1 +DeleteReadOnly={{##DELETEREADONLY}} +DeleteRecurse={{##DELETERECURSE}} + +[$$DATALINES$$] +RegDefaultVal="{Standard}" +VALADDNormal= ; Registry=+"{{##WHOLEKEYNAME}}","{{##VALNAME}}"= +VALADDShort = ; Registry=+"{{##WHOLEKEYNAME}}","{{##VALNAME}}" +VALCHANGENormal= ; Registry="{{##WHOLEKEYNAME}}","{{##VALNAME}}"= +VALCHANGEShort= ; Registry="{{##WHOLEKEYNAME}}","{{##VALNAME}}" +VALDELETENormal= Registry="{{##WHOLEKEYNAME}}","{{##VALNAME}}"= +VALDELETEShort= Registry="{{##WHOLEKEYNAME}}","{{##VALNAME}}" +KEYADDNormal= ; Registry=+"{{##WHOLEKEYNAME}}" +KEYDELETENormal= Registry="{{##WHOLEKEYNAME}}" +FILEADDNormal= ; File=+"{{##FILENAME}}" +FILEADDDeleteReadOnly= ; File=+"{{##FILENAME}}" +FILECHANGENormal= ; File="{{##FILENAME}}" +FILEDELETENormal= File="{{##FILENAME}}" +FILEDELETEDeleteReadOnly=File="{{##FILENAME}}" +DIRCHANGENormal= ; Directory="{{##DIRNAME}}" +DIRADDNormal= ; Directory=+"{{##DIRNAME}}" +DIRADDDeleteRecurse= ; Directory=+"{{##DIRNAME}}" +DIRDELETENormal= Directory="{{##DIRNAME}}" +DIRDELETEDeleteRecurse= Directory="{{##DIRNAME}}" + diff --git a/regshot.ini b/regshot.ini index c9b9388..1b5fb41 100644 --- a/regshot.ini +++ b/regshot.ini @@ -10,7 +10,7 @@ [Setup] Title=Regshot Language=Deutsch -Flag=4 +Flag=2 ;ExtDir=C:\;D:\ NoFiltersWhenLoading=1 DontDisplayInfoAfterShot=1 @@ -26,7 +26,7 @@ OnlyNewVals=0 Editor=C:\Temp\cuda\cudatext.exe ShowSIDFilterRules=1 ExpandLevels=4 -MaxNodes=999 +MaxNodes=5000 MaxLines=5000 [Registry-Scan] @@ -37,8 +37,8 @@ HKEY_CURRENT_USER=1 [Output] OpenEditor=1 BATFile=0 -UNLFile=1 -HTMFile=0 +UNLFile=0 +HTMFile=1 TXTFile=0 ISSDeinstallFile=0 ISSInstallFile=0 @@ -47,8 +47,8 @@ NSIInstallFile=0 RegDeinstallFile=0 RegInstallFile=0 ; -DeleteDirNotEmpty=0 -DeleteReadOnly=0 +DeleteDirNotEmpty=1 +DeleteReadOnly=1 LogEnvironmentStrings=0 LogUNLOrder=0 ;CP_UTF8 (65001): Unicode UTF-8 @@ -60,6 +60,7 @@ OutSeparateObjs=0 OutMaxResultLines=100 CheckResult=0 SuppressLogs=1 +AU3File=0 [REG-COMMENT] ; -------------------------------------------------------------------------------------------------------------- @@ -96,6 +97,7 @@ NSIEditor=C:\Temp\nsis-3.06.1-setup\makensisw.exe [UNL] OnlyNewEntries=0 NoVals=1 +NoDeletedEntries=1 [UNL-Output] ;Silent=1 @@ -151,6 +153,77 @@ HKU\S-1-5-80-3017052307-2994996872-1615411526-3164924635-3391446484_Classes=1 HKU\S-1-5-80-3017052307-2994996872-1615411526-3164924635-3391446484=1 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18=1 HKLM\SYSTEM\ResourcePolicyStore\ResourceSets\Policies=1 +HKLM\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModel=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx=1 +HKCU\SOFTWARE\Classes\Extensions\ContractId=1 +HKLM\SYSTEM\ResourcePolicyStore\ResourceSets=1 +HKLM\SOFTWARE\Classes\CLSID=1 +HKLM\SOFTWARE\Classes\Interface=1 +HKLM\SOFTWARE\Classes\PackagedCom=1 +HKLM\SOFTWARE\Classes\TypeLib=1 +HKLM\SOFTWARE\Classes\WOW6432Node=1 +HKLM\SOFTWARE\Google=1 +HKLM\SOFTWARE\Microsoft\Active Setup=1 +HKLM\SOFTWARE\Microsoft\IdentityCRL=1 +HKLM\SOFTWARE\Microsoft\Internet Explorer=1 +HKLM\SOFTWARE\Microsoft\LanguageOverlay=1 +HKLM\SOFTWARE\Microsoft\MpSigStub=1 +HKLM\SOFTWARE\Microsoft\Multimedia=1 +HKLM\SOFTWARE\Microsoft\RemovalTools=1 +HKLM\SOFTWARE\Microsoft\SecurityManager=1 +HKLM\SOFTWARE\Microsoft\SystemCertificates=1 +HKLM\SOFTWARE\Microsoft\Wbem=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Census=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Diagnostics=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\InstallService=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Mrt=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OneSettings=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\VFUProvider=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WaaSAssessment=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT=1 +HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Wosc=1 +HKLM\SOFTWARE\Microsoft\Windows Defender=1 +HKLM\SOFTWARE\Microsoft\Windows NT=1 +HKLM\SOFTWARE\Microsoft\Windows Search=1 +HKLM\SOFTWARE\Microsoft\Windows Security Health=1 +HKLM\SOFTWARE\Microsoft\WindowsSelfHost=1 +HKLM\SOFTWARE\Microsoft\WindowsUpdate=1 +HKLM\SOFTWARE\WOW6432Node=1 +HKLM\SYSTEM\ActivationBroker=1 +HKLM\SYSTEM\HardwareConfig=1 +HKLM\SYSTEM\Input=1 +HKLM\SYSTEM\Keyboard Layout=1 +HKLM\SYSTEM\Maps=1 +HKLM\SYSTEM\MountedDevices=1 +HKLM\SYSTEM\ResourceManager=1 +HKLM\SYSTEM\ResourcePolicyStore=1 +HKLM\SYSTEM\RNG=1 +HKLM\SYSTEM\Select=1 +HKLM\SYSTEM\Setup=1 +HKLM\SYSTEM\Software=1 +HKLM\SYSTEM\State=1 +HKLM\SYSTEM\WaaS=1 +HKLM\SYSTEM\WPA=1 +HKU\.DEFAULT=1 +HKU\S-1-5-18=1 +HKU\S-1-5-20=1 +HKCU\Printers=1 +HKCU\SOFTWARE\Classes=1 +HKCU\SOFTWARE\Microsoft\Edge=1 +HKCU\SOFTWARE\Microsoft\EdgeUpdate=1 +HKCU\SOFTWARE\Microsoft\OneDrive=1 +HKCU\SOFTWARE\Microsoft\RestartManager=1 +HKCU\SOFTWARE\Microsoft\Windows=1 +HKCU\SOFTWARE\RegisteredApplications=1 +HKLM\SYSTEM=1 +HKCU\SOFTWARE\Microsoft=1 [SkipRegKey.test] HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib=1 @@ -164,11 +237,10 @@ HKCU\Software\Classes\VirtualStore=1 [SkipDir] %ProgramFiles%=0 %ProgramFiles% (x86)=0 -; wird als Users\AllUsers protokolliert: %ALLUSERSPROFILE%=1 %SystemRoot%\winsxs=0 %SystemDrive%\System=1 -%SystemDrive%\temp=1 +%SystemDrive%\temp=0 %SystemDrive%\msdownld.tmp=1 %USERPROFILE%\MicrosoftEdgeBackups=1 %USERPROFILE%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5=1 @@ -194,6 +266,20 @@ HKCU\Software\Classes\VirtualStore=1 %ALLUSERSPROFILE%\Microsoft\Windows Defender\Scans=1 %SystemDrive%\Users\All Users\Microsoft\Windows Defender\Scans\History=1 %SystemRoot%\Logs\WindowsUpdate=1 +%ProgramFiles%\WindowsApps=1 +%ProgramFiles% (x86)\Microsoft\Edge=1 +%ProgramFiles% (x86)\Microsoft=1 +%SystemDrive%\Users\All Users\Microsoft=1 +%SystemDrive%\Users\All Users\regid.1991-06.com.microsoft=1 +%SystemDrive%\Users\All Users\USOPrivate=1 +%SystemDrive%\Users\All Users\USOShared=1 +%USERPROFILE%\AppData\Local=1 +%USERPROFILE%\AppData\LocalLow=1 +%USERPROFILE%\Documents=0 +%USERPROFILE%\ntuser.dat.LOG1=1 +%USERPROFILE%\ntuser.dat.LOG2=1 +%SystemDrive%\Users\Public\Desktop\Microsoft Edge.lnk=1 +%SystemRoot%=0 [SkipFile-Comment] ; -------------------------------------------------------------------------------------------------------------- diff --git a/regshot_vs2010.vcxproj b/regshot_vs2010.vcxproj index 109d24a..1befbf6 100644 --- a/regshot_vs2010.vcxproj +++ b/regshot_vs2010.vcxproj @@ -520,6 +520,89 @@ true + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + Document + $(OutDir)\Templates + true + + + false + true + $(OutDir)\Templates + true + @@ -534,6 +617,7 @@ + diff --git a/regshot_vs2010.vcxproj.filters b/regshot_vs2010.vcxproj.filters index 347412d..59ae051 100644 --- a/regshot_vs2010.vcxproj.filters +++ b/regshot_vs2010.vcxproj.filters @@ -78,6 +78,9 @@ Source Files + + Source Files + @@ -90,6 +93,18 @@ + + + + + + + + + + + + diff --git a/src/CreateOutputLines.c b/src/CreateOutputLines.c index c4ed4ff..0311cee 100644 --- a/src/CreateOutputLines.c +++ b/src/CreateOutputLines.c @@ -19,112 +19,6 @@ #include "global.h" -// Some strings used to write to UNL file -LPTSTR lpszUNLEnclosing = TEXT("\""); -LPTSTR lpszUNLPartsDivider = TEXT(","); - -LPTSTR lpszUNLKeyAdd = TEXT("Registry="); -LPTSTR lpszUNLKeyDel = TEXT("; Registry=+"); -LPTSTR lpszUNLValAdd = TEXT("Registry="); -LPTSTR lpszUNLValDel = TEXT("; Registry=+"); -LPTSTR lpszUNLValModi = TEXT("; Registry="); -LPTSTR lpszUNLValDefault = TEXT("{Standard}"); - -LPTSTR lpszUNLDirAdd = TEXT("Directory="); -LPTSTR lpszUNLDirDel = TEXT("; Directory=+"); -LPTSTR lpszUNLDirModi = TEXT("; Directory="); -LPTSTR lpszUNLFileAdd = TEXT("File="); -LPTSTR lpszUNLFileDel = TEXT("; File=+"); -LPTSTR lpszUNLFileModi = TEXT("; File="); - -// Some strings used to write to BAT file -LPTSTR lpszBATEnclosing = TEXT("\""); -LPTSTR lpszBATPartsDivider = TEXT(" "); -LPTSTR lpszBATKeyDelete = TEXT("REG DELETE"); -LPTSTR lpszBATValDelete = TEXT("REG DELETE"); -LPTSTR lpszBATFileDelete = TEXT("DEL"); -LPTSTR lpszBATDirDelete = TEXT("RMDIR"); - -// Some strings used to write to REG file -LPTSTR lpszREGKeySeparator = TEXT("\r\n"); -LPTSTR lpszREGKeyEnclosingLeft = TEXT("["); -LPTSTR lpszREGKeyEnclosingRight = TEXT("]\r\n"); -LPTSTR lpszREGValueEnclosing = TEXT("\""); -LPTSTR lpszREGVal4Default = TEXT(""); -LPTSTR lpszREGVal5Default = TEXT(""); -LPTSTR lpszREGValDelete = TEXT("=-"); -LPTSTR lpszREGPartsDivider = TEXT("="); -LPTSTR lpszREGValueTypeHex = TEXT("hex"); -LPTSTR lpszREGValueTypeDWORD = TEXT("dword"); - -// Some strings used to write to ISS file -LPTSTR lpszISSEnclosing = TEXT("\""); -LPTSTR lpszISSPartsDivider = TEXT("; "); - -LPTSTR lpszISSValueTypeString = TEXT("string"); -LPTSTR lpszISSValueTypeExpandsz = TEXT("expandsz"); -LPTSTR lpszISSValueTypeMultisz = TEXT("multisz"); -LPTSTR lpszISSValueTypeDword = TEXT("dword"); -LPTSTR lpszISSValueTypeQword = TEXT("qword"); -LPTSTR lpszISSValueTypeNone = TEXT("none"); -LPTSTR lpszISSValueTypeBinary = TEXT("binary"); -LPTSTR lpszISSRoot = TEXT("Root: "); -LPTSTR lpszISSSubkey = TEXT("Subkey: "); -LPTSTR lpszISSValueType = TEXT("ValueType: "); -LPTSTR lpszISSValueName = TEXT("ValueName: "); -LPTSTR lpszISSValueData = TEXT("ValueData: "); -LPTSTR lpszISSFlags = TEXT("Flags: "); -LPTSTR lpszISSDeletekey = TEXT("deletekey"); -LPTSTR lpszISSDeletevalue = TEXT("deletevalue"); -LPTSTR lpszISSCreatevalue = TEXT("createvalueifdoesntexist"); -LPTSTR lpszISSValDefault = TEXT(""); -LPTSTR lpszISSFileAdd = TEXT("Source: "); -LPTSTR lpszISSDirAdd = TEXT("Name: "); -LPTSTR lpszISSDestDir = TEXT("DestDir:"); -LPTSTR lpszISSFileDelete = TEXT("Type: files; Name: "); -LPTSTR lpszISSDirDelete = TEXT("Type: dirifempty; Name: "); -LPTSTR lpszISSFileOrDirDelete = TEXT("Type: filesandordirs; Name: "); -LPTSTR lpszISSComponentRegistry = TEXT("; Components: registry "); -LPTSTR lpszISSComponentFilesystem = TEXT("; Components: filesystem "); - -// Some strings used to write to NSI file -LPTSTR lpszNSIPartsDivider = TEXT(" "); -LPTSTR lpszNSIEnclosing = TEXT("\""); -LPTSTR lpszNSIValDefault = TEXT(""); -LPTSTR lpszNSIValueTypeString = TEXT(" WriteRegStr "); -LPTSTR lpszNSIValueTypeExpandsz = TEXT(" WriteRegExpandStr "); -LPTSTR lpszNSIValueTypeMultisz = TEXT(" WriteRegMultiStr /REGEDIT5 "); -LPTSTR lpszNSIValueTypeDword = TEXT(" WriteRegDWORD "); -LPTSTR lpszNSIValueTypeQword = TEXT("; WriteRegQWORD "); -LPTSTR lpszNSIValueTypeNone = TEXT(" WriteRegNone "); -LPTSTR lpszNSIAddkeyStr = TEXT(" WriteRegStr "); -LPTSTR lpszNSIValueTypeBinary = TEXT(" WriteRegBin "); -LPTSTR lpszNSIDeletevalue = TEXT(" DeleteRegValue "); -LPTSTR lpszNSIDeletekey = TEXT(" DeleteRegKey "); -LPTSTR lpszNSIFileAdd = TEXT(" File \"/oname="); -LPTSTR lpszNSIFileDelete = TEXT(" Delete "); -LPTSTR lpszNSIDirAdd = TEXT(" CreateDirectory "); -LPTSTR lpszNSIDirDelete = TEXT(" RMDir "); - -// ---------------------------------------------------------------------- -// Several routines to write to an output file -// ---------------------------------------------------------------------- -LPTSTR ReplaceISSMacros(LPTSTR lpszText) -{ - LPTSTR pos = NULL; - // iss macro replacements - - if (lpszText != NULL) - pos = _tcsstr(lpszText, TEXT("}break}")); - while (pos) { - _tcsncpy(pos, TEXT("{"), 1); - pos++; - pos = _tcsstr(lpszText, TEXT("}break}")); - } - - return lpszText; -} - // ---------------------------------------------------------------------- // Several routines to write to an output file // ---------------------------------------------------------------------- @@ -140,24 +34,6 @@ LPTSTR EscapeSpecialCharacters(LPTSTR lpszText, TCHAR c, LPTSTR lpEscape) pos = _tcschr(++pos, c); } - /* - if (i > 0) { - LPTSTR lpszOutputStringCorrected = MYALLOC0((_tcslen(lpszText) + i + 1) * sizeof(TCHAR)); - i = 0; - - for (int j = 0; j <= _tcslen(lpszText); j++) { - if (lpszOutputStringCorrected + j + i != NULL) - _tcsncpy(lpszOutputStringCorrected + j + i, lpszText + j, 1); - if (_tcsncmp(lpszText + j, &c, 1) == 0) { - if (lpszOutputStringCorrected + j + i + 1 != NULL) - _tcsncpy(lpszOutputStringCorrected + j + i + 1, &c, 1); - i++; - } - } - MYFREE(lpszText); - lpszText = lpszOutputStringCorrected; - } - */ if (i > 0) { LPTSTR lpszOutputStringCorrected = MYALLOC0((_tcslen(lpszText) + i * _tcslen(lpEscape) + 1) * sizeof(TCHAR)); @@ -179,772 +55,3 @@ LPTSTR EscapeSpecialCharacters(LPTSTR lpszText, TCHAR c, LPTSTR lpEscape) return lpszText; } -// ---------------------------------------------------------------------- -// Several routines to write to an output file -// ---------------------------------------------------------------------- -LPTSTR BuildNSIOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType, BOOL bDeInstall) -{ - LPTSTR lpszOutputString = NULL; - LPTSTR lpszTempString; - size_t cchStringLen = 1; - LPTSTR pos = NULL; - - if ((nActionType == VALADD) || (nActionType == VALDEL) || (nActionType == VALMODI)) { - pos = _tcschr(lpszText, _T('\\')); - if (pos != NULL) - _tcscpy(pos, TEXT("\0")); -// DeleteRegValue HKLM "Software\My Company\My Software" "some value" -// WriteRegStr HKCU "Software\My Company\My Software" "" "Test" - cchStringLen += 6 * _tcslen(lpszNSIEnclosing) + _tcslen(lpszText) + - 2 * _tcslen(lpszNSIPartsDivider) + (pos != NULL ? _tcslen(++pos) : 0); - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) - cchStringLen += _tcslen(((LPVALUECONTENT)lpContent)->lpszValueName); - else - cchStringLen += _tcslen(lpszNSIValDefault); - - if ((bDeInstall && (nActionType == VALADD)) || (!bDeInstall && (nActionType == VALDEL))) { - cchStringLen += _tcslen(lpszNSIDeletevalue); - } - if ((bDeInstall && (nActionType == VALDEL)) || (!bDeInstall && (nActionType == VALADD)) || (nActionType == VALMODI)) { - switch (((LPVALUECONTENT)lpContent)->nTypeCode) { - case REG_SZ: - cchStringLen += _tcslen(lpszNSIValueTypeString); - break; - case REG_EXPAND_SZ: - cchStringLen += _tcslen(lpszNSIValueTypeExpandsz); - break; - case REG_MULTI_SZ: - cchStringLen += _tcslen(lpszNSIValueTypeMultisz); - break; - case REG_DWORD_LITTLE_ENDIAN: - case REG_DWORD_BIG_ENDIAN: - cchStringLen += _tcslen(lpszNSIValueTypeDword); - break; - case REG_QWORD_LITTLE_ENDIAN: - cchStringLen += _tcslen(lpszNSIValueTypeQword); - break; - case REG_NONE: - cchStringLen += _tcslen(lpszNSIValueTypeNone); - break; - default: - cchStringLen += _tcslen(lpszNSIValueTypeBinary); - break; - } - cchStringLen += _tcslen(lpszNSIPartsDivider); - } - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - if ((bDeInstall && (nActionType == VALDEL)) || (!bDeInstall && (nActionType == VALADD)) || (nActionType == VALMODI)) { - switch (((LPVALUECONTENT)lpContent)->nTypeCode) { - case REG_SZ: - _tcscpy(lpszOutputString, lpszNSIValueTypeString); - break; - case REG_EXPAND_SZ: - _tcscpy(lpszOutputString, lpszNSIValueTypeExpandsz); - break; - case REG_MULTI_SZ: - _tcscpy(lpszOutputString, lpszNSIValueTypeMultisz); - break; - case REG_DWORD_LITTLE_ENDIAN: - case REG_DWORD_BIG_ENDIAN: - _tcscpy(lpszOutputString, lpszNSIValueTypeDword); - break; - case REG_QWORD_LITTLE_ENDIAN: - _tcscpy(lpszOutputString, lpszNSIValueTypeQword); - break; - case REG_NONE: - _tcscpy(lpszOutputString, lpszNSIValueTypeNone); - break; - default: - _tcscpy(lpszOutputString, lpszNSIValueTypeBinary); - break; - } - } - else - _tcscpy(lpszOutputString, lpszNSIDeletevalue); - - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszNSIPartsDivider); - _tcscat(lpszOutputString, lpszNSIEnclosing); - if (pos != NULL) - _tcscat(lpszOutputString, pos); - _tcscat(lpszOutputString, lpszNSIEnclosing); - _tcscat(lpszOutputString, lpszNSIPartsDivider); - _tcscat(lpszOutputString, lpszNSIEnclosing); - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) - _tcscat(lpszOutputString, ((LPVALUECONTENT)lpContent)->lpszValueName); - else - _tcscat(lpszOutputString, lpszNSIValDefault); - _tcscat(lpszOutputString, lpszNSIEnclosing); -//Root: "HKCU"; Subkey: "RegTypes"; ValueType: dword; ValueName: """REG_DWORD_BIG_ENDIAN_EMPTY"""; ValueData: "hex(5):0x00000000" - if ((bDeInstall && (nActionType == VALDEL)) || (!bDeInstall && (nActionType == VALADD)) || (nActionType == VALMODI)) { - _tcscat(lpszOutputString, lpszNSIPartsDivider); - } - } - } - - else if ((nActionType == KEYADD) || (nActionType == KEYDEL)) { - pos = _tcschr(lpszText, _T('\\')); - if (pos != NULL) - _tcscpy(pos, TEXT("\0")); -// DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Example2" -// WriteRegStr HKCU "Software\My Company\My Software" "" "" -// WriteRegNone HKCU "SOFTWARE\Seifert" "" - cchStringLen += _tcslen(lpszText) + 2 * _tcslen(lpszNSIEnclosing) - + (pos != NULL ? _tcslen(++pos) : 0) + _tcslen(lpszNSIPartsDivider); - // Add key - if ((!bDeInstall && (nActionType == KEYADD)) || (bDeInstall && (nActionType == KEYDEL))) { - cchStringLen += _tcslen(lpszNSIValueTypeNone) + _tcslen(lpszNSIPartsDivider) + 2 * _tcslen(lpszNSIEnclosing); - } - // Delete key - else { - cchStringLen += _tcslen(lpszNSIDeletekey); - } - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - // Add key - if ((!bDeInstall && (nActionType == KEYADD)) || (bDeInstall && (nActionType == KEYDEL))) - _tcscpy(lpszOutputString, lpszNSIValueTypeNone); - else - // Delete key - _tcscpy(lpszOutputString, lpszNSIDeletekey); - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszNSIPartsDivider); - _tcscat(lpszOutputString, lpszNSIEnclosing); - if (pos != NULL) - _tcscat(lpszOutputString, pos); - _tcscat(lpszOutputString, lpszNSIEnclosing); - // Add key - if ((!bDeInstall && (nActionType == KEYADD)) || (bDeInstall && (nActionType == KEYDEL))) { - _tcscat(lpszOutputString, lpszNSIPartsDivider); - _tcscat(lpszOutputString, lpszNSIEnclosing); - _tcscat(lpszOutputString, lpszNSIEnclosing); - } - } - } - - else if ((nActionType == DIRDEL) || (nActionType == DIRMODI) || (nActionType == DIRADD) || - (nActionType == FILEDEL) || (nActionType == FILEMODI) || (nActionType == FILEADD)) { - - lpszTempString = GetWholeFileName(lpContent, 0, TRUE); - cchStringLen += 2 * _tcslen(lpszNSIEnclosing) + _tcslen(lpszTempString); - - if ((bDeInstall && (nActionType == DIRADD)) || (!bDeInstall && (nActionType == DIRDEL))) { - // RMDir /r "C:\Program Files (x86)\My Program\test" - cchStringLen += _tcslen(lpszNSIDirDelete); - if (fDeleteDirNotEmpty) - cchStringLen += 3; - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszNSIDirDelete); - if (fDeleteDirNotEmpty) { - cchStringLen += 3; - _tcscat(lpszOutputString, TEXT("/r ")); - } - _tcscat(lpszOutputString, lpszNSIEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszNSIEnclosing); - } - } - else if ((bDeInstall && (nActionType == DIRDEL)) || (!bDeInstall && (nActionType == DIRADD))) { - // CreateDirectory "c:\Temp2" - cchStringLen += _tcslen(lpszNSIDirAdd); - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszNSIDirAdd); - _tcscat(lpszOutputString, lpszNSIEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszNSIEnclosing); - } - } - else if ((bDeInstall && (nActionType == FILEADD)) || (!bDeInstall && (nActionType == FILEDEL))) { - // Delete "C:\Program Files (x86)\My Program\MyProg.chm" - cchStringLen += _tcslen(lpszNSIFileDelete); - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszNSIFileDelete); - _tcscat(lpszOutputString, lpszNSIEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszNSIEnclosing); - } - } - else if ((bDeInstall && (nActionType == FILEDEL)) || (!bDeInstall && (nActionType == FILEADD))) { - // File "/oname=c:\temp\example2.nsi" "C:\Temp\nsis-3.06.1-setup\Examples\example2.nsi" - cchStringLen += _tcslen(lpszNSIFileAdd) + _tcslen(lpszNSIPartsDivider) + - 3 * _tcslen(lpszNSIEnclosing) + 2 * _tcslen(lpszTempString); - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszNSIFileAdd); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszNSIEnclosing); - _tcscat(lpszOutputString, lpszNSIPartsDivider); - _tcscat(lpszOutputString, lpszNSIEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszNSIEnclosing); - } - } - - MYFREE(lpszTempString); - } - - return lpszOutputString; -} - -// ---------------------------------------------------------------------- -// Several routines to write to an output file -// ---------------------------------------------------------------------- -LPTSTR BuildISSOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType, BOOL bDeInstall) -{ - LPTSTR lpszOutputString = NULL; - LPTSTR lpszTempString; - size_t cchStringLen = 1; // terminating \0 - LPTSTR pos = NULL; - - // TODO: ISS-String-Korrekturen - //lpszText = EscapeSpecialCharacters(lpszText, _T('{'), lpEscape); - if ((nActionType == VALADD) || (nActionType == VALDEL) || (nActionType == VALMODI)) { - pos = _tcschr(lpszText, _T('\\')); - if (pos != NULL) - _tcscpy(pos, TEXT("\0")); -//Root: "HKLM"; Subkey: "xxx"; ValueName: "aaaaa"; Flags: deletevalue - cchStringLen += _tcslen(lpszISSRoot) + 6 * _tcslen(lpszISSEnclosing) + _tcslen(lpszText) + - 2 * _tcslen(lpszISSPartsDivider) + _tcslen(lpszISSSubkey) + _tcslen(lpszISSValueName) + (pos != NULL ? _tcslen(++pos) : 0) + _tcslen(lpszISSComponentRegistry); - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) - cchStringLen += _tcslen(((LPVALUECONTENT)lpContent)->lpszValueName); - else - cchStringLen += _tcslen(lpszISSValDefault); - if ((bDeInstall && (nActionType == VALADD)) || (!bDeInstall && (nActionType == VALDEL))) { - cchStringLen += _tcslen(lpszISSPartsDivider) + _tcslen(lpszISSFlags) + _tcslen(lpszISSDeletevalue); - } - if ((bDeInstall && (nActionType == VALDEL)) || (!bDeInstall && (nActionType == VALADD)) || (nActionType == VALMODI)) { - cchStringLen += _tcslen(lpszISSValueType) + _tcslen(lpszISSPartsDivider); - cchStringLen += _tcslen(lpszISSValueData) + _tcslen(lpszISSPartsDivider); - - switch (((LPVALUECONTENT)lpContent)->nTypeCode) { - case REG_SZ: - cchStringLen += _tcslen(lpszISSValueTypeString); - break; - case REG_EXPAND_SZ: - cchStringLen += _tcslen(lpszISSValueTypeExpandsz); - break; - case REG_MULTI_SZ: - cchStringLen += _tcslen(lpszISSValueTypeMultisz); - break; - case REG_DWORD_LITTLE_ENDIAN: - case REG_DWORD_BIG_ENDIAN: - cchStringLen += _tcslen(lpszISSValueTypeDword); - break; - case REG_QWORD_LITTLE_ENDIAN: - cchStringLen += _tcslen(lpszISSValueTypeQword); - break; - case REG_NONE: - cchStringLen += _tcslen(lpszISSValueTypeNone); - break; - default: - cchStringLen += _tcslen(lpszISSValueTypeBinary); - break; - } - } - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszISSRoot); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszISSPartsDivider); - _tcscat(lpszOutputString, lpszISSSubkey); - _tcscat(lpszOutputString, lpszISSEnclosing); - if (pos != NULL) - _tcscat(lpszOutputString, pos); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszISSPartsDivider); - if ((bDeInstall && (nActionType == VALDEL)) || (!bDeInstall && (nActionType == VALADD)) || (nActionType == VALMODI)) { - _tcscat(lpszOutputString, lpszISSValueType); - - switch (((LPVALUECONTENT)lpContent)->nTypeCode) { - case REG_SZ: - _tcscat(lpszOutputString, lpszISSValueTypeString); - break; - case REG_EXPAND_SZ: - _tcscat(lpszOutputString, lpszISSValueTypeExpandsz); - break; - case REG_MULTI_SZ: - _tcscat(lpszOutputString, lpszISSValueTypeMultisz); - break; - case REG_DWORD_LITTLE_ENDIAN: - case REG_DWORD_BIG_ENDIAN: - _tcscat(lpszOutputString, lpszISSValueTypeDword); - break; - case REG_QWORD_LITTLE_ENDIAN: - _tcscat(lpszOutputString, lpszISSValueTypeQword); - break; - case REG_NONE: - _tcscat(lpszOutputString, lpszISSValueTypeNone); - break; - default: - _tcscat(lpszOutputString, lpszISSValueTypeBinary); - break; - } - _tcscat(lpszOutputString, lpszISSPartsDivider); - } - _tcscat(lpszOutputString, lpszISSValueName); - _tcscat(lpszOutputString, lpszISSEnclosing); - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) - _tcscat(lpszOutputString, ((LPVALUECONTENT)lpContent)->lpszValueName); - else - _tcscat(lpszOutputString, lpszISSValDefault); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszISSComponentRegistry); - if ((bDeInstall && (nActionType == VALADD)) || (!bDeInstall && (nActionType == VALDEL))) { - _tcscat(lpszOutputString, lpszISSPartsDivider); - _tcscat(lpszOutputString, lpszISSFlags); - _tcscat(lpszOutputString, lpszISSDeletevalue); - } - //Root: "HKCU"; Subkey: "RegTypes"; ValueType: dword; ValueName: """REG_DWORD_BIG_ENDIAN_EMPTY"""; ValueData: "hex(5):0x00000000" - if ((bDeInstall && (nActionType == VALDEL)) || (!bDeInstall && (nActionType == VALADD)) || (nActionType == VALMODI)) { - _tcscat(lpszOutputString, lpszISSPartsDivider); - _tcscat(lpszOutputString, lpszISSValueData); - } - } - } - - else if ((nActionType == KEYADD) || (nActionType == KEYDEL)) { - pos = _tcschr(lpszText, _T('\\')); - if (pos != NULL) - _tcscpy(pos, TEXT("\0")); -//Root: "HKCR"; Subkey: "xxx"[; Flags: deletekey] - cchStringLen += _tcslen(lpszISSRoot) + 4 * _tcslen(lpszISSEnclosing) + _tcslen(lpszText) + - _tcslen(lpszISSPartsDivider) + _tcslen(lpszISSSubkey) + (pos != NULL ? _tcslen(++pos) : 0) + _tcslen(lpszISSComponentRegistry); - if ((bDeInstall && (nActionType == KEYADD)) || (!bDeInstall && (nActionType == KEYDEL))) { - cchStringLen += _tcslen(lpszISSPartsDivider) + _tcslen(lpszISSFlags) + _tcslen(lpszISSDeletekey); - } - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszISSRoot); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszISSPartsDivider); - _tcscat(lpszOutputString, lpszISSSubkey); - _tcscat(lpszOutputString, lpszISSEnclosing); - if (pos != NULL) - _tcscat(lpszOutputString, pos); - _tcscat(lpszOutputString, lpszISSEnclosing); - if ((bDeInstall && (nActionType == KEYADD)) || (!bDeInstall && (nActionType == KEYDEL))) { - _tcscat(lpszOutputString, lpszISSPartsDivider); - _tcscat(lpszOutputString, lpszISSFlags); - _tcscat(lpszOutputString, lpszISSDeletekey); - } - _tcscat(lpszOutputString, lpszISSComponentRegistry); - } - } - - else if ((nActionType == DIRDEL) || (nActionType == DIRMODI) || (nActionType == DIRADD) || - (nActionType == FILEDEL) || (nActionType == FILEMODI) || (nActionType == FILEADD)) { - - lpszTempString = GetWholeFileName(lpContent, 0, TRUE); - cchStringLen += 2 * _tcslen(lpszISSEnclosing) + _tcslen(lpszTempString) + _tcslen(lpszISSComponentFilesystem); - - if ((bDeInstall && (nActionType == DIRADD)) || (!bDeInstall && (nActionType == DIRDEL))) { - // [InstallDelete] - // Type: dirifempty; Name: "C:\Program Files (x86)\My Program\test" - // Type: filesandordirs; Name: "C:\Program Files (x86)\My Program\test" - if (fDeleteDirNotEmpty) - cchStringLen += _tcslen(lpszISSFileOrDirDelete); - else - cchStringLen += _tcslen(lpszISSDirDelete); - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - if (fDeleteDirNotEmpty) - _tcscpy(lpszOutputString, lpszISSFileOrDirDelete); - else - _tcscpy(lpszOutputString, lpszISSDirDelete); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszISSComponentFilesystem); - } - } - else if ((bDeInstall && (nActionType == DIRDEL)) || (!bDeInstall && (nActionType == DIRADD))) { - // [Dirs] - // Name: "c:\Temp2" - cchStringLen += _tcslen(lpszISSDirAdd) + _tcslen(lpszISSComponentFilesystem); - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszISSDirAdd); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszISSComponentFilesystem); - } - } - else if ((bDeInstall && (nActionType == FILEADD)) || (!bDeInstall && (nActionType == FILEDEL))) { - // [InstallDelete] - // Type: files; Name: "C:\Program Files (x86)\My Program\MyProg.chm" - cchStringLen += _tcslen(lpszISSFileDelete) + _tcslen(lpszISSComponentFilesystem); - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszISSFileDelete); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszISSComponentFilesystem); - } - } - else if ((bDeInstall && (nActionType == FILEDEL)) || (!bDeInstall && (nActionType == FILEADD))) { - // [Files] - // Source: "C:\Temp\win32.chm"; DestDir: "c:\temp" - cchStringLen += _tcslen(lpszISSFileAdd) + _tcslen(lpszISSPartsDivider) + _tcslen(lpszISSDestDir) + - 2 * _tcslen(lpszISSEnclosing) + _tcslen(lpszTempString) + _tcslen(lpszISSComponentFilesystem); - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszISSFileAdd); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszISSPartsDivider); - _tcscat(lpszOutputString, lpszISSDestDir); - _tcscat(lpszOutputString, lpszISSEnclosing); - pos = _tcsrchr(lpszTempString, _T('\\')); - if (pos != NULL) - _tcscpy(pos, TEXT("\0")); - cchStringLen += _tcslen(lpszTempString); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszISSEnclosing); - _tcscat(lpszOutputString, lpszISSComponentFilesystem); - } - } - MYFREE(lpszTempString); - } - - // TODO: Escape ISS special characters: - // hier kommt der komplette String OHNE Value-Data an - // hier kann also nur max. die { ersetzt werden - lpszOutputString = EscapeSpecialCharacters(lpszOutputString, _T('{'), TEXT("{")); -// lpszOutputString = EscapeSpecialCharacters(lpszOutputString, _T('"'), TEXT("\"")); - - return lpszOutputString; -} - -// ---------------------------------------------------------------------- -// Several routines to write to an output file -// ---------------------------------------------------------------------- -LPTSTR BuildREGOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType, BOOL bSuppressKey, BOOL bDeInstall) -{ - LPTSTR lpszOutputString = NULL; - size_t cchStringLen = 1; - - if ((nActionType == VALADD) || (nActionType == VALDEL) || (nActionType == VALMODI)) { -//[HKEY_CURRENT_USER\] - if (!bSuppressKey) { - cchStringLen += _tcslen(lpszREGKeyEnclosingLeft) + _tcslen(lpszText) + - _tcslen(lpszREGKeyEnclosingRight) + _tcslen(lpszREGKeySeparator); - } - cchStringLen += 2 * _tcslen(lpszREGValueEnclosing) + _tcslen(lpszREGPartsDivider); - - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) - cchStringLen += _tcslen(((LPVALUECONTENT)lpContent)->lpszValueName); - else - cchStringLen += _tcslen((fREG5 ? lpszREGVal5Default : lpszREGVal4Default)); - if ((bDeInstall && (nActionType == VALADD)) || (!bDeInstall && (nActionType == VALDEL))) { - cchStringLen += _tcslen(lpszREGValDelete); - } - if ((bDeInstall && (nActionType == VALDEL)) || (!bDeInstall && (nActionType == VALADD)) || (nActionType == VALMODI)) { - cchStringLen += _tcslen(lpszREGPartsDivider); - - switch (((LPVALUECONTENT)lpContent)->nTypeCode) { - case REG_SZ: - //"RegShot"="Test" -// cchStringLen += 2 * _tcslen(lpszREGValueEnclosing) + 1; - break; - case REG_EXPAND_SZ: - //"REG_EXPAND_SZ_EMPTY"=hex(2):00,00 -// cchStringLen += _tcslen(lpszREGValueTypeHex) + 3 + 2 * _tcslen(lpszREGPartsDivider); -// cchStringLen += _tcslen(lpszREGPartsDivider); - break; - case REG_MULTI_SZ: - //"REG_MULTI_SZ_EMPTY"=hex(7):00,00 -// cchStringLen += _tcslen(lpszREGValueTypeHex) + 3 + 2 * _tcslen(lpszREGPartsDivider); -// cchStringLen += _tcslen(lpszREGPartsDivider); - break; - case REG_DWORD_LITTLE_ENDIAN: - //"REG_DWORD_LITTLE_ENDIAN_EMPTY"=dword:00000000 -// cchStringLen += _tcslen(lpszISSValueTypeDWORD) + 2 * _tcslen(lpszREGPartsDivider); -// cchStringLen += _tcslen(lpszREGPartsDivider); - break; - case REG_DWORD_BIG_ENDIAN: - //"REG_DWORD_BIG_ENDIAN_EMPTY"=hex(5):00,00,00,00 -// cchStringLen += _tcslen(lpszREGValueTypeHex) + 3 + 2 * _tcslen(lpszREGPartsDivider); -// cchStringLen += _tcslen(lpszREGPartsDivider); - break; - case REG_QWORD_LITTLE_ENDIAN: - //"REG_QWORD_EMPTY"=hex(b):00,00,00,00,00,00,00,00 -// cchStringLen += _tcslen(lpszREGValueTypeHex) + 3 + 2 * _tcslen(lpszREGPartsDivider); -// cchStringLen += _tcslen(lpszREGPartsDivider); - break; - case REG_NONE: - //"REG_NONE_EMPTY"=hex(0):00,00 -// cchStringLen += _tcslen(lpszREGValueTypeHex) + 3 + 2 * _tcslen(lpszREGPartsDivider); -// cchStringLen += _tcslen(lpszREGPartsDivider); - break; - default: -// cchStringLen += _tcslen(lpszREGValueTypeHex) + 3 + 2 * _tcslen(lpszREGPartsDivider); -// cchStringLen += _tcslen(lpszREGPartsDivider); - break; - } - } - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - if (!bSuppressKey) { - _tcscat(lpszOutputString, lpszREGKeySeparator); - _tcscat(lpszOutputString, lpszREGKeyEnclosingLeft); - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszREGKeyEnclosingRight); - } - _tcscat(lpszOutputString, lpszREGValueEnclosing); - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) - _tcscat(lpszOutputString, ((LPVALUECONTENT)lpContent)->lpszValueName); - else - _tcscat(lpszOutputString, (fREG5 ? lpszREGVal5Default : lpszREGVal4Default)); - _tcscat(lpszOutputString, lpszREGValueEnclosing); - if ((bDeInstall && (nActionType == VALADD)) || (!bDeInstall && (nActionType == VALDEL))) { - _tcscat(lpszOutputString, lpszREGValDelete); - } - if ((bDeInstall && (nActionType == VALDEL)) || (!bDeInstall && (nActionType == VALADD)) || (nActionType == VALMODI)) { - } - } - } - - else if ((nActionType == KEYADD) || (nActionType == KEYDEL)) { -//Root: "HKCR"; Subkey: "xxx"[; Flags: deletekey] - cchStringLen += _tcslen(lpszREGKeyEnclosingLeft) + _tcslen(lpszText) + _tcslen(lpszREGKeyEnclosingRight); - if ((bDeInstall && (nActionType == KEYADD)) || (!bDeInstall && (nActionType == KEYDEL))) { - cchStringLen += 1; - } - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscat(lpszOutputString, lpszREGKeyEnclosingLeft); - if ((bDeInstall && (nActionType == KEYADD)) || (!bDeInstall && (nActionType == KEYDEL))) { - _tcscat(lpszOutputString, TEXT("-")); - } - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszREGKeyEnclosingRight); - } - } - - return lpszOutputString; -} - -// ---------------------------------------------------------------------- -// Several routines to write to an output file -// ---------------------------------------------------------------------- -LPTSTR BuildUNLOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType) -{ - LPTSTR lpszOutputString = NULL; - LPTSTR lpszTempString; - size_t cchStringLen = 1; // terminating \0 - LPTSTR lpszPrefix = NULL; - - if ((nActionType == VALADD) || (nActionType == VALDEL) || (nActionType == VALMODI)) { - if (nActionType == VALADD) { - lpszPrefix = lpszUNLValAdd; - } - else if (nActionType == VALDEL) { - lpszPrefix = lpszUNLValDel; - } - else if (nActionType == VALMODI) { - lpszPrefix = lpszUNLValModi; - } - - cchStringLen += _tcslen(lpszPrefix) + 4 * _tcslen(lpszUNLEnclosing) + _tcslen(lpszText) + _tcslen(lpszUNLPartsDivider); - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) - cchStringLen += _tcslen(((LPVALUECONTENT)lpContent)->lpszValueName); - else - cchStringLen += _tcslen(lpszUNLValDefault); - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszPrefix); - _tcscat(lpszOutputString, lpszUNLEnclosing); - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszUNLEnclosing); - _tcscat(lpszOutputString, lpszUNLPartsDivider); - _tcscat(lpszOutputString, lpszUNLEnclosing); - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) - _tcscat(lpszOutputString, ((LPVALUECONTENT)lpContent)->lpszValueName); - else - _tcscat(lpszOutputString, lpszUNLValDefault); - _tcscat(lpszOutputString, lpszUNLEnclosing); - } - } - - else if ((nActionType == KEYADD) || (nActionType == KEYDEL)) { - if (nActionType == KEYADD) { - lpszPrefix = lpszUNLKeyAdd; - } - else if (nActionType == KEYDEL) { - lpszPrefix = lpszUNLKeyDel; - } - cchStringLen += _tcslen(lpszPrefix) + 2 * _tcslen(lpszUNLEnclosing) + _tcslen(lpszText); - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszPrefix); - _tcscat(lpszOutputString, lpszUNLEnclosing); - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszUNLEnclosing); - } - } - - else if ((nActionType == DIRDEL) || (nActionType == DIRMODI) || (nActionType == DIRADD) || - (nActionType == FILEDEL) || (nActionType == FILEMODI) || (nActionType == FILEADD)) { - lpszTempString = GetWholeFileName(lpContent, 0, TRUE); - cchStringLen += _tcslen(lpszTempString) + 2 * _tcslen(lpszUNLEnclosing); - if (nActionType == DIRDEL) { - lpszPrefix = lpszUNLDirDel; - } - else if (nActionType == DIRMODI) { - lpszPrefix = lpszUNLDirModi; - } - else if (nActionType == DIRADD) { - lpszPrefix = lpszUNLDirAdd; - } - else if (nActionType == FILEDEL) { - lpszPrefix = lpszUNLFileDel; - } - else if (nActionType == FILEMODI) { - lpszPrefix = lpszUNLFileModi; - } - else if (nActionType == FILEADD) { - lpszPrefix = lpszUNLFileAdd; - } - cchStringLen += _tcslen(lpszPrefix); - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszPrefix); - _tcscat(lpszOutputString, lpszUNLEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszUNLEnclosing); - } - MYFREE(lpszTempString); - } - - return lpszOutputString; -} -// ---------------------------------------------------------------------- - -// Several routines to write to an output file -// ---------------------------------------------------------------------- -LPTSTR BuildBATOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType) -{ - LPTSTR lpszOutputString = NULL; - LPTSTR lpszTempString; - size_t cchStringLen = 1; - - if (nActionType == VALADD) { - //REG DELETE HKCU\RegTypes /v REG_DWORD_EMPTY /f - cchStringLen += _tcslen(lpszBATValDelete) + 3 * _tcslen(lpszBATPartsDivider) + _tcslen(lpszText) + 4 + 2 * _tcslen(lpszBATEnclosing); - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) { - cchStringLen += _tcslen(lpszBATPartsDivider) + _tcslen(((LPVALUECONTENT)lpContent)->lpszValueName) + 2 * _tcslen(lpszBATEnclosing); - } - else { - cchStringLen += 1; - } - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszBATValDelete); - _tcscat(lpszOutputString, lpszBATPartsDivider); - _tcscat(lpszOutputString, lpszBATEnclosing); - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszBATEnclosing); - _tcscat(lpszOutputString, lpszBATPartsDivider); - _tcscat(lpszOutputString, TEXT("/v")); - - if (((LPVALUECONTENT)lpContent)->lpszValueName != NULL) { - _tcscat(lpszOutputString, lpszBATPartsDivider); - _tcscat(lpszOutputString, lpszBATEnclosing); - _tcscat(lpszOutputString, ((LPVALUECONTENT)lpContent)->lpszValueName); - _tcscat(lpszOutputString, lpszBATEnclosing); - } - else - _tcscat(lpszOutputString, TEXT("e")); - - _tcscat(lpszOutputString, lpszBATPartsDivider); - _tcscat(lpszOutputString, TEXT("/f")); - } - } - - else if (KEYADD == nActionType) { - //REG DELETE HKCU\RegTypes /f - cchStringLen += _tcslen(lpszBATKeyDelete) + 2 * _tcslen(lpszBATPartsDivider) + 2 * _tcslen(lpszBATEnclosing) + _tcslen(lpszText) + 2; - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszBATKeyDelete); - _tcscat(lpszOutputString, lpszBATPartsDivider); - _tcscat(lpszOutputString, lpszBATEnclosing); - _tcscat(lpszOutputString, lpszText); - _tcscat(lpszOutputString, lpszBATEnclosing); - _tcscat(lpszOutputString, lpszBATPartsDivider); - _tcscat(lpszOutputString, TEXT("/f")); - } - } - - else if (FILEADD == nActionType) { - //DEL "C:\Users\All Users\Blumentals\phpxdebug\php722\libsasl.dll" - lpszTempString = GetWholeFileName(lpContent, 0, TRUE); - cchStringLen += _tcslen(lpszBATFileDelete) + _tcslen(lpszBATPartsDivider) + 2 * _tcslen(lpszBATEnclosing) + _tcslen(lpszTempString); - if (fDeleteReadOnly) { - cchStringLen += _tcslen(lpszBATPartsDivider) + 2; - } - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - _tcscpy(lpszOutputString, lpszBATFileDelete); - _tcscat(lpszOutputString, lpszBATPartsDivider); - if (fDeleteReadOnly) { - _tcscat(lpszOutputString, TEXT("/F")); - _tcscat(lpszOutputString, lpszBATPartsDivider); - } - _tcscat(lpszOutputString, lpszBATEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszBATEnclosing); - } - MYFREE(lpszTempString); - } - - else if (DIRADD == nActionType) { -// RMDIR "C:\Program Files (x86)\WeBuilder 2020\templates\ASP" - lpszTempString = GetWholeFileName(lpContent, 0, TRUE); - cchStringLen += _tcslen(lpszBATDirDelete) + _tcslen(lpszBATPartsDivider) + 2 * _tcslen(lpszBATEnclosing) + _tcslen(lpszTempString); - if (fDeleteDirNotEmpty) { - cchStringLen += 2 * _tcslen(lpszBATPartsDivider) + 4; - } - - lpszOutputString = MYALLOC0(cchStringLen * sizeof(TCHAR)); - if (lpszOutputString != NULL) { - //LPTSTR lpszBATDirDelete = TEXT("RMDIR"); - _tcscpy(lpszOutputString, lpszBATDirDelete); - _tcscat(lpszOutputString, lpszBATPartsDivider); - if (fDeleteReadOnly) { - _tcscat(lpszOutputString, TEXT("/S")); - _tcscat(lpszOutputString, lpszBATPartsDivider); - _tcscat(lpszOutputString, TEXT("/Q")); - _tcscat(lpszOutputString, lpszBATPartsDivider); - } - _tcscat(lpszOutputString, lpszBATEnclosing); - _tcscat(lpszOutputString, lpszTempString); - _tcscat(lpszOutputString, lpszBATEnclosing); - } - MYFREE(lpszTempString); - } - - return lpszOutputString; -} diff --git a/src/fileshot.c b/src/fileshot.c index debc690..de29788 100644 --- a/src/fileshot.c +++ b/src/fileshot.c @@ -40,12 +40,12 @@ WIN32_FIND_DATA FindData; //------------------------------------------------------------- // Get whole file name from FILECONTENT //------------------------------------------------------------- -LPTSTR GetWholeFileName(LPFILECONTENT lpStartFC, size_t cchExtra, BOOL fForOutput) +LPTSTR GetWholeFileName(LPFILECONTENT lpStartFC, size_t cchExtra, LPOUTPUTFILEDESCRIPTION pOutputFileDescription) { LPFILECONTENT lpFC; LPTSTR lpszName; LPTSTR lpszBuffer; - DWORD nBufferSize = 2048; + DWORD nBufferSize = MAX_PATH + 1; LPTSTR lpszTail = NULL; size_t cchName; @@ -76,10 +76,10 @@ LPTSTR GetWholeFileName(LPFILECONTENT lpStartFC, size_t cchExtra, BOOL fForOutpu } } - if (fForOutput && fLogEnvironmentStrings) { - lpszBuffer = MYALLOC0((MAX_PATH + 1) * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 + if ((pOutputFileDescription != NULL) && pOutputFileDescription->fLogEnvironmentStrings) { + lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); if ((lpszBuffer != NULL) && (lpszName != NULL)) { - if (PathUnExpandEnvStrings(lpszName, lpszBuffer, nBufferSize)) { + if (PathUnExpandEnvStrings(lpszName, lpszBuffer, nBufferSize-1)) { MYFREE(lpszName); return lpszBuffer; } @@ -171,6 +171,7 @@ VOID CompareFiles(LPFILECONTENT lpStartFC1, LPFILECONTENT lpStartFC2) { LPFILECONTENT lpFC1; LPFILECONTENT lpFC2; + LPTSTR lpszFullName; // Compare dirs/files for (lpFC1 = lpStartFC1; NULL != lpFC1; lpFC1 = lpFC1->lpBrotherFC) { @@ -178,13 +179,22 @@ VOID CompareFiles(LPFILECONTENT lpStartFC1, LPFILECONTENT lpStartFC2) // Update counters display nCurrentTime = GetTickCount64(); if (REFRESHINTERVAL < (nCurrentTime - nLastTime)) { - lpszUIBuffer = GetWholeFileName(lpFC1, 0, FALSE); + lpszUIBuffer = GetWholeFileName(lpFC1, 0, NULL); UI_UpdateCounters(asLangTexts[iszTextDir].lpszText, asLangTexts[iszTextFile].lpszText, CompareResult.stcCompared.cDirs, CompareResult.stcCompared.cFiles, asLangTexts[iszTextDir].lpszText, lpszUIBuffer); MYFREE(lpszUIBuffer); } if (!bRunning) break; + // TODO: Filter when comparing + lpszFullName = GetWholeFileName(lpFC1, 0, NULL); +// if (IsInSkipList(lpszFullName, pFileSkipList, (bFileSkipAdded ? TRUE : FALSE))) { + if (IsInSkipList(lpszFullName, pFileSkipList, FALSE)) { + MYFREE(lpszFullName); + continue; + } + MYFREE(lpszFullName); + if (ISFILE(lpFC1->nFileAttributes)) { CompareResult.stcCompared.cFiles++; } else { @@ -267,6 +277,15 @@ VOID CompareFiles(LPFILECONTENT lpStartFC1, LPFILECONTENT lpStartFC2) continue; } + // TODO: Filter when comparing + lpszFullName = GetWholeFileName(lpFC2, 0, NULL); +// if (IsInSkipList(lpszFullName, pFileSkipList, (bFileSkipAdded ? TRUE : FALSE))) { + if (IsInSkipList(lpszFullName, pFileSkipList, FALSE)) { + MYFREE(lpszFullName); + continue; + } + MYFREE(lpszFullName); + // FC2 has no matching FC1, so FC2 is an added dir/file if (ISFILE(lpFC2->nFileAttributes)) { CompareResult.stcCompared.cFiles++; @@ -543,7 +562,7 @@ VOID GetFilesSnap(LPREGSHOT lpShot, LPTSTR lpszFullName, LPFILECONTENT lpFatherF } lpFC->lpszFileName = FindData.cFileName; // borrow for creating whole name - lpszFullName = GetWholeFileName(lpFC, 4, FALSE); // +4 for "\*.*" search when directory (possible recursive call later in iteration) + lpszFullName = GetWholeFileName(lpFC, 4, NULL); // +4 for "\*.*" search when directory (possible recursive call later in iteration) lpFC->lpszFileName = NULL; if (IsInSkipList(lpszFullName, pFileSkipList, FALSE)) { MYFREE(lpszFullName); @@ -586,7 +605,7 @@ VOID GetFilesSnap(LPREGSHOT lpShot, LPTSTR lpszFullName, LPFILECONTENT lpFatherF // Pass this entry as father and "lpFirstSubFC" pointer for storing the first child's pointer if (ISDIR(lpFC->nFileAttributes)) { if (NULL == lpszFullName) { - lpszFullName = GetWholeFileName(lpFC, 4, FALSE); // +4 for "\*.*" search (in recursive call) + lpszFullName = GetWholeFileName(lpFC, 4, NULL); // +4 for "\*.*" search (in recursive call) } GetFilesSnap(lpShot, lpszFullName, lpFC, &lpFC->lpFirstSubFC); } @@ -885,7 +904,7 @@ VOID LoadFiles(LPREGSHOT lpShot, DWORD ofsFile, LPFILECONTENT lpFatherFC, LPFILE continue; // ignore this entry and continue with next file } - lpszFullName = GetWholeFileName(lpFC, 0, FALSE); + lpszFullName = GetWholeFileName(lpFC, 0, NULL); if (IsInSkipList(lpszFullName, pFileSkipList, FALSE)) { MYFREE(lpszFullName); FreeAllFileContents(lpFC); diff --git a/src/global.h b/src/global.h index 6c9841c..e194aaa 100644 --- a/src/global.h +++ b/src/global.h @@ -568,6 +568,7 @@ extern BOOL fDontDisplayInfoAfterComparison; extern BOOL bRunning; extern BOOL fNoVals; extern BOOL fOnlyNewEntries; +extern BOOL fNoDeletedEntries; extern BOOL fLogEnvironmentStrings; extern BOOL fSuppressLogs; extern BOOL fLogUNLOrder; @@ -581,6 +582,7 @@ extern UINT nMaxNodes; extern UINT nMaxLines; extern BOOL fOpenEditor; extern BOOL fOutputTXTfile; +extern BOOL fOutputAU3file; extern BOOL fOutputUNLfile; extern BOOL fOutputBATfile; extern BOOL fOutputHTMfile; @@ -651,7 +653,7 @@ int UI_Refresh(VOID); // ---------------------------------------------------------------------- // Routines defined in misc.c // ---------------------------------------------------------------------- -VOID WriteBOM(HANDLE hFile); +VOID WriteBOM(HANDLE hFile, int CodePage); BOOL WriteFileCP(_In_ HANDLE hFile, _In_ int CodePage, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped); VOID WriteFileBuffer(HANDLE hFile, long ofsFile, LPCVOID lpData, DWORD cbData); VOID EmptyFileBuffer(HANDLE hFile); @@ -682,12 +684,91 @@ BOOL InitTreeViewImageLists(HWND hwndTV); BOOL CheckFilters(LPVOID lpContent, LPTSTR lpszKeyName, LPTSTR* lpszValueName, DWORD nActionType, BOOL* pbKey); - -LPTSTR EscapeSpecialCharacters(LPTSTR lpszText, TCHAR c, LPTSTR lpEscape); -LPTSTR ReplaceISSMacros(LPTSTR lpszText); - +#define _MACROLINESIZE_ 2048 +#define _MACROREPLACEMENTS_ 100 +#define _TREEITEMTEXT_ 100 + +struct _OUTPUTFILEDESCRIPTION { + int iOutputType; + BOOL bDeInstaller; + BOOL bLogger; + LPTSTR lpszFormat; + LPTSTR lpszComment; + LPTSTR lpszScriptFile; + LPTSTR lpszOutFile; + LPTSTR lpszOutDir; + int nCodePage; + BOOL bBOM; + LPTSTR lpszPartCountText; + DWORD nPartCount; +// Flags + LPTSTR lpszFilenameSuffix; + LPTSTR lpszExtension; + + BOOL fOnlyNewEntries; + BOOL fLogUNLOrder; + BOOL fUseLongRegHead; + BOOL fLogEnvironmentStrings; + BOOL fOutSeparateObjs; + BOOL fNoVals; + BOOL fGroupRegKeys; + + BOOL fFilesystem; + BOOL fRegistry; +}; +typedef struct _OUTPUTFILEDESCRIPTION OUTPUTFILEDESCRIPTION, FAR* LPOUTPUTFILEDESCRIPTION; +//OUTPUTFILEDESCRIPTION OutputFileDescription; + +LPTSTR lpszMacroFileName; +LPTSTR lpszSuppressedKeyPart; +LPTSTR lpszRegDefaultVal; +LPTSTR lpszMultiSzStringDivider; +LPTSTR lpszVALADDNormal; +LPTSTR lpszVALADDShort; +LPTSTR lpszVALCHANGENormal; +LPTSTR lpszVALCHANGEShort; +LPTSTR lpszVALDELETENormal; +LPTSTR lpszVALDELETEShort; +LPTSTR lpszKEYADDNormal; +LPTSTR lpszKEYDELETENormal; +LPTSTR lpszFILEADDNormal; +LPTSTR lpszFILECHANGENormal; +LPTSTR lpszFILEDELETENormal; +LPTSTR lpszFILEDELETEDeleteReadOnly; +LPTSTR lpszDIRADDNormal; +LPTSTR lpszDIRCHANGENormal; +LPTSTR lpszDIRDELETENormal; +LPTSTR lpszDIRDELETEDeleteRecurse; + +LPTSTR lpszNameREG_SZ; +LPTSTR lpszNameREG_EXPAND_SZ; +LPTSTR lpszNameREG_MULTI_SZ; +LPTSTR lpszNameREG_DWORD_LITTLE_ENDIAN; +LPTSTR lpszNameREG_DWORD_BIG_ENDIAN; +LPTSTR lpszNameREG_QWORD_LITTLE_ENDIAN; +LPTSTR lpszNameREG_NONE; +LPTSTR lpszNameREG_BINARY; +LPTSTR lpszPrefixREG_SZ; +LPTSTR lpszPrefixREG_EXPAND_SZ; +LPTSTR lpszPrefixREG_MULTI_SZ; +LPTSTR lpszPrefixREG_DWORD_LITTLE_ENDIAN; +LPTSTR lpszPrefixREG_DWORD_BIG_ENDIAN; +LPTSTR lpszPrefixREG_QWORD_LITTLE_ENDIAN; +LPTSTR lpszPrefixREG_NONE; +LPTSTR lpszPrefixREG_BINARY; + + +LPTSTR ReplaceSpecialCharacters(LPTSTR lpszText, BOOL bNames); +LPTSTR EscapeSpecialCharacters(LPTSTR lpszText, TCHAR c, LPTSTR lpEscape); +LPTSTR ReplaceHeaderMacros(LPTSTR lpszText, LPOUTPUTFILEDESCRIPTION pOutputFileDescription); +LPTSTR ReplaceDataMacros(LPTSTR lpszDataLineMacro, LPTSTR lpszText, LPVOID lpContent, BOOL bSuppressKey, LPOUTPUTFILEDESCRIPTION pOutputFileDescription); +BOOL ReadOutputMacros(LPOUTPUTFILEDESCRIPTION pOutputFileDescription); +BOOL WritePartTemplate(HANDLE hFile, LPTSTR lpszTemplate, LPTSTR lpszTask, LPOUTPUTFILEDESCRIPTION pOutputFileDescription); +LPTSTR BuildOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType, BOOL bSuppressKey, LPOUTPUTFILEDESCRIPTION pOutputFileDescription); + +VOID WriteTableHead(HANDLE hFile, LPTSTR lpszText, DWORD nCount, LPOUTPUTFILEDESCRIPTION pOutputFileDescription); VOID CreateNewResult(DWORD nActionType, LPVOID lpContentOld, LPVOID lpContentNew); -size_t ResultToString(LPTSTR rgszResultStrings[], size_t iResultStringsMac, size_t iLinesWrittenOldPart, DWORD nActionType, LPVOID lpContent, BOOL fNewContent, BOOL bSuppressKey, int iOutputType); +size_t ResultToString(LPTSTR rgszResultStrings[], size_t iResultStringsMac, size_t iLinesWrittenOldPart, DWORD nActionType, LPVOID lpContent, BOOL fNewContent, BOOL bSuppressKey, LPOUTPUTFILEDESCRIPTION pOutputFileDescription); VOID Shot(LPREGSHOT lpShot); VOID CompareShots(VOID); @@ -699,25 +780,10 @@ VOID FreeShot(LPREGSHOT lpShot); VOID FreeAllHeadFiles(LPHEADFILE lpHF); VOID ClearRegKeyMatchFlags(LPKEYCONTENT lpKC); VOID FileShot(LPREGSHOT lpShot); -LPTSTR GetWholeFileName(LPFILECONTENT lpStartFC, size_t cchExtra, BOOL fForOutput); -VOID WriteTableHead(HANDLE hFile, LPTSTR lpszText, DWORD nCount, int iOutputType); -VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOutputType); -VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, int iOutputType); -VOID WriteTitle(HANDLE hFile, LPTSTR lpszTitle, LPTSTR lpszValue, int iOutputType); -VOID WriteHTMLBegin(HANDLE hFile); -VOID WriteHTMLSectionStart(HANDLE hFile, LPTSTR lpszSection); -VOID WriteCommonBegin(HANDLE hFile, LPTSTR lpszDestFileName, LPTSTR lpszComment); -VOID WriteUNLINIKeys(HANDLE hFile); -VOID WriteISSSetupKeys(HANDLE hFile, BOOL bInstall); -VOID WriteISSEnd(HANDLE hFile); -VOID WriteNSISetupKeys(HANDLE hFile, BOOL bInstall); -VOID WriteNSISectionEnd(HANDLE hFile); -VOID WriteHTMLPartStart(HANDLE hFile, LPTSTR lpszPart, int nCount); -VOID WriteHTMLPartEnd(HANDLE hFile); -VOID WriteHTMLEnd(HANDLE hFile); -VOID WriteHTML_CSS(HANDLE hFile); -VOID WriteHTML_BR(HANDLE hFile); -LPTSTR GetWholeFileName(LPFILECONTENT lpStartFC, size_t cchExtra, BOOL fForOutput); +LPTSTR GetWholeFileName(LPFILECONTENT lpStartFC, size_t cchExtra, LPOUTPUTFILEDESCRIPTION pOutputFileDescription); +VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, LPOUTPUTFILEDESCRIPTION pOutputFileDescription); +VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, LPOUTPUTFILEDESCRIPTION pOutputFileDescription); +VOID WriteHTMLHeader(HANDLE hFile, int CodePage); LPTSTR GetWholeKeyName(LPKEYCONTENT lpVC, BOOL fUseLongNames); LPTSTR GetWholeValueName(LPVALUECONTENT lpVC, BOOL fUseLongNames); VOID ClearHeadFileMatchFlags(LPHEADFILE lpHF); @@ -733,12 +799,6 @@ VOID DoPropertySheet(HWND hwndOwner, int iSelectedPage); BOOL CALLBACK DlgOptionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); BOOL CALLBACK DlgSkipRegProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -LPTSTR BuildBATOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType); -LPTSTR BuildUNLOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType); -LPTSTR BuildISSOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType, BOOL bDeInstall); -LPTSTR BuildNSIOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType, BOOL bDeInstall); -LPTSTR BuildREGOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType, BOOL bSuppressKey, BOOL bDeInstall); - #define REGSHOT_BUFFER_BLOCK_BYTES 1024 enum eOutputFiles @@ -751,10 +811,9 @@ enum eOutputFiles OUT_REG_INSTALL, OUT_ISS_DEINSTALL, OUT_ISS_INSTALL, - OUT_INF_INSTALL, - OUT_INF_DEINSTALL, OUT_NSI_DEINSTALL, OUT_NSI_INSTALL, + OUT_AU3, // ATTENTION: add new output types before this line, the last line is used to determine the count OUTPUTTYPES }; @@ -868,6 +927,7 @@ enum eLangTexts { iszTextButtonClear1, iszTextButtonClear2, iszTextButtonScans, + iszTextCheckNoDeletedEntries, // ATTENTION: add new language strings before this line, the last line is used to determine the count cLangStrings }; @@ -898,9 +958,9 @@ extern LPTSTR lpszCommentCommon; extern LPTSTR lpszCommentBAT; extern HICON ico_green, ico_red; -#ifndef _UNICODE +//#ifndef _UNICODE extern LPTSTR lpszEmpty; -#endif +//#endif VOID SaveHeadFiles(HANDLE hFile, LPREGSHOT lpShot, LPHEADFILE lpHF, DWORD nFPCaller); VOID LoadHeadFiles(LPREGSHOT lpShot, DWORD ofsHeadFile, LPHEADFILE *lplpCaller); diff --git a/src/language.c b/src/language.c index 182b97c..58cd4ef 100644 --- a/src/language.c +++ b/src/language.c @@ -220,6 +220,9 @@ VOID SetTextsToDefaultLanguage(VOID) asLangTexts[iszTextCheckOnlyAddedParts].lpszText = TEXT("Log only added parts"); asLangTexts[iszTextCheckOnlyAddedParts].nIDDialog = DLG_MAIN; asLangTexts[iszTextCheckOnlyAddedParts].nIDDlgItem = IDC_CHECK_ONLYADDED; + asLangTexts[iszTextCheckNoDeletedEntries].lpszText = TEXT("Don't log deleted parts"); + asLangTexts[iszTextCheckNoDeletedEntries].nIDDialog = DLG_MAIN; + asLangTexts[iszTextCheckNoDeletedEntries].nIDDlgItem = IDC_CHECK_NOTDELETED; asLangTexts[iszTextCheckNoFilters].lpszText = TEXT("(*) Next comparison w/o filter"); asLangTexts[iszTextCheckNoFilters].nIDDialog = DLG_MAIN; asLangTexts[iszTextCheckNoFilters].nIDDlgItem = IDC_CHECK_NOFILTERS; diff --git a/src/misc.c b/src/misc.c index 8a2ac3e..b99fe71 100644 --- a/src/misc.c +++ b/src/misc.c @@ -24,15 +24,15 @@ // ---------------------------------------------------------------------- // Write BOM, especially for ISS output files // ---------------------------------------------------------------------- -VOID WriteBOM(HANDLE hFile) +VOID WriteBOM(HANDLE hFile, int CodePage) { // FF FE 57 unsigned char bUTF8[] = { 0xef, 0xbb, 0xbf }; unsigned char bUTF16[] = { 0xff, 0xfe }; - if (nCodePage == CP_UTF8) { + if (CodePage == CP_UTF8) { WriteFile(hFile, &bUTF8, sizeof(bUTF8), &NBW, NULL); } - else if (nCodePage == -1) { + else if (CodePage == -1) { WriteFile(hFile, &bUTF16, sizeof(bUTF16), &NBW, NULL); } @@ -67,16 +67,18 @@ BOOL WriteFileCP( // CodePage = CP_UTF8; if (lpBuffer != NULL) { #ifdef _UNICODE + //nSize = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)lpBuffer, nNumberOfBytesToWrite, NULL, 0, NULL, NULL); + //nSize = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)lpBuffer, -1, lpTransformedBuffer, nSize, NULL, NULL); nSize = WideCharToMultiByte((UINT)CodePage, 0, (LPCWSTR)lpBuffer, -1, lpTransformedBuffer, nTransformedBufferSize, NULL, NULL); #else nSize = MultiByteToWideChar(CodePage, MB_PRECOMPOSED, (LPCCH)lpBuffer, -1, lpTransformedBuffer, nTransformedBufferSize); #endif } + if (nSize < 1) + nSize = 1; BOOL bReturn = WriteFile(hFile, lpTransformedBuffer, nSize - 1, lpNumberOfBytesWritten, lpOverlapped); MYFREE(lpTransformedBuffer); -// HeapFree(hHeap, 0, lpTransformedBuffer); - return bReturn; } diff --git a/src/options.c b/src/options.c index 079ec51..7d067a8 100644 --- a/src/options.c +++ b/src/options.c @@ -275,7 +275,7 @@ BOOL CALLBACK DlgSkipProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) (!pSkipList[count].bFile && (iPropertyPage != PROP_FILES))) pSkipList[count].bDeleted = TRUE; } - _tcscpy(lpszExtDir, TEXT("")); + _tcscpy(lpszExtDir, lpszEmpty); for (int i = 0; (iListItems > i); i++) { ListView_GetItemText(hWndListViewSkip, i, 1, Temp, 9); Temp[8] = (TCHAR)'\0'; @@ -453,24 +453,34 @@ BOOL CALLBACK DlgSkipProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) if (lpszValue == _tcsstr(lpszValue, TEXT("HK"))) { bNewEntry = TRUE; LPTSTR pos = _tcschr(lpszValue, _T('\\')); - _tcscpy(pos++, TEXT("\0")); + if (pos != NULL) + _tcscpy(pos++, TEXT("\0")); if (_tcscmp(lpszValue, TEXT("HKEY_LOCAL_MACHINE")) == 0) { - _tcscpy(lpszValue, TEXT("HKLM\\")); - _tcscat(lpszValue, pos); + _tcscpy(lpszValue, TEXT("HKLM")); + if (pos != NULL) { + _tcscat(lpszValue, TEXT("\\")); + _tcscat(lpszValue, pos); + } } else if (_tcscmp(lpszValue, TEXT("HKEY_USERS")) == 0) { - _tcscpy(lpszValue, TEXT("HKU\\")); - _tcscat(lpszValue, pos); + _tcscpy(lpszValue, TEXT("HKU")); + if (pos != NULL) { + _tcscat(lpszValue, TEXT("\\")); + _tcscat(lpszValue, pos); + } } else if (_tcscmp(lpszValue, TEXT("HKEY_CURRENT_USER")) == 0) { - _tcscpy(lpszValue, TEXT("HKCU\\")); - _tcscat(lpszValue, pos); + _tcscpy(lpszValue, TEXT("HKCU")); + if (pos != NULL) { + _tcscat(lpszValue, TEXT("\\")); + _tcscat(lpszValue, pos); + } } else if ((_tcscmp(lpszValue, TEXT("HKLM")) != 0) && (_tcscmp(lpszValue, TEXT("HKU")) != 0) && (_tcscmp(lpszValue, TEXT("HKCU")) != 0)) bNewEntry = FALSE; - else + else if (pos != NULL) _tcsncpy(--pos, _T("\\"), 1); } } @@ -518,7 +528,7 @@ BOOL CALLBACK DlgSkipProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) else { MYFREE(lpszValue); } - SetDlgItemText(hDlg, IDC_EDIT_ADDSKIPSTRING, TEXT("")); + SetDlgItemText(hDlg, IDC_EDIT_ADDSKIPSTRING, lpszEmpty); return TRUE; } @@ -545,7 +555,7 @@ BOOL CALLBACK DlgSkipProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) pSkipList = pFileSkipList; lpszIniSection = lpszIniSkipFile; } - WritePrivateProfileSection(lpszIniSection, TEXT(""), lpszRegshotIni); + WritePrivateProfileSection(lpszIniSection, lpszEmpty, lpszRegshotIni); for (int i = 0; (NULL != pSkipList[i].lpSkipString); i++) { if ((TRUE != pSkipList[i].bAutomaticallyAdded) && (TRUE != pSkipList[i].bDeleted)) { if ((pSkipList[i].bFile && (iPropertyPage == PROP_FILES)) || @@ -650,7 +660,7 @@ BOOL CALLBACK DlgOptionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPar LPNMHDR lpnmhdr; int iIndex; OPENFILENAME opfn; - TCHAR filepath[MAX_PATH+1]; // length incl. NULL character + TCHAR filepath[MAX_PATH+1]; switch (message) { case WM_INITDIALOG: { @@ -697,7 +707,6 @@ BOOL CALLBACK DlgOptionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPar MYFREE(strMaxLines); } SendMessage(GetDlgItem(hDlg, IDC_SPIN_MAXLINES), UDM_SETRANGE32, (WPARAM)5000, (LPARAM)99999); -// SendMessage(GetDlgItem(hDlg, IDC_SPIN_MAXLINES), UDM_SETRANGE, (WPARAM)0, (LPARAM)MAKELPARAM(30000, 1000)); FillComboboxWithLanguagesFromIni(hDlg); } else if (iIndex == PROP_COMMON_2) { @@ -729,6 +738,7 @@ BOOL CALLBACK DlgOptionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPar SendMessage(GetDlgItem(hDlg, IDC_REGEDIT5), BM_SETCHECK, fREG5, (LPARAM)0); SendMessage(GetDlgItem(hDlg, IDC_CHECK_TXT), BM_SETCHECK, fOutputTXTfile, (LPARAM)0); + SendMessage(GetDlgItem(hDlg, IDC_CHECK_AU3), BM_SETCHECK, fOutputAU3file, (LPARAM)0); } return TRUE; } @@ -820,6 +830,7 @@ BOOL CALLBACK DlgOptionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPar fREG5 = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_REGEDIT5), BM_GETCHECK, (WPARAM)0, (LPARAM)0); fOutputTXTfile = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_TXT), BM_GETCHECK, (WPARAM)0, (LPARAM)0); + fOutputAU3file = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_AU3), BM_GETCHECK, (WPARAM)0, (LPARAM)0); } break; } diff --git a/src/output.c b/src/output.c index ce8a742..d2c6b1e 100644 --- a/src/output.c +++ b/src/output.c @@ -22,18 +22,10 @@ #include "global.h" -// Some strings used to write to UNL file -LPTSTR lpszCommentCommon = TEXT("; "); -LPTSTR lpszCommentBAT = TEXT(":: "); - // Some strings used to write to HTML or TEXT file LPTSTR lpszCRLF = TEXT("\r\n"); // {0x0d,0x0a,0x00}; -LPTSTR lpszTextLine = TEXT("\r\n----------------------------------\r\n"); -LPTSTR lpszTextLineUNL = TEXT("\r\n; --------------------------------------------------------------------------------------------------------------\r\n"); -LPTSTR lpszTextLineBAT = TEXT("\r\n:: --------------------------------------------------------------------------------------------------------------\r\n"); LPTSTR lpszHTML_BR = TEXT("
\r\n"); LPTSTR lpszHTMLBegin = TEXT("\r\n"); -LPTSTR lpszHTMLEnd = TEXT("\r\n"); LPTSTR lpszHTMLHeadBegin = TEXT("\r\n"); LPTSTR lpszHTML_CType = #ifdef _UNICODE @@ -51,8 +43,6 @@ LPTSTR lpszHTML_CSS = TEXT("\r\n"); // 1.8.2 from e0e0e0 to e0f0e0 by Charles LPTSTR lpszHTMLBodyBegin = TEXT("\r\n"); -LPTSTR lpszHTMLBodyEnd = TEXT("\r\n"); -LPTSTR lpszHTMLTableBegin = TEXT("
\r\n"); LPTSTR lpszHTMLTableEnd = TEXT("
\r\n"); LPTSTR lpszHTMLSpan1 = TEXT(""); LPTSTR lpszHTMLSpan2 = TEXT(""); @@ -82,117 +72,16 @@ LPTSTR lpszHTMLTableInfo = TEXT("\t\r\n"); LPTSTR lpszHTMLtrClass = TEXT("\r\n"); LPTSTR lpszHTMLtdClass = TEXT("\r\n"); LPTSTR lpszHTMLtdColspan = TEXT("\r\n"); -LPTSTR lpszHTMLtdANameC = TEXT("\r\n"); - -// CSS-content (ASCII, NOT UNICODE!!!!!) -LPTSTR lpszHTML_CSS2 = TEXT("body, table { background-color: #FFFFFF; font-family: Tahoma; font-size: 10pt }\r\n\ -div.m { background-color: #FFFFE0; width: 100%; text-align: center; border: 1px solid #808080; padding-top: 1px; padding-bottom: 3px }\r\n\ -h2 { font-size: 11pt; text-align: center }\r\n\ -td { vertical-align: top; padding-left: 8px; padding-right: 8px; padding-top: 2px; padding-bottom: 2px }\r\n\ -#info { border: 1px solid #E0E0E0; background-color: #F8F8F4 }\r\n\ -#info tr.a { background-color: #FFFFFF }\r\n\ -#info tr.b { background-color: #F0F0EC }\r\n\ -#info tr.h { background-color: #DBE8F0; text-align: center; font-weight: bold }\r\n\ -#info td.a { text-align: left }\r\n\ -#info td.b { text-align: right }\r\n\ -#info td.c { text-align: justify }\r\n\ -#info td.h { text-align: center }\r\n\ -#info span.i { font-style: italic; color: #800000 }\r\n\ -#hive { width: 100% }\r\n\ -#hive tr.a { background-color: #FFFFFF }\r\n\ -#hive tr.b { background-color: #F4F4F4 }\r\n\ -#hive tr.c { background-color: #FFFFFF; font-family: Courier New }\r\n\ -#hive tr.d { background-color: #F0F4F4; font-family: Courier New }\r\n\ -#hive tr.e { background-color: #DAEAD5; font-weight: bold }\r\n\ -#hive tr.f { background-color: #FFFFFF; font-family: Courier New }\r\n\ -#hive tr.g { background-color: #F4F8F4; font-family: Courier New }\r\n\ -#hive tr.h { background-color: #DBE8F0; font-weight: bold }\r\n\ -#hive span.r { color: #FF0000 }\r\n\ -#file { width: 100% }\r\n\ -#file tr.a { background-color: #FFFFFF }\r\n\ -#file tr.b { background-color: #F4F8FC }\r\n\ -#file tr.h { background-color: #DBE8F0; font-weight: bold }\r\n\ -.hash td { font-family: Courier New; font-size: 9pt; padding-top: 0px; padding-bottom: 0px; text-align:right }\r\n\ -a { color: #0000FF }\r\n\ -a:active { color: #FF0000 }\r\n\ -a:hover { color: #FF0000 }\r\n\ -a:link { color: #0000FF }\r\n\ -a:visited { color: #800080 }\r\n"); - -LPTSTR lpszISSSectionMessages = TEXT("[Messages]"); -LPTSTR lpszISSReadyLabel1 = TEXT("ReadyLabel1=[name]."); -LPTSTR lpszISSReadyLabel2b = TEXT("ReadyLabel2b=Click (Un)install to continue."); -LPTSTR lpszISSButtonInstall = TEXT("ButtonInstall=(Un)install"); - -LPTSTR lpszNSISectionEnd = TEXT("SectionEnd"); - -LPTSTR lpszREGVersion4 = TEXT("REGEDIT4\r\n\r\n"); -LPTSTR lpszREGVersion5 = TEXT("Windows Registry Editor Version 5.00\r\n\r\n"); // ---------------------------------------------------------------------- // Several routines to write to an output file // ---------------------------------------------------------------------- // ---------------------------------------------------------------------- -VOID WriteTableHead(HANDLE hFile, LPTSTR lpszText, DWORD nCount, int iOutputType) -{ - TCHAR szCount[17]; - - _sntprintf(szCount, 17, TEXT("%u\0"), nCount); - szCount[16] = (TCHAR)'\0'; // saftey NULL char - - if ((iOutputType == OUT_UNL) || (iOutputType == OUT_ISS_DEINSTALL)|| (iOutputType == OUT_ISS_INSTALL) || - (iOutputType == OUT_NSI_DEINSTALL) || (iOutputType == OUT_NSI_INSTALL) || - (iOutputType == OUT_REG_DEINSTALL)|| (iOutputType == OUT_REG_INSTALL)) { - WriteFileCP(hFile, nCodePage, lpszTextLineUNL, (DWORD)(_tcslen(lpszTextLineUNL) * sizeof(TCHAR)), &NBW, NULL); - } - else if (iOutputType == OUT_BAT) { - WriteFileCP(hFile, nCodePage, lpszTextLineBAT, (DWORD)(_tcslen(lpszTextLineBAT) * sizeof(TCHAR)), &NBW, NULL); - } - else if (iOutputType != OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszTextLine, (DWORD)(_tcslen(lpszTextLine) * sizeof(TCHAR)), &NBW, NULL); - } - - if ((iOutputType == OUT_UNL) || (iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_ISS_INSTALL) || - (iOutputType == OUT_NSI_DEINSTALL) || (iOutputType == OUT_NSI_INSTALL) || - (iOutputType == OUT_REG_DEINSTALL) || (iOutputType == OUT_REG_INSTALL)) { - WriteFileCP(hFile, nCodePage, lpszCommentCommon, (DWORD)(_tcslen(lpszCommentCommon) * sizeof(TCHAR)), &NBW, NULL); - } - else if (iOutputType == OUT_BAT) - WriteFileCP(hFile, nCodePage, lpszCommentBAT, (DWORD)(_tcslen(lpszCommentBAT) * sizeof(TCHAR)), &NBW, NULL); - - if (iOutputType != OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszText, (DWORD)(_tcslen(lpszText) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, TEXT(" "), (DWORD)(1 * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, szCount, (DWORD)(_tcslen(szCount) * sizeof(TCHAR)), &NBW, NULL); - } - else - { - WriteHTMLPartStart(hFile, lpszText, nCount); - } - - if (iOutputType == OUT_HTML) { -// WriteFileCP(hFile, nCodePage, lpszHTMLtrEnd, (DWORD)(_tcslen(lpszHTMLtrEnd) * sizeof(TCHAR)), &NBW, NULL); -// WriteFileCP(hFile, nCodePage, lpszHTMLTableEnd, (DWORD)(_tcslen(lpszHTMLTableEnd) * sizeof(TCHAR)), &NBW, NULL); - } else if ((iOutputType == OUT_UNL) || (iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_ISS_INSTALL) || - (iOutputType == OUT_NSI_DEINSTALL) || (iOutputType == OUT_NSI_INSTALL) || - (iOutputType == OUT_REG_DEINSTALL) || (iOutputType == OUT_REG_INSTALL)) { - WriteFileCP(hFile, nCodePage, lpszTextLineUNL, (DWORD)(_tcslen(lpszTextLineUNL) * sizeof(TCHAR)), &NBW, NULL); - } - else if (iOutputType == OUT_BAT) { - WriteFileCP(hFile, nCodePage, lpszTextLineBAT, (DWORD)(_tcslen(lpszTextLineBAT) * sizeof(TCHAR)), &NBW, NULL); - } - else { - WriteFileCP(hFile, nCodePage, lpszTextLine, (DWORD)(_tcslen(lpszTextLine) * sizeof(TCHAR)), &NBW, NULL); - } -} - -// ---------------------------------------------------------------------- -VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOutputType) +VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, LPOUTPUTFILEDESCRIPTION pOutputFileDescription) { size_t nCharsToWrite; size_t nCharsToGo; @@ -206,7 +95,8 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut DWORD cbCRLF; size_t i; size_t iLinesWrittenOldPart = 0; - LPTSTR* rgszResultStrings = MYALLOC0(2 * nOutMaxResultLines * sizeof(LPTSTR)); + DWORD nBuffersize = 2 * nOutMaxResultLines * sizeof(LPTSTR); + LPTSTR* rgszResultStrings = MYALLOC0(nBuffersize); size_t iResultStringsMac; cbHTMLSpan1 = 0; @@ -219,9 +109,8 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut LPTSTR lpszActualKeyName; BOOL bSuppressKey = FALSE; - if (iOutputType == OUT_HTML) { -// WriteFileCP(hFile, nCodePage, lpszHTMLTableBegin, (DWORD)(_tcslen(lpszHTMLTableBegin) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLTd2Begin, (DWORD)(_tcslen(lpszHTMLTd2Begin) * sizeof(TCHAR)), &NBW, NULL); + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLTd2Begin, (DWORD)(_tcslen(lpszHTMLTd2Begin) * sizeof(TCHAR)), &NBW, NULL); cbHTMLSpan1 = (DWORD)(_tcslen(lpszHTMLSpan1) * sizeof(TCHAR)); cbHTMLSpan2 = (DWORD)(_tcslen(lpszHTMLSpan2) * sizeof(TCHAR)); cbHTMLSpanEnd = (DWORD)(_tcslen(lpszHTMLSpanEnd) * sizeof(TCHAR)); @@ -232,25 +121,22 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut fColor = FALSE; LPTSTR lpszFullName = NULL; - _tcscpy(lpszPreviousKeyName, _TEXT("")); + _tcscpy(lpszPreviousKeyName, lpszEmpty); -// (DIRDEL == nActionType) || (DIRADD == nActionType) || (DIRMODI == nActionType) -// (FILEDEL == nActionType) || (FILEADD == nActionType) || (FILEMODI == nActionType) for (lpCR = lpStartCR; NULL != lpCR; lpCR = lpCR->lpNextCR) { iResultStringsMac = 0; iLinesWrittenOldPart = 0; if (((FILEMODI != nActionType) && (DIRMODI != nActionType) && (VALMODI != nActionType)) || - ((iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_REG_DEINSTALL) || (iOutputType == OUT_NSI_DEINSTALL) || (iOutputType == OUT_INF_DEINSTALL) || - (iOutputType == OUT_HTML) || (iOutputType == OUT_TXT) || (iOutputType == OUT_UNL))) { + ((pOutputFileDescription->iOutputType == OUT_ISS_DEINSTALL) || (pOutputFileDescription->iOutputType == OUT_REG_DEINSTALL) || + (pOutputFileDescription->iOutputType == OUT_NSI_DEINSTALL) || + (pOutputFileDescription->iOutputType == OUT_HTML) || (pOutputFileDescription->iOutputType == OUT_TXT) || (pOutputFileDescription->iOutputType == OUT_UNL))) { if (NULL != lpCR->lpContentOld) { bSuppressKey = FALSE; if ((KEYDEL == nActionType) || (KEYADD == nActionType)) lpszFullName = GetWholeKeyName(lpCR->lpContentOld, FALSE); else if ((VALDEL == nActionType) || (VALADD == nActionType) || (VALMODI == nActionType)) { -// lpszActualKeyName = GetWholeKeyName(((LPVALUECONTENT)(lpCR->lpContentOld))->lpFatherKC, FALSE); lpszFullName = GetWholeValueName(lpCR->lpContentOld, FALSE); -// lpszFullName = GetWholeKeyName(((LPVALUECONTENT)(lpCR->lpContentOld))->lpFatherKC, FALSE); } if ((KEYDEL == nActionType) || (KEYADD == nActionType) || (VALDEL == nActionType) || (VALADD == nActionType) || (VALMODI == nActionType)) { if (!IsInWhiteList(lpszFullName, (bRegWhitelistAdded ? TRUE : FALSE))) { @@ -265,7 +151,7 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut } if (((VALDEL == nActionType) || (VALADD == nActionType) || (VALMODI == nActionType)) && - ((iOutputType == OUT_REG_DEINSTALL) || (iOutputType == OUT_REG_INSTALL))) { + pOutputFileDescription->fGroupRegKeys) { lpszActualKeyName = GetWholeKeyName(((LPVALUECONTENT)(lpCR->lpContentOld))->lpFatherKC, FALSE); if (0 == _tcscmp(lpszActualKeyName, lpszPreviousKeyName)) { bSuppressKey = TRUE; @@ -276,7 +162,7 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut } if ((DIRDEL == nActionType) || (DIRADD == nActionType) || (DIRMODI == nActionType) || (FILEDEL == nActionType) || (FILEADD == nActionType) || (FILEMODI == nActionType)) { - lpszFullName = GetWholeFileName(lpCR->lpContentOld, 0, FALSE); + lpszFullName = GetWholeFileName(lpCR->lpContentOld, 0, NULL); if (IsInSkipList(lpszFullName, pFileSkipList, (bFileSkipAdded ? TRUE : FALSE))) { MYFREE(lpszFullName); continue; @@ -284,21 +170,16 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut MYFREE(lpszFullName); } - //if (((nActionType != VALMODI) && (nActionType != FILEMODI) && (nActionType != DIRMODI)) || - // ((iOutputType == OUT_TXT) || (iOutputType == OUT_HTML) || (iOutputType == OUT_UNL) || - // (iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_REG_DEINSTALL) || (iOutputType == OUT_INF_DEINSTALL)) - // ) { - iResultStringsMac = ResultToString(rgszResultStrings, iResultStringsMac, iLinesWrittenOldPart, nActionType, lpCR->lpContentOld, FALSE, bSuppressKey, iOutputType); + iResultStringsMac = ResultToString(rgszResultStrings, iResultStringsMac, iLinesWrittenOldPart, nActionType, lpCR->lpContentOld, FALSE, bSuppressKey, pOutputFileDescription); iLinesWrittenOldPart = iResultStringsMac; - //} } } if (((FILEMODI != nActionType) && (DIRMODI != nActionType) && (VALMODI != nActionType)) || - ((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_REG_INSTALL) || (iOutputType == OUT_NSI_INSTALL) || (iOutputType == OUT_INF_INSTALL) || - (iOutputType == OUT_HTML) || (iOutputType == OUT_TXT))) { + ((pOutputFileDescription->iOutputType == OUT_ISS_INSTALL) || (pOutputFileDescription->iOutputType == OUT_REG_INSTALL) || + (pOutputFileDescription->iOutputType == OUT_NSI_INSTALL) || + (pOutputFileDescription->iOutputType == OUT_HTML) || (pOutputFileDescription->iOutputType == OUT_TXT))) { if (NULL != lpCR->lpContentNew) { -// if ((VALMODI == nActionType) && (NULL != lpCR->lpContentNew)) { bSuppressKey = FALSE; if ((KEYDEL == nActionType) || (KEYADD == nActionType)) lpszFullName = GetWholeKeyName(lpCR->lpContentNew, FALSE); @@ -316,7 +197,8 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut MYFREE(lpszFullName); } - if (((VALDEL == nActionType) || (VALADD == nActionType) || (VALMODI == nActionType)) && ((iOutputType == OUT_REG_DEINSTALL) || (iOutputType == OUT_REG_INSTALL))) { + if (((VALDEL == nActionType) || (VALADD == nActionType) || (VALMODI == nActionType)) && + pOutputFileDescription->fGroupRegKeys) { lpszActualKeyName = GetWholeKeyName(((LPVALUECONTENT)(lpCR->lpContentNew))->lpFatherKC, FALSE); if (0 == _tcscmp(lpszActualKeyName, lpszPreviousKeyName)) { bSuppressKey = TRUE; @@ -327,7 +209,7 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut } if ((DIRDEL == nActionType) || (DIRADD == nActionType) || (DIRMODI == nActionType) || (FILEDEL == nActionType) || (FILEADD == nActionType) || (FILEMODI == nActionType)) { - lpszFullName = GetWholeFileName(lpCR->lpContentNew, 0, FALSE); + lpszFullName = GetWholeFileName(lpCR->lpContentNew, 0, NULL); if (IsInSkipList(lpszFullName, pFileSkipList, (bFileSkipAdded ? TRUE : FALSE))) { MYFREE(lpszFullName); continue; @@ -335,12 +217,7 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut MYFREE(lpszFullName); } - //if (((nActionType != VALMODI) && (nActionType != FILEMODI) && (nActionType != DIRMODI)) || - // ((iOutputType == OUT_TXT) || (iOutputType == OUT_HTML) || - // (iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_REG_INSTALL) || (iOutputType == OUT_INF_INSTALL)) - // ) { - iResultStringsMac = ResultToString(rgszResultStrings, iResultStringsMac, iLinesWrittenOldPart, nActionType, lpCR->lpContentNew, TRUE, bSuppressKey, iOutputType); - //} + iResultStringsMac = ResultToString(rgszResultStrings, iResultStringsMac, iLinesWrittenOldPart, nActionType, lpCR->lpContentNew, TRUE, bSuppressKey, pOutputFileDescription); } } @@ -349,12 +226,12 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut continue; } - if (iOutputType == OUT_HTML) { + if (pOutputFileDescription->iOutputType == OUT_HTML) { // 1.8.0: zebra/flip-flop colors if (!fColor) { - WriteFileCP(hFile, nCodePage, lpszHTMLSpan1, cbHTMLSpan1, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLSpan1, cbHTMLSpan1, &NBW, NULL); } else { - WriteFileCP(hFile, nCodePage, lpszHTMLSpan2, cbHTMLSpan2, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLSpan2, cbHTMLSpan2, &NBW, NULL); } } @@ -362,13 +239,13 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut for (nCharsToGo = _tcslen(rgszResultStrings[i]); 0 < nCharsToGo;) { nCharsToWrite = nCharsToGo; // TODO: Zeilenumbruch funktioniert nicht (deshalb nur noch bei HTML-Ausgabe aktiv) - if (iOutputType == OUT_HTML) { + if (pOutputFileDescription->iOutputType == OUT_HTML) { if (HTMLWRAPLENGTH < nCharsToWrite) { nCharsToWrite = HTMLWRAPLENGTH; } } - WriteFileCP(hFile, nCodePage, lpszResultTemp, (DWORD)(nCharsToWrite * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszResultTemp, (DWORD)(nCharsToWrite * sizeof(TCHAR)), &NBW, NULL); lpszResultTemp += nCharsToWrite; nCharsToGo -= nCharsToWrite; @@ -376,28 +253,28 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut break; // skip newline } - if (iOutputType == OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); } else { - WriteFileCP(hFile, nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); } } MYFREE(rgszResultStrings[i]); - if (iOutputType == OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszHTMLSpanEnd, cbHTMLSpanEnd, &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLSpanEnd, cbHTMLSpanEnd, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); } else { - WriteFileCP(hFile, nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); } } // since 1.9.1: Separate objects in output with empty line - if (fOutSeparateObjs) { - if (iOutputType == OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); + if (pOutputFileDescription->fOutSeparateObjs) { + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); } else { - WriteFileCP(hFile, nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); } } @@ -418,14 +295,12 @@ VOID WritePart(HANDLE hFile, DWORD nActionType, LPCOMPRESULT lpStartCR, int iOut MYFREE(rgszResultStrings); MYFREE(lpszPreviousKeyName); - if (iOutputType == OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszHTMLTd2End, (DWORD)(_tcslen(lpszHTMLTd2End) * sizeof(TCHAR)), &NBW, NULL); -// WriteFileCP(hFile, nCodePage, lpszHTMLTableEnd, (DWORD)(_tcslen(lpszHTMLTableEnd) * sizeof(TCHAR)), &NBW, NULL); - WriteHTMLPartEnd(hFile); + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLTd2End, (DWORD)(_tcslen(lpszHTMLTd2End) * sizeof(TCHAR)), &NBW, NULL); } } -VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, int iOutputType) +VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, LPOUTPUTFILEDESCRIPTION pOutputFileDescription) { size_t nCharsToWrite; size_t nCharsToGo; @@ -440,7 +315,8 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in size_t i; size_t iLinesWrittenOldPart = 0; // LPTSTR rgszResultStrings[MAX_RESULT_STRINGS]; - LPTSTR* rgszResultStrings = MYALLOC0(2 * nOutMaxResultLines * sizeof(LPTSTR)); + DWORD nBuffersize = 2 * nOutMaxResultLines * sizeof(LPTSTR); + LPTSTR* rgszResultStrings = MYALLOC0(nBuffersize); size_t iResultStringsMac; LPTSTR lpszPreviousKeyName = MYALLOC(EXTDIRLEN * sizeof(TCHAR)); @@ -453,9 +329,8 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in cbHTML_BR = 0; cbCRLF = 0; - if (iOutputType == OUT_HTML) { -// WriteFileCP(hFile, nCodePage, lpszHTMLTableBegin, (DWORD)(_tcslen(lpszHTMLTableBegin) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLTd2Begin, (DWORD)(_tcslen(lpszHTMLTd2Begin) * sizeof(TCHAR)), &NBW, NULL); + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLTd2Begin, (DWORD)(_tcslen(lpszHTMLTd2Begin) * sizeof(TCHAR)), &NBW, NULL); cbHTMLSpan1 = (DWORD)(_tcslen(lpszHTMLSpan1) * sizeof(TCHAR)); cbHTMLSpan2 = (DWORD)(_tcslen(lpszHTMLSpan2) * sizeof(TCHAR)); cbHTMLSpanEnd = (DWORD)(_tcslen(lpszHTMLSpanEnd) * sizeof(TCHAR)); @@ -472,23 +347,25 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in for (lpCR = lpStartCR; NULL != lpCR; lpCR = lpCR->lpPrevCRNew) { if ((nActionType != ALLCHANGES) && (lpCR->nActionType != nActionType)) continue; - if (fOnlyNewEntries && ((DIRDEL == lpCR->nActionType) || (DIRMODI == lpCR->nActionType) || + if (pOutputFileDescription->fOnlyNewEntries && ((DIRDEL == lpCR->nActionType) || (DIRMODI == lpCR->nActionType) || (FILEDEL == lpCR->nActionType) || (FILEMODI == lpCR->nActionType) || (VALDEL == lpCR->nActionType) || (VALMODI == lpCR->nActionType) || (KEYDEL == lpCR->nActionType))) continue; + if (fNoDeletedEntries && ((DIRDEL == lpCR->nActionType) || (FILEDEL == lpCR->nActionType) || (VALDEL == lpCR->nActionType) || (KEYDEL == lpCR->nActionType))) + continue; iResultStringsMac = 0; iLinesWrittenOldPart = 0; if (((FILEMODI != nActionType) && (DIRMODI != nActionType) && (VALMODI != nActionType)) || - ((iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_REG_DEINSTALL) || (iOutputType == OUT_NSI_DEINSTALL) || (iOutputType == OUT_INF_DEINSTALL) || - (iOutputType == OUT_HTML) || (iOutputType == OUT_TXT) || (iOutputType == OUT_UNL))) { + ((pOutputFileDescription->iOutputType == OUT_ISS_DEINSTALL) || (pOutputFileDescription->iOutputType == OUT_REG_DEINSTALL) || (pOutputFileDescription->iOutputType == OUT_NSI_DEINSTALL) || + (pOutputFileDescription->iOutputType == OUT_HTML) || (pOutputFileDescription->iOutputType == OUT_TXT) || (pOutputFileDescription->iOutputType == OUT_UNL))) { if (NULL != lpCR->lpContentOld) { bSuppressKey = FALSE; if ((KEYDEL == lpCR->nActionType) || (KEYADD == lpCR->nActionType)) lpszFullName = GetWholeKeyName(lpCR->lpContentOld, FALSE); else if ((VALDEL == lpCR->nActionType) || (VALADD == lpCR->nActionType) || (VALMODI == lpCR->nActionType)) { lpszFullName = GetWholeValueName(lpCR->lpContentOld, FALSE); - if (((VALDEL == lpCR->nActionType) || (VALADD == lpCR->nActionType)) || ((VALMODI == lpCR->nActionType) && (iOutputType == OUT_REG_DEINSTALL))) { + if (((VALDEL == lpCR->nActionType) || (VALADD == lpCR->nActionType)) || ((VALMODI == lpCR->nActionType) && (pOutputFileDescription->iOutputType == OUT_REG_DEINSTALL))) { lpszActualKeyName = GetWholeKeyName(((LPVALUECONTENT)(lpCR->lpContentOld))->lpFatherKC, FALSE); if (0 == _tcscmp(lpszActualKeyName, lpszPreviousKeyName)) { bSuppressKey = TRUE; @@ -512,7 +389,7 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in if ((DIRDEL == lpCR->nActionType) || (DIRADD == lpCR->nActionType) || (DIRMODI == lpCR->nActionType) || (FILEDEL == lpCR->nActionType) || (FILEADD == lpCR->nActionType) || (FILEMODI == lpCR->nActionType)) { - lpszFullName = GetWholeFileName(lpCR->lpContentOld, 0, FALSE); + lpszFullName = GetWholeFileName(lpCR->lpContentOld, 0, NULL); if (IsInSkipList(lpszFullName, pFileSkipList, (bFileSkipAdded ? TRUE : FALSE))) { MYFREE(lpszFullName); continue; @@ -521,24 +398,24 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in MYFREE(lpszFullName); //if (((lpCR->nActionType != VALMODI) && (lpCR->nActionType != FILEMODI) && (lpCR->nActionType != DIRMODI)) || // ((iOutputType == OUT_TXT) || (iOutputType == OUT_HTML) || (iOutputType == OUT_UNL) || - // (iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_REG_DEINSTALL) || (iOutputType == OUT_INF_DEINSTALL)) + // (iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_REG_DEINSTALL)) // ) { - iResultStringsMac = ResultToString(rgszResultStrings, iResultStringsMac, iLinesWrittenOldPart, lpCR->nActionType, lpCR->lpContentOld, FALSE, bSuppressKey, iOutputType); + iResultStringsMac = ResultToString(rgszResultStrings, iResultStringsMac, iLinesWrittenOldPart, lpCR->nActionType, lpCR->lpContentOld, FALSE, bSuppressKey, pOutputFileDescription); iLinesWrittenOldPart = iResultStringsMac; //} } } if (((FILEMODI != nActionType) && (DIRMODI != nActionType) && (VALMODI != nActionType)) || - ((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_REG_INSTALL) || (iOutputType == OUT_NSI_INSTALL) || (iOutputType == OUT_INF_INSTALL) || - (iOutputType == OUT_HTML) || (iOutputType == OUT_TXT))) { + ((pOutputFileDescription->iOutputType == OUT_ISS_INSTALL) || (pOutputFileDescription->iOutputType == OUT_REG_INSTALL) || (pOutputFileDescription->iOutputType == OUT_NSI_INSTALL) || + (pOutputFileDescription->iOutputType == OUT_HTML) || (pOutputFileDescription->iOutputType == OUT_TXT))) { if (NULL != lpCR->lpContentNew) { bSuppressKey = FALSE; if ((KEYDEL == lpCR->nActionType) || (KEYADD == lpCR->nActionType)) lpszFullName = GetWholeKeyName(lpCR->lpContentNew, FALSE); else if ((VALDEL == lpCR->nActionType) || (VALADD == lpCR->nActionType) || (VALMODI == lpCR->nActionType)) { lpszFullName = GetWholeValueName(lpCR->lpContentNew, FALSE); - if (((VALDEL == lpCR->nActionType) || (VALADD == lpCR->nActionType)) || ((VALMODI == lpCR->nActionType) && (iOutputType == OUT_REG_INSTALL))) { + if (((VALDEL == lpCR->nActionType) || (VALADD == lpCR->nActionType)) || ((VALMODI == lpCR->nActionType) && (pOutputFileDescription->iOutputType == OUT_REG_INSTALL))) { // if (iOutputType == OUT_REG_INSTALL) { lpszActualKeyName = GetWholeKeyName(((LPVALUECONTENT)(lpCR->lpContentNew))->lpFatherKC, FALSE); if (0 == _tcscmp(lpszActualKeyName, lpszPreviousKeyName)) { @@ -562,7 +439,7 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in } if ((DIRDEL == lpCR->nActionType) || (DIRADD == lpCR->nActionType) || (DIRMODI == lpCR->nActionType) || (FILEDEL == lpCR->nActionType) || (FILEADD == lpCR->nActionType) || (FILEMODI == lpCR->nActionType)) { - lpszFullName = GetWholeFileName(lpCR->lpContentNew, 0, FALSE); + lpszFullName = GetWholeFileName(lpCR->lpContentNew, 0, NULL); if (IsInSkipList(lpszFullName, pFileSkipList, (bFileSkipAdded ? TRUE : FALSE))) { MYFREE(lpszFullName); continue; @@ -573,7 +450,7 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in // ((iOutputType == OUT_TXT) || (iOutputType == OUT_HTML) || // (iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_REG_INSTALL) || (iOutputType == OUT_INF_INSTALL)) // ) { - iResultStringsMac = ResultToString(rgszResultStrings, iResultStringsMac, iLinesWrittenOldPart, lpCR->nActionType, lpCR->lpContentNew, TRUE, bSuppressKey, iOutputType); + iResultStringsMac = ResultToString(rgszResultStrings, iResultStringsMac, iLinesWrittenOldPart, lpCR->nActionType, lpCR->lpContentNew, TRUE, bSuppressKey, pOutputFileDescription); //} } } @@ -583,13 +460,13 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in continue; } - if (iOutputType == OUT_HTML) { + if (pOutputFileDescription->iOutputType == OUT_HTML) { // 1.8.0: zebra/flip-flop colors if (!fColor) { - WriteFileCP(hFile, nCodePage, lpszHTMLSpan1, cbHTMLSpan1, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLSpan1, cbHTMLSpan1, &NBW, NULL); } else { - WriteFileCP(hFile, nCodePage, lpszHTMLSpan2, cbHTMLSpan2, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLSpan2, cbHTMLSpan2, &NBW, NULL); } } @@ -600,7 +477,7 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in nCharsToWrite = HTMLWRAPLENGTH; } - WriteFileCP(hFile, nCodePage, lpszResultTemp, (DWORD)(nCharsToWrite * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszResultTemp, (DWORD)(nCharsToWrite * sizeof(TCHAR)), &NBW, NULL); lpszResultTemp += nCharsToWrite; nCharsToGo -= nCharsToWrite; @@ -608,31 +485,31 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in break; // skip newline } - if (iOutputType == OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); } else { - WriteFileCP(hFile, nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); } } MYFREE(rgszResultStrings[i]); - if (iOutputType == OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszHTMLSpanEnd, cbHTMLSpanEnd, &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLSpanEnd, cbHTMLSpanEnd, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); } else { - WriteFileCP(hFile, nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); } } // since 1.9.1: Separate objects in output with empty line - if (fOutSeparateObjs) { - if (iOutputType == OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); + if (pOutputFileDescription->fOutSeparateObjs) { + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTML_BR, cbHTML_BR, &NBW, NULL); } else { - WriteFileCP(hFile, nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszCRLF, cbCRLF, &NBW, NULL); } } @@ -653,864 +530,333 @@ VOID WritePartNew(HANDLE hFile, DWORD nActionType, LPCOMPRESULTNEW lpStartCR, in MYFREE(rgszResultStrings); MYFREE(lpszPreviousKeyName); - if (iOutputType == OUT_HTML) { - WriteFileCP(hFile, nCodePage, lpszHTMLTd2End, (DWORD)(_tcslen(lpszHTMLTd2End) * sizeof(TCHAR)), &NBW, NULL); -// WriteFileCP(hFile, nCodePage, lpszHTMLTableEnd, (DWORD)(_tcslen(lpszHTMLTableEnd) * sizeof(TCHAR)), &NBW, NULL); - WriteHTMLPartEnd(hFile); - } -} - -// ---------------------------------------------------------------------- -VOID WriteTitle(HANDLE hFile, LPTSTR lpszSectionTitle, LPTSTR lpszValue, int iOutputType) -{ - //if (fAsHTML) { - // WriteFileCP(hFile, nCodePage, lpszHTMLTableBegin, (DWORD)(_tcslen(lpszHTMLTableBegin) * sizeof(TCHAR)), &NBW, NULL); - // WriteFileCP(hFile, nCodePage, lpszHTMLTd1Begin, (DWORD)(_tcslen(lpszHTMLTd1Begin) * sizeof(TCHAR)), &NBW, NULL); - //} - if (iOutputType == OUT_HTML) - return; - - if (iOutputType == OUT_UNL) - WriteFileCP(hFile, nCodePage, lpszCommentCommon, (DWORD)(_tcslen(lpszCommentCommon) * sizeof(TCHAR)), &NBW, NULL); - else if (iOutputType == OUT_BAT) - WriteFileCP(hFile, nCodePage, lpszCommentBAT, (DWORD)(_tcslen(lpszCommentCommon) * sizeof(TCHAR)), &NBW, NULL); - else if (iOutputType == OUT_ISS_DEINSTALL) - WriteFileCP(hFile, nCodePage, lpszCommentCommon, (DWORD)(_tcslen(lpszCommentCommon) * sizeof(TCHAR)), &NBW, NULL); - else if (iOutputType == OUT_ISS_INSTALL) - WriteFileCP(hFile, nCodePage, lpszCommentCommon, (DWORD)(_tcslen(lpszCommentCommon) * sizeof(TCHAR)), &NBW, NULL); - else if (iOutputType == OUT_NSI_DEINSTALL) - WriteFileCP(hFile, nCodePage, lpszCommentCommon, (DWORD)(_tcslen(lpszCommentCommon) * sizeof(TCHAR)), &NBW, NULL); - else if (iOutputType == OUT_NSI_INSTALL) - WriteFileCP(hFile, nCodePage, lpszCommentCommon, (DWORD)(_tcslen(lpszCommentCommon) * sizeof(TCHAR)), &NBW, NULL); - else if (iOutputType == OUT_REG_DEINSTALL) - WriteFileCP(hFile, nCodePage, lpszCommentCommon, (DWORD)(_tcslen(lpszCommentCommon) * sizeof(TCHAR)), &NBW, NULL); - else if (iOutputType == OUT_REG_INSTALL) - WriteFileCP(hFile, nCodePage, lpszCommentCommon, (DWORD)(_tcslen(lpszCommentCommon) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszSectionTitle, (DWORD)(_tcslen(lpszSectionTitle) * sizeof(TCHAR)), &NBW, NULL); - if (lpszValue != NULL) { - WriteFileCP(hFile, nCodePage, TEXT(" "), (DWORD)(1 * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszValue, (DWORD)(_tcslen(lpszValue) * sizeof(TCHAR)), &NBW, NULL); - } - - //if (fAsHTML) { - // WriteFileCP(hFile, nCodePage, lpszHTMLTd1End, (DWORD)(_tcslen(lpszHTMLTd1End) * sizeof(TCHAR)), &NBW, NULL); - // WriteFileCP(hFile, nCodePage, lpszHTMLTableEnd, (DWORD)(_tcslen(lpszHTMLTableEnd) * sizeof(TCHAR)), &NBW, NULL); - //} else { - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - //} -} - -// ---------------------------------------------------------------------- -VOID WriteUNLINIKeys(HANDLE hFile) -{ - LPTSTR lpszBuffer; - DWORD nBufferSize = 2048; - - lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - - _tcscpy(_Notnull_ lpszBuffer, lpszCommentCommon); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - - //Title = Sandboxie - Plus - //Log = 1 - //; NewFileLog = 1 - //; LogOnlyErrors = 1 - //; Simulation = 1 - //DeleteReadOnly = 1 - //; - // if (GetDlgItemText(hWnd, IDC_EDITTITLE, lpszBuffer, EXTDIRLEN) != 0) { // length incl. NULL character - _tcscpy(lpszBuffer, TEXT("Title=")); - _tcscat(_Notnull_ lpszBuffer, lpszTitle); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("Log=1")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("; NewFileLog=1")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("; LogOnlyErrors=1")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("; Simulation=1")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("DeleteReadOnly=")); - _tcscat(lpszBuffer, (fDeleteReadOnly ? TEXT("1") : TEXT("0"))); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - - MYFREE(lpszBuffer); -} - -VOID WriteISSSetupKeys(HANDLE hFile, BOOL bInstall) -{ - LPTSTR lpszBuffer; - DWORD nBufferSize = 2048; - - lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - _tcscpy(_Notnull_ lpszBuffer, lpszCommentCommon); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - - //; #define MyAppPublisher "skydive241@gmx.de" - //; #define MyAppURL "http://www.example.com/" - //; #define MyAppExeName "MyProg.exe" - //; NOTE: The value of AppId uniquely identifies this application. - //; Do not use the same AppId value in installers for other applications. - //; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) - //; AppId = { {1A0386AC - 5147 - 4C46 - BEC7 - 720C729B21C2} - //; AppVerName = {#MyAppName} {#MyAppVersion} - //; AppPublisher = {#MyAppPublisher} - //; InfoBeforeFile = regshot uninstaller - handle with care - //; InfoAfterFile = '"Title" uninstalled - - - // if (GetDlgItemText(hWnd, IDC_EDITTITLE, lpszBuffer, EXTDIRLEN) != 0) { // length incl. NULL character - //#define MyAppName "Regshot's uninstaller for ""Title"" - _tcscpy(lpszBuffer, TEXT("#define MyAppName \"Regshot's ")); - if (bInstall) - _tcscat(lpszBuffer, TEXT("installer")); - else - _tcscat(lpszBuffer, TEXT("uninstaller")); - _tcscat(lpszBuffer, TEXT(" for \"\"")); - _tcscat(_Notnull_ lpszBuffer, lpszTitle); - _tcscat(_Notnull_ lpszBuffer, TEXT("\"\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //#define MyAppVersion "1.0" - _tcscpy(lpszBuffer, TEXT("#define MyAppVersion \"1.0\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _tcscpy(lpszBuffer, TEXT("[Setup]")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //AppName = {#MyAppName} - _tcscpy(lpszBuffer, TEXT("AppName={#MyAppName}")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //AppVersion = {#MyAppVersion} - _tcscpy(lpszBuffer, TEXT("AppVersion={#MyAppVersion}")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //CreateAppDir = no - _tcscpy(lpszBuffer, TEXT("CreateAppDir=no")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //_tcscat(lpszBuffer, (fDeleteReadOnly ? TEXT("1") : TEXT("0"))); - //WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //OutputBaseFilename = Regshot - Installer - _tcscpy(lpszBuffer, TEXT("OutputBaseFilename=")); - _tcscat(lpszBuffer, lpszTitle); - if (bInstall) - _tcscat(lpszBuffer, TEXT("-Installer")); - else - _tcscat(lpszBuffer, TEXT("-Uninstaller")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //Compression = lzma - _tcscpy(lpszBuffer, TEXT("Compression=lzma")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //SolidCompression = yes - _tcscpy(lpszBuffer, TEXT("SolidCompression=yes")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //Uninstallable = no - _tcscpy(lpszBuffer, TEXT("Uninstallable=no")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //SetupLogging = True - _tcscpy(lpszBuffer, TEXT("SetupLogging=True")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - if (fUseDifferentISSOutputFolder) { - //TODO: OutputDir = c:\temp\Output - _tcscpy(lpszBuffer, TEXT("OutputDir=")); - _tcscat(lpszBuffer, lpszISSOutputFolder); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - } - _tcscpy(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - //[Languages] - _tcscpy(lpszBuffer, TEXT("[Languages]")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //Name: "english"; MessagesFile: "compiler:Default.isl" - _tcscpy(lpszBuffer, TEXT("Name: \"english\"; MessagesFile: \"compiler:Default.isl\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - -//[Types] - _tcscpy(lpszBuffer, TEXT("[Types]")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); -//Name: "full"; Description: "Full maintenance"; Flags: iscustom - _tcscpy(lpszBuffer, TEXT("Name: \"full\"; Description: \"Full maintenance\"; Flags: iscustom")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); -//Name: "filesystem"; Description: "Filesystem maintenance" - _tcscpy(lpszBuffer, TEXT("Name: \"filesystem\"; Description: \"Filesystem maintenance\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); -//Name: "registry"; Description: "Registry maintenance" - _tcscpy(lpszBuffer, TEXT("Name: \"registry\"; Description: \"Registry maintenance\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); -// -//[Components] - _tcscpy(lpszBuffer, TEXT("[Components]")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); -//Name: Filesystem; Types: full filesystem; Description: Filesystem maintenance - _tcscpy(lpszBuffer, TEXT("Name: \"Filesystem\"; Types: full filesystem; Description: \"Filesystem maintenance\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); -//Name: Registry; Types: full registry; Description: Registry maintenance - _tcscpy(lpszBuffer, TEXT("Name: \"Registry\"; Types: full registry; Description: \"Registry maintenance\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _tcscpy(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - MYFREE(lpszBuffer); -} - -VOID WriteNSISetupKeys(HANDLE hFile, BOOL bInstall) -{ - LPTSTR lpszBuffer; - DWORD nBufferSize = 2048; - - lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - _tcscpy(_Notnull_ lpszBuffer, lpszCommentCommon); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - -//!include "MUI2.nsh" -// -//Name "Example2" -//OutFile "C:\Temp\Example2.exe" -//RequestExecutionLevel admin -//Unicode True -//ShowInstDetails Show -// -//;-------------------------------- -//; Pages -//;-------------------------------- -//!insertmacro MUI_PAGE_COMPONENTS -//!insertmacro MUI_PAGE_INSTFILES -// -//;-------------------------------- -//;Languages -//;-------------------------------- -//!insertmacro MUI_LANGUAGE "English" -//!insertmacro MUI_LANGUAGE "German" -// -//;-------------------------------- -//; The stuff to install -//;-------------------------------- -//Section "Example2" -// -// SectionIn RO - -// if (GetDlgItemText(hWnd, IDC_EDITTITLE, lpszBuffer, EXTDIRLEN) != 0) { // length incl. NULL character -//!include "MUI2.nsh" - _tcscpy(lpszBuffer, TEXT("!include \"MUI2.nsh\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - //Name "Example2" - _tcscpy(lpszBuffer, TEXT("Name \"")); - _tcscat(_Notnull_ lpszBuffer, lpszTitle); - if (bInstall) - _tcscat(lpszBuffer, TEXT("-installer")); - else - _tcscat(lpszBuffer, TEXT("-uninstaller")); - _tcscat(_Notnull_ lpszBuffer, TEXT("\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _tcscpy(lpszBuffer, TEXT("OutFile \"")); - if (fUseDifferentNSIOutputFolder) { - _tcscat(lpszBuffer, lpszNSIOutputFolder); - if (_tcsrchr(lpszBuffer, _T('\\')) != lpszBuffer + _tcslen(lpszBuffer) - 1) - _tcscat(_Notnull_ lpszBuffer, TEXT("\\")); - } - _tcscat(_Notnull_ lpszBuffer, lpszTitle); - if (bInstall) - _tcscat(lpszBuffer, TEXT("-installer.exe")); - else - _tcscat(lpszBuffer, TEXT("-uninstaller.exe")); - _tcscat(_Notnull_ lpszBuffer, TEXT("\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - //RequestExecutionLevel admin - _tcscpy(lpszBuffer, TEXT("RequestExecutionLevel admin")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //Unicode True - _tcscpy(lpszBuffer, TEXT("Unicode True")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //ShowInstDetails Show - _tcscpy(lpszBuffer, TEXT("ShowInstDetails Show")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //InstallDir "$EXEDIR" - _tcscpy(lpszBuffer, TEXT("InstallDir \"$EXEDIR\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - //;-------------------------------- - //; Pages - //;-------------------------------- - //!insertmacro MUI_PAGE_COMPONENTS - //!insertmacro MUI_PAGE_INSTFILES - _tcscpy(lpszBuffer, TEXT(";--------------------------------")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("; Pages")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT(";--------------------------------")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("!insertmacro MUI_PAGE_COMPONENTS")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("!insertmacro MUI_PAGE_INSTFILES")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //;-------------------------------- - //;Languages - //;-------------------------------- - //!insertmacro MUI_LANGUAGE "English" - //!insertmacro MUI_LANGUAGE "German" - _tcscpy(lpszBuffer, TEXT(";--------------------------------")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("; Languages")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT(";--------------------------------")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("!insertmacro MUI_LANGUAGE \"English\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("!insertmacro MUI_LANGUAGE \"German\"")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //;-------------------------------- - //; Maintenance actions - //;-------------------------------- - //Section "Example2" - // - // SectionIn RO - _tcscpy(lpszBuffer, TEXT(";--------------------------------")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT("; Maintenance actions")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, TEXT(";--------------------------------")); - _tcscat(_Notnull_ lpszBuffer, lpszCRLF); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //_tcscpy(lpszBuffer, TEXT("Section \"Maintenance\"")); - //_tcscat(_Notnull_ lpszBuffer, lpszCRLF); - //_tcscat(_Notnull_ lpszBuffer, lpszCRLF); - //WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //_tcscpy(lpszBuffer, TEXT(" SectionIn RO")); - //_tcscat(_Notnull_ lpszBuffer, lpszCRLF); - //_tcscat(_Notnull_ lpszBuffer, lpszCRLF); - //WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - MYFREE(lpszBuffer); -} - -VOID WriteISSEnd(HANDLE hFile) -{ - LPTSTR lpszBuffer; - DWORD nBufferSize = 2048; - - lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - if (lpszBuffer != NULL) { - _tcscpy(lpszBuffer, lpszISSSectionMessages); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, lpszISSReadyLabel1); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, lpszISSReadyLabel2b); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, lpszISSButtonInstall); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - - MYFREE(lpszBuffer); - } -} - -VOID WriteNSISectionEnd(HANDLE hFile) -{ - LPTSTR lpszBuffer; - DWORD nBufferSize = 2048; - - lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - if (lpszBuffer != NULL) { - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, lpszNSISectionEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - - MYFREE(lpszBuffer); + if (pOutputFileDescription->iOutputType == OUT_HTML) { + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLTd2End, (DWORD)(_tcslen(lpszHTMLTd2End) * sizeof(TCHAR)), &NBW, NULL); +// WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszHTMLTableEnd, (DWORD)(_tcslen(lpszHTMLTableEnd) * sizeof(TCHAR)), &NBW, NULL); } } // ---------------------------------------------------------------------- -VOID WriteCommonBegin(HANDLE hFile, LPTSTR lpszDestFileName, LPTSTR lpszComment) -{ - LPTSTR lpszBuffer; - DWORD nBufferSize = 2048; - - lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - //; - //; Maintenance - File D : \Eigene Dateien\Snapshots\Sandboxie - Plus\Sandboxie - Plus.UNL - //; @ Patrick Eder(Patrick.Eder@gmx.de) - //; !!!!!!!! H A N D L E W I T H C A R E !!!!!!!! - //; - //; Regshot x64 ANSI Dbg(trunk rUnknown) - _tcscpy(_Notnull_ lpszBuffer, lpszComment); - WriteFileCP(hFile, nCodePage, _Notnull_ lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscat(_Notnull_ lpszBuffer, TEXT("Maintenance - File ")); - _tcscat(_Notnull_ lpszBuffer, lpszDestFileName); - WriteFileCP(hFile, nCodePage, _Notnull_ lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, lpszComment); - _tcscat(lpszBuffer, TEXT("@ Patrick (skydive241@gmx.de)")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, lpszComment); - _tcscat(lpszBuffer, TEXT("!!!!!!!! H A N D L E W I T H C A R E !!!!!!!!")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - _tcscpy(lpszBuffer, lpszComment); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - - _tcscat(lpszBuffer, lpszProgramName); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - - MYFREE(lpszBuffer); -} - -VOID WriteHTMLPartStart(HANDLE hFile, LPTSTR lpszPart, int nCount) -{ - LPTSTR lpszBuffer, lpszBuffer2; - DWORD nBufferSize = 2048; -// lpszBuffer = MYALLOC0((nBufferSize + 1) * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 -// lpszBuffer2 = MYALLOC0((nBufferSize + 1) * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - - // - // - // - WriteFileCP(hFile, nCodePage, lpszHTMLtrClass, (DWORD)(_tcslen(lpszHTMLtrClass) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, TEXT("c\">\r\n"), (DWORD)(5 * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLtdANameC, (DWORD)(_tcslen(lpszHTMLtdANameC) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLtrEnd, (DWORD)(_tcslen(lpszHTMLtrEnd) * sizeof(TCHAR)), &NBW, NULL); - // - // - //< /tr> - WriteFileCP(hFile, nCodePage, lpszHTMLtrClass, (DWORD)(_tcslen(lpszHTMLtrClass) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, TEXT("h\">\r\n"), (DWORD)(5 * sizeof(TCHAR)), &NBW, NULL); - - lpszBuffer = MYALLOC0((nBufferSize + 1) * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - lpszBuffer2 = MYALLOC0((nBufferSize + 1) * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - _tcscpy(lpszBuffer2, lpszHTMLtd); - _sntprintf(lpszBuffer, nBufferSize, lpszBuffer2, lpszPart, nCount); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLtrEnd, (DWORD)(_tcslen(lpszHTMLtrEnd) * sizeof(TCHAR)), &NBW, NULL); - - MYFREE(lpszBuffer2); - MYFREE(lpszBuffer); -} - -VOID WriteHTMLPartEnd(HANDLE hFile) -{ - UNREFERENCED_PARAMETER(hFile); - -} - -VOID WriteHTMLSectionStart(HANDLE hFile, LPTSTR lpszSection) -{ - LPTSTR lpszBuffer, lpszBuffer2; - DWORD nBufferSize = 2048; - lpszBuffer = MYALLOC0((nBufferSize + 1) * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - lpszBuffer2 = MYALLOC0((nBufferSize + 1) * sizeof(TCHAR)); // nBufferSize must > commentlength + 10 .txt 0000 - -//
%s %i\r\n"); LPTSTR lpszHTMLtdAName = TEXT("  
 
Deleted keys(0) for shot A
- _tcscpy(lpszBuffer2, lpszHTMLTableBegin); - _sntprintf(lpszBuffer, nBufferSize, lpszBuffer2, lpszSection); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - MYFREE(lpszBuffer2); - MYFREE(lpszBuffer); -} - -// ---------------------------------------------------------------------- -VOID WriteHTMLBegin(HANDLE hFile) +VOID WriteHTMLHeader(HANDLE hFile, int CodePage) { LPTSTR lpszBuffer, lpszBuffer2; - DWORD nBufferSize = 2048; - lpszBuffer = MYALLOC0((nBufferSize + 1) * sizeof(TCHAR)); - lpszBuffer2 = MYALLOC0((nBufferSize + 1) * sizeof(TCHAR)); + DWORD nBufferSize = 2048+1; + lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); + lpszBuffer2 = MYALLOC0(nBufferSize * sizeof(TCHAR)); + nBufferSize--; // HTML head - WriteFileCP(hFile, nCodePage, lpszHTMLBegin, (DWORD)(_tcslen(lpszHTMLBegin) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLHeadBegin, (DWORD)(_tcslen(lpszHTMLHeadBegin) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLContent, (DWORD)(_tcslen(lpszHTMLContent) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, lpszHTMLTitle, lpszProgramName); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLCSSLink, (DWORD)(_tcslen(lpszHTMLCSSLink) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLScript, (DWORD)(_tcslen(lpszHTMLScript) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLHeadEnd, (DWORD)(_tcslen(lpszHTMLHeadEnd) * sizeof(TCHAR)), &NBW, NULL); - - WriteFileCP(hFile, nCodePage, lpszHTMLScript_1, (DWORD)(_tcslen(lpszHTMLScript_1) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLMenu, (DWORD)(_tcslen(lpszHTMLMenu) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("Summary report"), TEXT("\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("Deleted keys"), TEXT("\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("New keys"), TEXT("\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("Deleted values"), TEXT("\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("New values"), TEXT("\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("Changed values"), TEXT("\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("FileShot"), TEXT("\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("To end of report"), TEXT(" ]\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLDivEnd, (DWORD)(_tcslen(lpszHTMLDivEnd) * sizeof(TCHAR)), &NBW, NULL); - - WriteFileCP(hFile, nCodePage, lpszHTMLClassm, (DWORD)(_tcslen(lpszHTMLClassm) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("%s%s%s%s\0"), TEXT("

"), TEXT("Report of the "), lpszProgramName, TEXT("

\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLdivCenter, (DWORD)(_tcslen(lpszHTMLdivCenter) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLTableInfo, (DWORD)(_tcslen(lpszHTMLTableInfo) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("h"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s%s%s\0"), lpszHTMLtdColspan, TEXT("3"), TEXT("\">"), TEXT("Summary report"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s\0"), TEXT("\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">Shot 1\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">Shot 2\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDateTime].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%04d-%02d-%02d %02d:%02d:%02d%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), - CompareResult.lpShot1->systemtime.wYear, CompareResult.lpShot1->systemtime.wMonth, CompareResult.lpShot1->systemtime.wDay, - CompareResult.lpShot1->systemtime.wHour, CompareResult.lpShot1->systemtime.wMinute, CompareResult.lpShot1->systemtime.wSecond, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%04d-%02d-%02d %02d:%02d:%02d%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), - CompareResult.lpShot1->systemtime.wYear, CompareResult.lpShot1->systemtime.wMonth, CompareResult.lpShot2->systemtime.wDay, - CompareResult.lpShot1->systemtime.wHour, CompareResult.lpShot1->systemtime.wMinute, CompareResult.lpShot2->systemtime.wSecond, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextComputer].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - //if (NULL != CompareResult.lpShot1->lpszComputerName) { - // _tcscpy(lpszBuffer, CompareResult.lpShot1->lpszComputerName); - //} - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->lpszComputerName, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->lpszComputerName, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextUsername].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->lpszUserName, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->lpszUserName, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), TEXT("Shot type"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - -// Shot-Time ist bislang nicht protokolliert - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), TEXT("Shot time"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextKey].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->stCounts.cKeys, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->stCounts.cKeys, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextValue].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->stCounts.cValues, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->stCounts.cValues, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDir].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->stCounts.cDirs, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->stCounts.cDirs, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextFile].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->stCounts.cFiles, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->stCounts.cFiles, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextKeyDel].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcDeleted.cKeys, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextKeyAdd].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcAdded.cKeys, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextValDel].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcDeleted.cValues, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextValAdd].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcAdded.cValues, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextValModi].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcChanged.cValues, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDirDel].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcDeleted.cDirs, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDirAdd].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcAdded.cDirs, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDirModi].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcModified.cDirs, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextFileDel].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcDeleted.cFiles, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextFileAdd].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcAdded.cFiles, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextFileModi].lpszText, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcModified.cFiles, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextTotal].lpszText, TEXT("\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcModified.cAll, lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), TEXT("File to restoring registry"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s\0"), lpszHTMLtdClass, TEXT("c"), TEXT("\" colspan=\"3\">Comment\r\n")); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); - lpszBuffer[nBufferSize] = _T('\0'); - WriteFileCP(hFile, nCodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); - - WriteFileCP(hFile, nCodePage, lpszHTMLTableEnd, (DWORD)(_tcslen(lpszHTMLDivEnd) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLDivEnd, (DWORD)(_tcslen(lpszHTMLDivEnd) * sizeof(TCHAR)), &NBW, NULL); - - MYFREE(lpszBuffer2); - MYFREE(lpszBuffer); -} - -// ---------------------------------------------------------------------- -VOID WriteHTMLEnd(HANDLE hFile) -{ - WriteFileCP(hFile, nCodePage, lpszHTMLBodyEnd, (DWORD)(_tcslen(lpszHTMLBodyEnd) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszHTMLEnd, (DWORD)(_tcslen(lpszHTMLEnd) * sizeof(TCHAR)), &NBW, NULL); -} - -// ---------------------------------------------------------------------- -VOID WriteHTML_BR(HANDLE hFile) -{ - WriteFileCP(hFile, nCodePage, lpszHTML_BR, (DWORD)(_tcslen(lpszHTML_BR) * sizeof(TCHAR)), &NBW, NULL); + if ((lpszBuffer != NULL) && (lpszBuffer2 != NULL)) { + lpszBuffer[nBufferSize] = _T('\0'); + WriteFileCP(hFile, CodePage, lpszHTMLBegin, (DWORD)(_tcslen(lpszHTMLBegin) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLHeadBegin, (DWORD)(_tcslen(lpszHTMLHeadBegin) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLContent, (DWORD)(_tcslen(lpszHTMLContent) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, lpszHTMLTitle, lpszProgramName); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLCSSLink, (DWORD)(_tcslen(lpszHTMLCSSLink) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLScript, (DWORD)(_tcslen(lpszHTMLScript) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLHeadEnd, (DWORD)(_tcslen(lpszHTMLHeadEnd) * sizeof(TCHAR)), &NBW, NULL); + + WriteFileCP(hFile, CodePage, lpszHTMLScript_1, (DWORD)(_tcslen(lpszHTMLScript_1) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLMenu, (DWORD)(_tcslen(lpszHTMLMenu) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("Summary report"), TEXT("\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("Deleted keys"), TEXT("\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("New keys"), TEXT("\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("Deleted values"), TEXT("\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("New values"), TEXT("\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("Changed values"), TEXT("\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("FileShot"), TEXT("\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t%s%s%s%s%s\0"), TEXT("\t"), TEXT("To end of report"), TEXT(" ]\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLDivEnd, (DWORD)(_tcslen(lpszHTMLDivEnd) * sizeof(TCHAR)), &NBW, NULL); + + WriteFileCP(hFile, CodePage, lpszHTMLClassm, (DWORD)(_tcslen(lpszHTMLClassm) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("%s%s%s%s\0"), TEXT("

"), TEXT("Report of the "), lpszProgramName, TEXT("

\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLdivCenter, (DWORD)(_tcslen(lpszHTMLdivCenter) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLTableInfo, (DWORD)(_tcslen(lpszHTMLTableInfo) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("h"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s%s%s\0"), lpszHTMLtdColspan, TEXT("3"), TEXT("\">"), TEXT("Summary report"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s\0"), TEXT("\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">Shot 1\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">Shot 2\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDateTime].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%04d-%02d-%02d %02d:%02d:%02d%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), + CompareResult.lpShot1->systemtime.wYear, CompareResult.lpShot1->systemtime.wMonth, CompareResult.lpShot1->systemtime.wDay, + CompareResult.lpShot1->systemtime.wHour, CompareResult.lpShot1->systemtime.wMinute, CompareResult.lpShot1->systemtime.wSecond, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%04d-%02d-%02d %02d:%02d:%02d%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), + CompareResult.lpShot1->systemtime.wYear, CompareResult.lpShot1->systemtime.wMonth, CompareResult.lpShot2->systemtime.wDay, + CompareResult.lpShot1->systemtime.wHour, CompareResult.lpShot1->systemtime.wMinute, CompareResult.lpShot2->systemtime.wSecond, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextComputer].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->lpszComputerName, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->lpszComputerName, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextUsername].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->lpszUserName, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->lpszUserName, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), TEXT("Shot type"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + // Shot-Time ist bislang nicht protokolliert + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), TEXT("Shot time"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextKey].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->stCounts.cKeys, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->stCounts.cKeys, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextValue].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->stCounts.cValues, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->stCounts.cValues, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDir].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->stCounts.cDirs, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->stCounts.cDirs, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextFile].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot1->stCounts.cFiles, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.lpShot2->stCounts.cFiles, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextKeyDel].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcDeleted.cKeys, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextKeyAdd].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcAdded.cKeys, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextValDel].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcDeleted.cValues, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextValAdd].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcAdded.cValues, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextValModi].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcChanged.cValues, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDirDel].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcDeleted.cDirs, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDirAdd].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcAdded.cDirs, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextDirModi].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcModified.cDirs, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextFileDel].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcDeleted.cFiles, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextFileAdd].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcAdded.cFiles, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextFileModi].lpszText, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcModified.cFiles, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), asLangTexts[iszTextTotal].lpszText, TEXT("\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%u%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), CompareResult.stcModified.cAll, lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("b"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("a"), TEXT("\">"), TEXT("File to restoring registry"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s%s%s\0"), lpszHTMLtdClass, TEXT("b"), TEXT("\">"), TEXT("-"), lpszHTMLtdEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s%s%s\0"), lpszHTMLtrClass, TEXT("a"), TEXT("\">\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t\t%s%s%s\0"), lpszHTMLtdClass, TEXT("c"), TEXT("\" colspan=\"3\">Comment\r\n")); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + _sntprintf(lpszBuffer, nBufferSize, TEXT("\t\t%s\0"), lpszHTMLtrEnd); + WriteFileCP(hFile, CodePage, lpszBuffer, (DWORD)(_tcslen(lpszBuffer) * sizeof(TCHAR)), &NBW, NULL); + + WriteFileCP(hFile, CodePage, lpszHTMLTableEnd, (DWORD)(_tcslen(lpszHTMLDivEnd) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, CodePage, lpszHTMLDivEnd, (DWORD)(_tcslen(lpszHTMLDivEnd) * sizeof(TCHAR)), &NBW, NULL); + + MYFREE(lpszBuffer2); + MYFREE(lpszBuffer); + } } // ---------------------------------------------------------------------- -VOID WriteHTML_CSS(HANDLE hFile) -{ - WriteFileCP(hFile, nCodePage, lpszHTML_CSS2, (DWORD)(_tcslen(lpszHTML_CSS2) * sizeof(CHAR)), &NBW, NULL); -} diff --git a/src/regshot.c b/src/regshot.c index 6dcdc85..edbe5fa 100644 --- a/src/regshot.c +++ b/src/regshot.c @@ -30,16 +30,6 @@ BOOL ConvertDWORD2LongString(LPTSTR lpszValueData[], LPVALUECONTENT lpVC, LPDWOR LPTSTR lpszResultFileBaseName = REGSHOT_RESULT_FILE; -LPTSTR lpszISSSectionRegistry = TEXT("[Registry]"); -LPTSTR lpszISSSectionDirs = TEXT("[Dirs]"); -LPTSTR lpszISSSectionFiles = TEXT("[Files]"); -LPTSTR lpszISSSectionInstallDelete = TEXT("[InstallDelete]"); - -LPTSTR lpszNSISectionRegistry = TEXT("Section \"Registry\""); -LPTSTR lpszNSISectionFilesystem = TEXT("Section \"Filesystem\""); -LPTSTR lpszNSIEndSection = TEXT("SectionEnd"); -LPTSTR lpszNSILogSetOn = TEXT(" LogSet On"); - LPTSTR lpszFilter = #ifdef _UNICODE TEXT("Regshot Unicode hive files (*.hivu)\0*.hivu\0All files\0*.*\0\0"); @@ -267,14 +257,14 @@ LPTSTR TransData(LPTSTR lpszValueData[], LPVALUECONTENT lpVC, DWORD nConversionT if (lpszValueType == NULL) return lpszValueData[0]; - _tcscpy(lpszValueType, TEXT("=")); + _tcscpy(lpszValueType, lpszEmpty); if ((iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_ISS_INSTALL)) { _tcscpy(lpszDivider, TEXT(" ")); - _tcscpy(lpszValueType, TEXT("")); + _tcscpy(lpszValueType, lpszEmpty); } else if ((iOutputType == OUT_NSI_DEINSTALL) || (iOutputType == OUT_NSI_INSTALL)) { - _tcscpy(lpszDivider, TEXT("")); - _tcscpy(lpszValueType, TEXT("")); + _tcscpy(lpszDivider, lpszEmpty); + _tcscpy(lpszValueType, lpszEmpty); } else { _tcscpy(lpszDivider, TEXT(",")); @@ -285,26 +275,26 @@ LPTSTR TransData(LPTSTR lpszValueData[], LPVALUECONTENT lpVC, DWORD nConversionT if ((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_ISS_DEINSTALL)) _tcscat(lpszValueType, TEXT("$")); else if ((iOutputType == OUT_NSI_INSTALL) || (iOutputType == OUT_NSI_DEINSTALL)) - _tcscat(lpszValueType, TEXT("")); + _tcscat(lpszValueType, lpszEmpty); else _tcscat(lpszValueType, TEXT("hex(0):")); break; case REG_SZ: - _tcscat(lpszValueType, TEXT("")); + _tcscat(lpszValueType, lpszEmpty); break; case REG_EXPAND_SZ: if ((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_ISS_DEINSTALL)) _tcscat(lpszValueType, TEXT("$")); else if ((iOutputType == OUT_NSI_INSTALL) || (iOutputType == OUT_NSI_DEINSTALL)) - _tcscat(lpszValueType, TEXT("")); + _tcscat(lpszValueType, lpszEmpty); else _tcscat(lpszValueType, TEXT("hex(2):")); break; case REG_BINARY: if ((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_ISS_DEINSTALL)) - _tcscat(lpszValueType, TEXT("")); + _tcscat(lpszValueType, lpszEmpty); else if ((iOutputType == OUT_NSI_INSTALL) || (iOutputType == OUT_NSI_DEINSTALL)) - _tcscat(lpszValueType, TEXT("")); + _tcscat(lpszValueType, lpszEmpty); else _tcscat(lpszValueType, TEXT("hex:")); // _tcscat(lpszValueType, TEXT("$")); @@ -330,7 +320,7 @@ LPTSTR TransData(LPTSTR lpszValueData[], LPVALUECONTENT lpVC, DWORD nConversionT if ((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_ISS_DEINSTALL)) _tcscat(lpszValueType, TEXT("$")); else if ((iOutputType == OUT_NSI_INSTALL) || (iOutputType == OUT_NSI_DEINSTALL)) { - _tcscat(lpszValueType, TEXT("")); + _tcscat(lpszValueType, lpszEmpty); _tcscpy(lpszDivider, TEXT(",")); } else @@ -345,7 +335,7 @@ LPTSTR TransData(LPTSTR lpszValueData[], LPVALUECONTENT lpVC, DWORD nConversionT case REG_QWORD: if ((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_ISS_DEINSTALL)) { _tcscat(lpszValueType, TEXT("$")); - _tcscpy(lpszDivider, TEXT("")); + _tcscpy(lpszDivider, lpszEmpty); } else _tcscat(lpszValueType, TEXT("hex(b):")); @@ -566,10 +556,14 @@ BOOL ConvertMultiSZ2Strings(LPTSTR lpszValueData[], LPVALUECONTENT lpVC, DWORD n cchToGo = cbData / sizeof(TCHAR); // convert byte count to char count while ((cchToGo > 0) && (*lpszSrc)) { if (0 != cchActual) { - if ((iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_ISS_INSTALL)) { - _tcscpy(lpszDst, TEXT("}break}")); - lpszDst += 7; - cchActual += 7; +// if ((iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_ISS_INSTALL)) { + if (lpszMultiSzStringDivider != NULL) { + //_tcscpy(lpszDst, TEXT("}break}")); + //lpszDst += 7; + //cchActual += 7; + _tcscpy(lpszDst, lpszMultiSzStringDivider); + lpszDst += _tcslen(lpszMultiSzStringDivider); + cchActual += _tcslen(lpszMultiSzStringDivider); } else { _tcscpy(lpszDst, TEXT("\", \"")); @@ -853,10 +847,6 @@ LPTSTR GetWholeValueData(LPTSTR lpszValueData[], LPVALUECONTENT lpVC, DWORD nAct } } - // TODO: hier werden nur noch Macros ersetzt, wie z.B. "}break}" durch "{break}" - if ((iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_ISS_INSTALL)) - lpszValueData[0] = ReplaceISSMacros(lpszValueData[0]); - return lpszValueData[0]; } @@ -960,7 +950,7 @@ VOID CreateNewResult(DWORD nActionType, LPVOID lpContentOld, LPVOID lpContentNew //------------------------------------------------------------- // Convert content to result strings //------------------------------------------------------------- -size_t ResultToString(LPTSTR rgszResultStrings[], size_t iResultStringsMac, size_t iLinesWrittenOldPart, DWORD nActionType, LPVOID lpContent, BOOL fNewContent, BOOL bSuppressKey, int iOutputType) +size_t ResultToString(LPTSTR rgszResultStrings[], size_t iResultStringsMac, size_t iLinesWrittenOldPart, DWORD nActionType, LPVOID lpContent, BOOL fNewContent, BOOL bSuppressKey, LPOUTPUTFILEDESCRIPTION pOutputFileDescription) { LPTSTR lpszName; LPTSTR lpszData = NULL; @@ -982,37 +972,41 @@ size_t ResultToString(LPTSTR rgszResultStrings[], size_t iResultStringsMac, size // if (iResultStringsNew < MAX_RESULT_STRINGS) { if (iResultStringsNew < nOutMaxResultLines) { - lpszIntermediateResultString = GetWholeKeyName(lpContent, fUseLongRegHead); - if (iOutputType == OUT_UNL) { - rgszResultStrings[iResultStringsNew] = BuildUNLOutputString(lpszIntermediateResultString, NULL, nActionType); + lpszIntermediateResultString = GetWholeKeyName(lpContent, pOutputFileDescription->fUseLongRegHead); + if (pOutputFileDescription->iOutputType == OUT_UNL) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if ((iOutputType == OUT_BAT) && (KEYADD == nActionType)) { - rgszResultStrings[iResultStringsNew] = BuildBATOutputString(lpszIntermediateResultString, NULL, nActionType); + else if ((pOutputFileDescription->iOutputType == OUT_BAT) && (KEYADD == nActionType)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_ISS_DEINSTALL) { - rgszResultStrings[iResultStringsNew] = BuildISSOutputString(lpszIntermediateResultString, NULL, nActionType, TRUE); + else if ((pOutputFileDescription->iOutputType == OUT_AU3) && (KEYADD == nActionType)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_ISS_INSTALL) { - rgszResultStrings[iResultStringsNew] = BuildISSOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE); + else if (pOutputFileDescription->iOutputType == OUT_ISS_DEINSTALL) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_NSI_DEINSTALL) { - rgszResultStrings[iResultStringsNew] = BuildNSIOutputString(lpszIntermediateResultString, NULL, nActionType, TRUE); + else if (pOutputFileDescription->iOutputType == OUT_ISS_INSTALL) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_NSI_INSTALL) { - rgszResultStrings[iResultStringsNew] = BuildNSIOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE); + else if (pOutputFileDescription->iOutputType == OUT_NSI_DEINSTALL) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_REG_DEINSTALL) { - rgszResultStrings[iResultStringsNew] = BuildREGOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, TRUE); + else if (pOutputFileDescription->iOutputType == OUT_NSI_INSTALL) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_REG_INSTALL) { - rgszResultStrings[iResultStringsNew] = BuildREGOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, FALSE); + else if (pOutputFileDescription->iOutputType == OUT_REG_DEINSTALL) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, pOutputFileDescription); + MYFREE(lpszIntermediateResultString); + } + else if (pOutputFileDescription->iOutputType == OUT_REG_INSTALL) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(lpszIntermediateResultString, NULL, nActionType, FALSE, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } else @@ -1023,59 +1017,63 @@ size_t ResultToString(LPTSTR rgszResultStrings[], size_t iResultStringsMac, size } else if ((VALDEL == nActionType) || (VALADD == nActionType) || (VALMODI == nActionType)) { // name - lpszIntermediateResultString = GetWholeKeyName(((LPVALUECONTENT)lpContent)->lpFatherKC, fUseLongRegHead); + lpszIntermediateResultString = GetWholeKeyName(((LPVALUECONTENT)lpContent)->lpFatherKC, pOutputFileDescription->fUseLongRegHead); // lpszIntermediateResultString = EscapeSpecialCharacters(lpszIntermediateResultString, _T('{'), TEXT("{")); // LPVALUECONTENT test = (LPVALUECONTENT)lpContent; - if (iOutputType == OUT_UNL) { - lpszName = BuildUNLOutputString(lpszIntermediateResultString, lpContent, nActionType); + if (pOutputFileDescription->iOutputType == OUT_UNL) { + lpszName = BuildOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, pOutputFileDescription); + MYFREE(lpszIntermediateResultString); + } + else if ((pOutputFileDescription->iOutputType == OUT_BAT) && (VALADD == nActionType)) { + lpszName = BuildOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if ((iOutputType == OUT_BAT) && (VALADD == nActionType)) { - lpszName = BuildBATOutputString(lpszIntermediateResultString, lpContent, nActionType); + else if ((pOutputFileDescription->iOutputType == OUT_AU3) && (VALADD == nActionType)) { + lpszName = BuildOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_ISS_DEINSTALL) { - lpszName = BuildISSOutputString(lpszIntermediateResultString, lpContent, nActionType, TRUE); + else if (pOutputFileDescription->iOutputType == OUT_ISS_DEINSTALL) { + lpszName = BuildOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_ISS_INSTALL) { - lpszName = BuildISSOutputString(lpszIntermediateResultString, lpContent, nActionType, FALSE); + else if (pOutputFileDescription->iOutputType == OUT_ISS_INSTALL) { + lpszName = BuildOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_NSI_DEINSTALL) { - lpszName = BuildNSIOutputString(lpszIntermediateResultString, lpContent, nActionType, TRUE); + else if (pOutputFileDescription->iOutputType == OUT_NSI_DEINSTALL) { + lpszName = BuildOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_NSI_INSTALL) { - lpszName = BuildNSIOutputString(lpszIntermediateResultString, lpContent, nActionType, FALSE); + else if (pOutputFileDescription->iOutputType == OUT_NSI_INSTALL) { + lpszName = BuildOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_REG_DEINSTALL) { - lpszName = BuildREGOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, TRUE); + else if (pOutputFileDescription->iOutputType == OUT_REG_DEINSTALL) { + lpszName = BuildOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } - else if (iOutputType == OUT_REG_INSTALL) { - lpszName = BuildREGOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, FALSE); + else if (pOutputFileDescription->iOutputType == OUT_REG_INSTALL) { + lpszName = BuildOutputString(lpszIntermediateResultString, lpContent, nActionType, bSuppressKey, pOutputFileDescription); MYFREE(lpszIntermediateResultString); } else - lpszName = GetWholeValueName(lpContent, fUseLongRegHead); + lpszName = GetWholeValueName(lpContent, pOutputFileDescription->fUseLongRegHead); cchData = 0; - if (((iOutputType == OUT_UNL) || (iOutputType == OUT_HTML) || (iOutputType == OUT_TXT) || - ((((iOutputType == OUT_ISS_DEINSTALL) || (iOutputType == OUT_NSI_DEINSTALL) || (iOutputType == OUT_REG_DEINSTALL)) && ((nActionType == VALDEL) || (nActionType == VALMODI))) || - ((((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_NSI_INSTALL) || (iOutputType == OUT_REG_INSTALL)) && ((nActionType == VALADD)) || (nActionType == VALMODI))))) - && !fNoVals) + if (((pOutputFileDescription->iOutputType == OUT_UNL) || (pOutputFileDescription->iOutputType == OUT_HTML) || (pOutputFileDescription->iOutputType == OUT_TXT) || + ((((pOutputFileDescription->iOutputType == OUT_ISS_DEINSTALL) || (pOutputFileDescription->iOutputType == OUT_NSI_DEINSTALL) || (pOutputFileDescription->iOutputType == OUT_REG_DEINSTALL)) && ((nActionType == VALDEL) || (nActionType == VALMODI))) || + ((((pOutputFileDescription->iOutputType == OUT_ISS_INSTALL) || (pOutputFileDescription->iOutputType == OUT_NSI_INSTALL) || (pOutputFileDescription->iOutputType == OUT_REG_INSTALL)) && ((nActionType == VALADD)) || (nActionType == VALMODI))))) + && !pOutputFileDescription->fNoVals) { // data // lpszData = GetWholeValueData(lpContent, TRUE, iOutputType); cchData = _tcslen(lpszName); - if ((iOutputType == OUT_REG_INSTALL) || (iOutputType == OUT_REG_DEINSTALL)) { + if ((pOutputFileDescription->iOutputType == OUT_REG_INSTALL) || (pOutputFileDescription->iOutputType == OUT_REG_DEINSTALL)) { // LPVALUECONTENT lpTest = lpContent; cchData = ((LPVALUECONTENT)lpContent)->cchValueName + 2; // *_tcslen(lpszREGValueEnclosing); } - GetWholeValueData(lpszValueData, lpContent, nActionType, cchData, iOutputType); + GetWholeValueData(lpszValueData, lpContent, nActionType, cchData, pOutputFileDescription->iOutputType); // if (NULL != lpszData) { // cchData = _tcslen(lpszData); // } @@ -1122,27 +1120,30 @@ size_t ResultToString(LPTSTR rgszResultStrings[], size_t iResultStringsMac, size if ((!fNewContent) || (0 >= iResultStringsMac)) { // if (iResultStringsNew < MAX_RESULT_STRINGS) { if (iResultStringsNew < nOutMaxResultLines) { - if (iOutputType == OUT_UNL) { - rgszResultStrings[iResultStringsNew] = BuildUNLOutputString(NULL, lpContent, nActionType); + if (pOutputFileDescription->iOutputType == OUT_UNL) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); + } + else if ((pOutputFileDescription->iOutputType == OUT_BAT) && (DIRADD == nActionType)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); } - else if ((iOutputType == OUT_BAT) && (DIRADD == nActionType)) { - rgszResultStrings[iResultStringsNew] = BuildBATOutputString(NULL, lpContent, nActionType); + else if ((pOutputFileDescription->iOutputType == OUT_AU3) && (DIRADD == nActionType)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); } - else if ((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_ISS_DEINSTALL)) { - rgszResultStrings[iResultStringsNew] = BuildISSOutputString(NULL, lpContent, nActionType, (iOutputType == OUT_ISS_DEINSTALL ? TRUE: FALSE)); + else if ((pOutputFileDescription->iOutputType == OUT_ISS_INSTALL) || (pOutputFileDescription->iOutputType == OUT_ISS_DEINSTALL)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); } - else if ((iOutputType == OUT_NSI_INSTALL) || (iOutputType == OUT_NSI_DEINSTALL)) { - rgszResultStrings[iResultStringsNew] = BuildNSIOutputString(NULL, lpContent, nActionType, (iOutputType == OUT_NSI_DEINSTALL ? TRUE: FALSE)); + else if ((pOutputFileDescription->iOutputType == OUT_NSI_INSTALL) || (pOutputFileDescription->iOutputType == OUT_NSI_DEINSTALL)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); } else - rgszResultStrings[iResultStringsNew] = GetWholeFileName(lpContent, 0, TRUE); + rgszResultStrings[iResultStringsNew] = GetWholeFileName(lpContent, 0, pOutputFileDescription); iResultStringsNew++; } } - if ((iOutputType != OUT_UNL) && (iOutputType != OUT_BAT) && - (iOutputType != OUT_ISS_INSTALL) && (iOutputType != OUT_ISS_DEINSTALL) && - (iOutputType != OUT_NSI_INSTALL) && (iOutputType != OUT_NSI_DEINSTALL) + if ((pOutputFileDescription->iOutputType != OUT_UNL) && (pOutputFileDescription->iOutputType != OUT_BAT) && (pOutputFileDescription->iOutputType != OUT_AU3) && + (pOutputFileDescription->iOutputType != OUT_ISS_INSTALL) && (pOutputFileDescription->iOutputType != OUT_ISS_DEINSTALL) && + (pOutputFileDescription->iOutputType != OUT_NSI_INSTALL) && (pOutputFileDescription->iOutputType != OUT_NSI_DEINSTALL) ) { // attributes lpszData = MYALLOC0(SIZEOF_RESULT_DATA * sizeof(TCHAR)); @@ -1187,27 +1188,30 @@ size_t ResultToString(LPTSTR rgszResultStrings[], size_t iResultStringsMac, size if ((!fNewContent) || (0 >= iResultStringsMac)) { // if (iResultStringsNew < MAX_RESULT_STRINGS) { if (iResultStringsNew < nOutMaxResultLines) { - if (iOutputType == OUT_UNL) { - rgszResultStrings[iResultStringsNew] = BuildUNLOutputString(NULL, lpContent, nActionType); + if (pOutputFileDescription->iOutputType == OUT_UNL) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); + } + else if ((pOutputFileDescription->iOutputType == OUT_BAT) && (FILEADD == nActionType)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); } - else if ((iOutputType == OUT_BAT) && (FILEADD == nActionType)) { - rgszResultStrings[iResultStringsNew] = BuildBATOutputString(NULL, lpContent, nActionType); + else if ((pOutputFileDescription->iOutputType == OUT_AU3) && (FILEADD == nActionType)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); } - else if ((iOutputType == OUT_ISS_INSTALL) || (iOutputType == OUT_ISS_DEINSTALL)) { - rgszResultStrings[iResultStringsNew] = BuildISSOutputString(NULL, lpContent, nActionType, (iOutputType == OUT_ISS_DEINSTALL ? TRUE : FALSE)); + else if ((pOutputFileDescription->iOutputType == OUT_ISS_INSTALL) || (pOutputFileDescription->iOutputType == OUT_ISS_DEINSTALL)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); } - else if ((iOutputType == OUT_NSI_INSTALL) || (iOutputType == OUT_NSI_DEINSTALL)) { - rgszResultStrings[iResultStringsNew] = BuildNSIOutputString(NULL, lpContent, nActionType, (iOutputType == OUT_NSI_DEINSTALL ? TRUE : FALSE)); + else if ((pOutputFileDescription->iOutputType == OUT_NSI_INSTALL) || (pOutputFileDescription->iOutputType == OUT_NSI_DEINSTALL)) { + rgszResultStrings[iResultStringsNew] = BuildOutputString(NULL, lpContent, nActionType, FALSE, pOutputFileDescription); } else - rgszResultStrings[iResultStringsNew] = GetWholeFileName(lpContent, 0, TRUE); + rgszResultStrings[iResultStringsNew] = GetWholeFileName(lpContent, 0, pOutputFileDescription); iResultStringsNew++; } } - if ((iOutputType != OUT_UNL) && (iOutputType != OUT_BAT) && - (iOutputType != OUT_ISS_INSTALL) && (iOutputType != OUT_ISS_DEINSTALL) && - (iOutputType != OUT_NSI_INSTALL) && (iOutputType != OUT_NSI_DEINSTALL) + if ((pOutputFileDescription->iOutputType != OUT_UNL) && (pOutputFileDescription->iOutputType != OUT_BAT) && (pOutputFileDescription->iOutputType != OUT_AU3) && + (pOutputFileDescription->iOutputType != OUT_ISS_INSTALL) && (pOutputFileDescription->iOutputType != OUT_ISS_DEINSTALL) && + (pOutputFileDescription->iOutputType != OUT_NSI_INSTALL) && (pOutputFileDescription->iOutputType != OUT_NSI_DEINSTALL) ) { // last write time, attributes, size ZeroMemory(&ftFile, sizeof(ftFile)); @@ -1327,9 +1331,19 @@ VOID CompareRegKeys(LPKEYCONTENT lpStartKC1, LPKEYCONTENT lpStartKC2) { LPKEYCONTENT lpKC1; LPKEYCONTENT lpKC2; + LPTSTR lpszFullName; // Compare keys for (lpKC1 = lpStartKC1; NULL != lpKC1; lpKC1 = lpKC1->lpBrotherKC) { + // TODO: Filter when comparing + lpszFullName = GetWholeKeyName(lpKC1, FALSE); +// if (IsInSkipList(lpszFullName, pRegSkipList, (bRegSkipAdded ? TRUE : FALSE))) { + if (IsInSkipList(lpszFullName, pRegSkipList, FALSE)) { + MYFREE(lpszFullName); + continue; + } + MYFREE(lpszFullName); + CompareResult.stcCompared.cKeys++; // Find a matching key for KC1 for (lpKC2 = lpStartKC2; NULL != lpKC2; lpKC2 = lpKC2->lpBrotherKC) { @@ -1461,6 +1475,14 @@ VOID CompareRegKeys(LPKEYCONTENT lpStartKC1, LPKEYCONTENT lpStartKC2) if (NOMATCH != lpKC2->fKeyMatch) { continue; } + // TODO: Filter when comparing + lpszFullName = GetWholeKeyName(lpKC2, FALSE); + // if (IsInSkipList(lpszFullName, pRegSkipList, (bRegSkipAdded ? TRUE : FALSE))) { + if (IsInSkipList(lpszFullName, pRegSkipList, FALSE)) { + MYFREE(lpszFullName); + continue; + } + MYFREE(lpszFullName); // KC2 has no matching KC1, so KC2 is an added key CompareResult.stcCompared.cKeys++; @@ -1600,8 +1622,6 @@ VOID CompareShots(VOID) BOOL OutputComparisonResult(VOID) { LPTSTR lpszBuffer; - LPTSTR lpszExtension = TEXT(""); - LPTSTR lpszFilenameSuffix = TEXT(""); LPTSTR lpszFilenameInstallerSuffix = TEXT("-Installer"); LPTSTR lpszFilenameUninstallerSuffix = TEXT("-Uninstaller"); LPTSTR lpszFilenameLogSuffix = TEXT("-log"); @@ -1609,7 +1629,20 @@ BOOL OutputComparisonResult(VOID) DWORD nBufferSize = 2048; size_t cchString; + // read common flags for output from gui (reset flags if they are wrong for certain output type) + fNoVals = (BOOL)SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_NOVALS), BM_GETCHECK, (WPARAM)0, (LPARAM)0); fOnlyNewEntries = (BOOL)SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_ONLYADDED), BM_GETCHECK, (WPARAM)0, (LPARAM)0); + fNoDeletedEntries = (BOOL)SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_NOTDELETED), BM_GETCHECK, (WPARAM)0, (LPARAM)0); + int nResult = (int)SendDlgItemMessage(hMainWnd, IDC_COMBO_MAINCP, CB_GETCURSEL, (WPARAM)0, (LPARAM)0); + if (CB_ERR == nResult) { + nCodePage = 65001; + } + else if (nResult == 0) + nCodePage = 0; + else if (nResult == 1) + nCodePage = -1; + else + nCodePage = 65001; if ((BOOL)SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_RESETADHOC), BM_GETCHECK, (WPARAM)0, (LPARAM)0)) { ResetAdhocFilters(); SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_RESETADHOC), BM_SETCHECK, (WPARAM)0, (LPARAM)0); @@ -1617,6 +1650,7 @@ BOOL OutputComparisonResult(VOID) // TODO: max. Anzahl Änderungen < 5000 (?) cEnd = (fOnlyNewEntries ? CompareResult.stcAdded.cAll : CompareResult.stcChanged.cAll); + cEnd = (fNoDeletedEntries ? CompareResult.stcAdded.cAll + CompareResult.stcModified.cAll : cEnd); if ((BOOL)SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_RESULT), BM_GETCHECK, (WPARAM)0, (LPARAM)0) && (cEnd <= nMaxNodes)) { DoTVPropertySheet(hMainWnd, (bCompareReg ? PROP_TVREGS : PROP_TVDIRS)); if (bNoOutput) { @@ -1645,6 +1679,8 @@ BOOL OutputComparisonResult(VOID) nOutputType[OUT_HTML] = bNoResetOutputTypes; if (fOutputTXTfile) nOutputType[OUT_TXT] = bNoResetOutputTypes; + if (fOutputAU3file) + nOutputType[OUT_AU3] = bNoResetOutputTypes; if (fISSDeinstallFile) nOutputType[OUT_ISS_DEINSTALL] = bNoResetOutputTypes; if (fISSInstallFile) @@ -1666,85 +1702,117 @@ BOOL OutputComparisonResult(VOID) } MYFREE(lpszValue); + DWORD cchDataline; + DWORD nSize = MAX_PATH; + int iIniValue = 0; + OUTPUTFILEDESCRIPTION OutputFileDescription; for (int i = OUT_UNL; i < OUTPUTTYPES; i++) { - BOOL fUseLongRegHeadBackup = fUseLongRegHead; - BOOL fOutSeparateObjsBackup = fOutSeparateObjs; - BOOL fLogEnvironmentStringsBackup = fLogEnvironmentStrings; - BOOL fLogUNLOrderBackup = fLogUNLOrder; - - // read common flags for output from gui (reset flags if they are wrong for certain output type) - fNoVals = (BOOL)SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_NOVALS), BM_GETCHECK, (WPARAM)0, (LPARAM)0); - fOnlyNewEntries = (BOOL)SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_ONLYADDED), BM_GETCHECK, (WPARAM)0, (LPARAM)0); -// fLogUNLOrder = (BOOL)SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_UNLORDER), BM_GETCHECK, (WPARAM)0, (LPARAM)0); - int nResult = (int)SendDlgItemMessage(hMainWnd, IDC_COMBO_MAINCP, CB_GETCURSEL, (WPARAM)0, (LPARAM)0); - if (CB_ERR == nResult) { - nCodePage = 65001; - } - else if (nResult == 0) - nCodePage = 0; - else if (nResult == 1) - nCodePage = -1; - else - nCodePage = 65001; - + // Schalter Installer/Uninstaller, Logger und Format auf den GUI + OutputFileDescription.lpszFormat = MYALLOC0(5 * sizeof(TCHAR)); + OutputFileDescription.bDeInstaller = TRUE; + OutputFileDescription.lpszOutDir = NULL; + OutputFileDescription.lpszOutFile = NULL; if (nOutputType[i]) { + OutputFileDescription.iOutputType = i; switch (i) { case OUT_UNL: - lpszFilenameSuffix = lpszFilenameUninstallerSuffix; - lpszExtension = TEXT(".unl"); - fOutSeparateObjs = FALSE; + _tcscpy(OutputFileDescription.lpszFormat, TEXT("UNL")); + break; + + case OUT_AU3: + _tcscpy(OutputFileDescription.lpszFormat, TEXT("AU3")); break; + case OUT_TXT: - lpszFilenameSuffix = lpszFilenameLogSuffix; - lpszExtension = TEXT(".txt"); + _tcscpy(OutputFileDescription.lpszFormat, TEXT("TXT")); break; + case OUT_HTML: - lpszFilenameSuffix = lpszFilenameLogSuffix; - lpszExtension = TEXT(".htm"); + _tcscpy(OutputFileDescription.lpszFormat, TEXT("HTML")); break; + case OUT_BAT: - lpszFilenameSuffix = lpszFilenameUninstallerSuffix; - lpszExtension = TEXT(".cmd"); - fOnlyNewEntries = TRUE; - fLogUNLOrder = FALSE; - fUseLongRegHead = FALSE; - fOutSeparateObjs = FALSE; + _tcscpy(OutputFileDescription.lpszFormat, TEXT("CMD")); break; + case OUT_REG_DEINSTALL: case OUT_REG_INSTALL: - lpszFilenameSuffix = (i == OUT_REG_DEINSTALL ? lpszFilenameUninstallerSuffix : lpszFilenameInstallerSuffix); - lpszExtension = TEXT(".reg"); - fLogUNLOrder = FALSE; - fNoVals = FALSE; - nCodePage = (fREG5 ? -1 : 0); - fUseLongRegHead = TRUE; - fOutSeparateObjs = FALSE; + _tcscpy(OutputFileDescription.lpszFormat, (fREG5 ? TEXT("REG5") : TEXT("REG4"))); + OutputFileDescription.bDeInstaller = (i == OUT_REG_DEINSTALL ? TRUE : FALSE); break; + case OUT_ISS_DEINSTALL: case OUT_ISS_INSTALL: - lpszFilenameSuffix = (i == OUT_ISS_DEINSTALL ? lpszFilenameUninstallerSuffix : lpszFilenameInstallerSuffix); - lpszExtension = TEXT(".iss"); - fLogUNLOrder = FALSE; - fLogEnvironmentStrings = FALSE; - fNoVals = FALSE; - fOutSeparateObjs = FALSE; + _tcscpy(OutputFileDescription.lpszFormat, TEXT("ISS")); + OutputFileDescription.bDeInstaller = (i == OUT_ISS_DEINSTALL ? TRUE : FALSE); + if (fUseDifferentISSOutputFolder) + OutputFileDescription.lpszOutDir = lpszISSOutputFolder; break; + case OUT_NSI_DEINSTALL: case OUT_NSI_INSTALL: - lpszFilenameSuffix = (i == OUT_NSI_DEINSTALL ? lpszFilenameUninstallerSuffix : lpszFilenameInstallerSuffix); - lpszExtension = TEXT(".nsi"); - fLogUNLOrder = FALSE; - fLogEnvironmentStrings = FALSE; - fNoVals = FALSE; - fOutSeparateObjs = FALSE; - break; - case OUT_INF_DEINSTALL: - case OUT_INF_INSTALL: - lpszFilenameSuffix = (i == OUT_INF_DEINSTALL ? lpszFilenameUninstallerSuffix : lpszFilenameInstallerSuffix); - lpszExtension = TEXT(".inf"); - fOutSeparateObjs = FALSE; + _tcscpy(OutputFileDescription.lpszFormat, TEXT("NSI")); + OutputFileDescription.bDeInstaller = (i == OUT_NSI_DEINSTALL ? TRUE : FALSE); + + OutputFileDescription.lpszOutFile = MYALLOC(MAX_PATH * sizeof(TCHAR)); + if (fUseDifferentNSIOutputFolder) { + _tcscpy(OutputFileDescription.lpszOutFile, lpszNSIOutputFolder); + if (_tcsrchr(OutputFileDescription.lpszOutFile, _T('\\')) != OutputFileDescription.lpszOutFile + _tcslen(OutputFileDescription.lpszOutFile) - 1) + _tcscat(OutputFileDescription.lpszOutFile, TEXT("\\")); + _tcscat(OutputFileDescription.lpszOutFile, lpszTitle); + } + else + _tcscpy(OutputFileDescription.lpszOutFile, lpszTitle); + _tcscat(OutputFileDescription.lpszOutFile, OutputFileDescription.lpszFilenameSuffix); + break; } + if (lpszMacroFileName != NULL) { + GetModuleFileNameW(NULL, lpszMacroFileName, MAX_PATH); + PathRemoveFileSpec(lpszMacroFileName); + _tcscat(lpszMacroFileName, TEXT("\\Templates\\")); + _tcscat(lpszMacroFileName, OutputFileDescription.lpszFormat); + _tcscat(lpszMacroFileName, TEXT(".tpl")); + } + OutputFileDescription.lpszComment = TEXT(";"); + cchDataline = GetPrivateProfileString(TEXT("$$SETUP$$"), TEXT("Comment"), TEXT(";"), OutputFileDescription.lpszComment, nSize, lpszMacroFileName); + OutputFileDescription.lpszExtension = MYALLOC0(20 * sizeof(TCHAR)); + cchDataline = GetPrivateProfileString(TEXT("$$SETUP$$"), TEXT("Extension"), TEXT(".XXXXX"), OutputFileDescription.lpszExtension, nSize, lpszMacroFileName); + + OutputFileDescription.lpszFilenameSuffix = (OutputFileDescription.bDeInstaller ? lpszFilenameUninstallerSuffix : lpszFilenameInstallerSuffix); + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("Logger"), 0, lpszMacroFileName); + OutputFileDescription.bLogger = (iIniValue == 1 ? TRUE : FALSE); + OutputFileDescription.lpszFilenameSuffix = (OutputFileDescription.bLogger ? lpszFilenameLogSuffix : OutputFileDescription.lpszFilenameSuffix); + + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("NoVals"), (fNoVals ? 1 : 0), lpszMacroFileName); + OutputFileDescription.fNoVals = (iIniValue == 1 ? TRUE : FALSE); + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("OnlyNewEntries"), (fOnlyNewEntries ? 1 : 0), lpszMacroFileName); + OutputFileDescription.fOnlyNewEntries = (iIniValue == 1 ? TRUE : FALSE); + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("LogUNLOrder"), (fLogUNLOrder ? 1 : 0), lpszMacroFileName); + OutputFileDescription.fLogUNLOrder = (iIniValue == 1 ? TRUE : FALSE); + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("OutSeparateObjs"), (fOutSeparateObjs ? 1 : 0), lpszMacroFileName); + OutputFileDescription.fOutSeparateObjs = (iIniValue == 1 ? TRUE : FALSE); + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("UseLongRegHead"), (fUseLongRegHead ? 1 : 0), lpszMacroFileName); + OutputFileDescription.fUseLongRegHead = (iIniValue == 1 ? TRUE : FALSE); + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("GroupRegKeys"), 0, lpszMacroFileName); + OutputFileDescription.fGroupRegKeys = (iIniValue == 1 ? TRUE : FALSE); + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("LogEnvironmentStrings"), (fLogEnvironmentStrings ? 1 : 0), lpszMacroFileName); + OutputFileDescription.fLogEnvironmentStrings = (iIniValue == 1 ? TRUE : FALSE); + + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("Filesystem"), 1, lpszMacroFileName); + OutputFileDescription.fFilesystem = (iIniValue == 1 ? TRUE : FALSE); + OutputFileDescription.fFilesystem = (bCompareFS ? OutputFileDescription.fFilesystem : FALSE); + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("Registry"), 1, lpszMacroFileName); + OutputFileDescription.fRegistry = (iIniValue == 1 ? TRUE : FALSE); + OutputFileDescription.fRegistry = (bCompareReg ? OutputFileDescription.fRegistry : FALSE); + + OutputFileDescription.nCodePage = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("Codepage"), nCodePage, lpszMacroFileName); + iIniValue = GetPrivateProfileInt(TEXT("$$SETUP$$"), TEXT("BOM"), 0, lpszMacroFileName); + OutputFileDescription.bBOM = (iIniValue == 1 ? TRUE : FALSE); + + OutputFileDescription.lpszScriptFile = NULL; + OutputFileDescription.lpszPartCountText = NULL; + OutputFileDescription.nPartCount = 0; } else continue; @@ -1779,8 +1847,11 @@ BOOL OutputComparisonResult(VOID) CreateDirectory(lpszDestFileName, 0); if (i == OUT_HTML) { _tcscat(lpszDestFileName, TEXT("report.css")); + DeleteFile(lpszDestFileName); HANDLE hFile = CreateFile(lpszDestFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - WriteHTML_CSS(hFile); + if (OutputFileDescription.bBOM) + WriteBOM(hFile, OutputFileDescription.nCodePage); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$CSS$$"), &OutputFileDescription); CloseHandle(hFile); } @@ -1791,9 +1862,9 @@ BOOL OutputComparisonResult(VOID) _tcscat(lpszDestFileName, lpszResultFileBaseName); } - _tcscat(lpszDestFileName, lpszFilenameSuffix); + _tcscat(lpszDestFileName, OutputFileDescription.lpszFilenameSuffix); cchString = _tcslen(lpszDestFileName); - _tcscat(lpszDestFileName, lpszExtension); + _tcscat(lpszDestFileName, OutputFileDescription.lpszExtension); HANDLE hFile = CreateFile(lpszDestFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hFile) { @@ -1802,7 +1873,7 @@ BOOL OutputComparisonResult(VOID) for (filetail = 1; MAXAMOUNTOFFILE > filetail; filetail++) { _sntprintf(lpszDestFileName + cchString, 6, TEXT("_%04u\0"), filetail); //*(lpszDestFileName+cchString + 5) = 0x00; - _tcscpy(lpszDestFileName + cchString + 5, lpszExtension); + _tcscpy(lpszDestFileName + cchString + 5, OutputFileDescription.lpszExtension); hFile = CreateFile(lpszDestFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hFile) { @@ -1821,312 +1892,232 @@ BOOL OutputComparisonResult(VOID) return FALSE; } } + OutputFileDescription.lpszScriptFile = lpszDestFileName; + ReadOutputMacros(&OutputFileDescription); + if (OutputFileDescription.bBOM) + WriteBOM(hFile, OutputFileDescription.nCodePage); + // Outputfile-Header - if (i == OUT_HTML) { - WriteHTMLBegin(hFile); - } - else if (i == OUT_TXT) { - WriteFileCP(hFile, nCodePage, lpszProgramName, (DWORD)(_tcslen(lpszProgramName) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - } - else if (i == OUT_UNL) { - WriteCommonBegin(hFile, lpszDestFileName, lpszCommentCommon); - } - else if (i == OUT_BAT) { - WriteCommonBegin(hFile, lpszDestFileName, lpszCommentBAT); - } - else if ((i == OUT_ISS_DEINSTALL) || (i == OUT_ISS_INSTALL)) { - WriteBOM(hFile); - WriteCommonBegin(hFile, lpszDestFileName, lpszCommentCommon); - } - else if ((i == OUT_NSI_DEINSTALL) || (i == OUT_NSI_INSTALL)) { - WriteBOM(hFile); - WriteCommonBegin(hFile, lpszDestFileName, lpszCommentCommon); - } - else if ((i == OUT_REG_DEINSTALL) || (i == OUT_REG_INSTALL)) { - WriteBOM(hFile); - if (fREG5) - WriteFileCP(hFile, nCodePage, lpszREGVersion5, (DWORD)(_tcslen(lpszREGVersion5) * sizeof(TCHAR)), &NBW, NULL); - else - WriteFileCP(hFile, nCodePage, lpszREGVersion4, (DWORD)(_tcslen(lpszREGVersion4) * sizeof(TCHAR)), &NBW, NULL); - WriteCommonBegin(hFile, lpszDestFileName, lpszCommentCommon); - } - - //_asm int 3; - GetDlgItemText(hMainWnd, IDC_EDITCOMMENT, lpszBuffer, COMMENTLENGTH); // length incl. NULL character - WriteTitle(hFile, asLangTexts[iszTextComments].lpszText, lpszBuffer, i); - - _sntprintf(lpszBuffer, nBufferSize, TEXT("%04d-%02d-%02d %02d:%02d:%02d, %04d-%02d-%02d %02d:%02d:%02d\0"), - CompareResult.lpShot1->systemtime.wYear, CompareResult.lpShot1->systemtime.wMonth, CompareResult.lpShot1->systemtime.wDay, - CompareResult.lpShot1->systemtime.wHour, CompareResult.lpShot1->systemtime.wMinute, CompareResult.lpShot1->systemtime.wSecond, - CompareResult.lpShot2->systemtime.wYear, CompareResult.lpShot2->systemtime.wMonth, CompareResult.lpShot2->systemtime.wDay, - CompareResult.lpShot2->systemtime.wHour, CompareResult.lpShot2->systemtime.wMinute, CompareResult.lpShot2->systemtime.wSecond); - lpszBuffer[nBufferSize - 1] = (TCHAR)'\0'; - WriteTitle(hFile, asLangTexts[iszTextDateTime].lpszText, lpszBuffer, i); - - lpszBuffer[0] = (TCHAR)'\0'; - if (NULL != CompareResult.lpShot1->lpszComputerName) { - _tcscpy(lpszBuffer, CompareResult.lpShot1->lpszComputerName); - } - _tcscat(lpszBuffer, TEXT(", ")); - if (NULL != CompareResult.lpShot2->lpszComputerName) { - _tcscat(lpszBuffer, CompareResult.lpShot2->lpszComputerName); - } - WriteTitle(hFile, asLangTexts[iszTextComputer].lpszText, lpszBuffer, i); - - lpszBuffer[0] = (TCHAR)'\0'; - if (NULL != CompareResult.lpShot1->lpszUserName) { - _tcscpy(lpszBuffer, CompareResult.lpShot1->lpszUserName); - } - _tcscat(lpszBuffer, TEXT(", ")); - if (NULL != CompareResult.lpShot2->lpszUserName) { - _tcscat(lpszBuffer, CompareResult.lpShot2->lpszUserName); - } - WriteTitle(hFile, asLangTexts[iszTextUsername].lpszText, lpszBuffer, i); - - if (i == OUT_UNL) { - WriteUNLINIKeys(hFile); - } - else if ((i == OUT_ISS_DEINSTALL) || (i == OUT_ISS_INSTALL)) { - WriteISSSetupKeys(hFile, (i == OUT_ISS_DEINSTALL ? FALSE : TRUE)); - } - else if ((i == OUT_NSI_DEINSTALL) || (i == OUT_NSI_INSTALL)) { - WriteNSISetupKeys(hFile, (i == OUT_NSI_DEINSTALL ? FALSE : TRUE)); - } - - MYFREE(lpszBuffer); - - if (fLogUNLOrder) { + if (i == OUT_HTML) + WriteHTMLHeader(hFile, OutputFileDescription.nCodePage); + else + WritePartTemplate(hFile, TEXT("COMMON"), TEXT("$$HEADER$$"), &OutputFileDescription); + + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$HEADER$$"), &OutputFileDescription); + if (OutputFileDescription.fLogUNLOrder) { int fsChanges = CompareResult.stcChanged.cDirs + CompareResult.stcChanged.cFiles; - if (bCompareFS == TRUE) { - if (fOnlyNewEntries) + if (OutputFileDescription.fFilesystem == TRUE) { + if (OutputFileDescription.fOnlyNewEntries) fsChanges = CompareResult.stcAdded.cDirs + CompareResult.stcAdded.cFiles; if ((i != OUT_REG_INSTALL) && (i != OUT_REG_DEINSTALL)) { if (fsChanges > 0) { - WriteTableHead(hFile, asLangTexts[iszTextFilesystemModi].lpszText, fsChanges, i); - WritePartNew(hFile, ALLCHANGES, CompareResult.stCRHeads.lpCRFilesystemLast, i); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTFSSECTION$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextFilesystemModi].lpszText, fsChanges, &OutputFileDescription); + WritePartNew(hFile, ALLCHANGES, CompareResult.stCRHeads.lpCRFilesystemLast, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDFSSECTION$$"), &OutputFileDescription); } } } - if (bCompareReg == TRUE) { + if (OutputFileDescription.fRegistry == TRUE) { fsChanges = CompareResult.stcChanged.cKeys + CompareResult.stcChanged.cValues; - if (fOnlyNewEntries) + if (OutputFileDescription.fOnlyNewEntries) fsChanges = CompareResult.stcAdded.cKeys + CompareResult.stcAdded.cValues; if (fsChanges > 0) { - WriteTableHead(hFile, asLangTexts[iszTextRegistryModi].lpszText, fsChanges, i); - WritePartNew(hFile, ALLCHANGES, CompareResult.stCRHeads.lpCRRegistryLast, i); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTREGSECTION$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextRegistryModi].lpszText, fsChanges, &OutputFileDescription); + WritePartNew(hFile, ALLCHANGES, CompareResult.stCRHeads.lpCRRegistryLast, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDFSSECTION$$"), &OutputFileDescription); } } } else { - if (bCompareReg == TRUE) { - if (((i == OUT_ISS_INSTALL) || (i == OUT_ISS_DEINSTALL)) && - (CompareResult.stcChanged.cKeys + CompareResult.stcChanged.cValues > 0)) { - WriteFileCP(hFile, nCodePage, lpszISSSectionRegistry, (DWORD)(_tcslen(lpszISSSectionRegistry) * sizeof(TCHAR)), &NBW, NULL); - } - else if ((i == OUT_NSI_INSTALL) || (i == OUT_NSI_DEINSTALL)) { - WriteFileCP(hFile, nCodePage, lpszNSISectionRegistry, (DWORD)(_tcslen(lpszNSISectionRegistry) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszNSILogSetOn, (DWORD)(_tcslen(lpszNSILogSetOn) * sizeof(TCHAR)), &NBW, NULL); - } - else if (i == OUT_HTML) { - WriteHTMLSectionStart(hFile, TEXT("hive")); - } + if (OutputFileDescription.fRegistry == TRUE) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTREGSECTION$$"), &OutputFileDescription); // Installer (-install.reg, -install.iss): KeyAdd/ValAdd/ValModi/ValDel/KeyDel - if ((i == OUT_ISS_INSTALL) || (i == OUT_NSI_INSTALL) || (i == OUT_REG_INSTALL)) { + if (!OutputFileDescription.bDeInstaller) { // Write keyadd part if (0 != CompareResult.stcAdded.cKeys) { - WriteTableHead(hFile, asLangTexts[iszTextKeyAdd].lpszText, CompareResult.stcAdded.cKeys, i); - WritePart(hFile, KEYADD, CompareResult.stCRHeads.lpCRKeyAdded, i); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTKEYADDPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextKeyAdd].lpszText, CompareResult.stcAdded.cKeys, &OutputFileDescription); + WritePart(hFile, KEYADD, CompareResult.stCRHeads.lpCRKeyAdded, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDKEYADDPART$$"), &OutputFileDescription); } // Write valadd part if (0 != CompareResult.stcAdded.cValues) { - WriteTableHead(hFile, asLangTexts[iszTextValAdd].lpszText, CompareResult.stcAdded.cValues, i); - WritePart(hFile, VALADD, CompareResult.stCRHeads.lpCRValAdded, i); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTVALADDPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextValAdd].lpszText, CompareResult.stcAdded.cValues, &OutputFileDescription); + WritePart(hFile, VALADD, CompareResult.stCRHeads.lpCRValAdded, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDVALADDPART$$"), &OutputFileDescription); } } // Uninstaller (.html, .unl, .txt, .cmd, -uninstall.reg, -uninstall.iss, -uninstall.nsi): ValAdd/KeyAdd/ValModi/KeyDel/ValDel else { // Write valadd part if (0 != CompareResult.stcAdded.cValues) { - WriteTableHead(hFile, asLangTexts[iszTextValAdd].lpszText, CompareResult.stcAdded.cValues, i); - WritePart(hFile, VALADD, CompareResult.stCRHeads.lpCRValAdded, i); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTVALDELPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextValAdd].lpszText, CompareResult.stcAdded.cValues, &OutputFileDescription); + WritePart(hFile, VALADD, CompareResult.stCRHeads.lpCRValAdded, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDVALDELPART$$"), &OutputFileDescription); } // Write keyadd part if (0 != CompareResult.stcAdded.cKeys) { - WriteTableHead(hFile, asLangTexts[iszTextKeyAdd].lpszText, CompareResult.stcAdded.cKeys, i); - WritePartNew(hFile, KEYADD, CompareResult.stCRHeads.lpCRRegistryLast, i); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTKEYDELPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextKeyAdd].lpszText, CompareResult.stcAdded.cKeys, &OutputFileDescription); + WritePartNew(hFile, KEYADD, CompareResult.stCRHeads.lpCRRegistryLast, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDKEYDELPART$$"), &OutputFileDescription); } } // Write valmodi part - if (!fOnlyNewEntries && (0 != CompareResult.stcModified.cValues)) { - WriteTableHead(hFile, asLangTexts[iszTextValModi].lpszText, CompareResult.stcModified.cValues, i); - WritePart(hFile, VALMODI, CompareResult.stCRHeads.lpCRValModified, i); + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcModified.cValues)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTVALMODIPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextValModi].lpszText, CompareResult.stcModified.cValues, &OutputFileDescription); + WritePart(hFile, VALMODI, CompareResult.stCRHeads.lpCRValModified, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDVALMODIPART$$"), &OutputFileDescription); } // Installer (-install.reg, -install.iss, -install.nsi): KeyAdd/ValAdd/ValModi/ValDel/KeyDel - if ((i == OUT_ISS_INSTALL) || (i == OUT_NSI_INSTALL) || (i == OUT_REG_INSTALL)) { - // Write valdel part - if (!fOnlyNewEntries && (0 != CompareResult.stcDeleted.cValues)) { - WriteTableHead(hFile, asLangTexts[iszTextValDel].lpszText, CompareResult.stcDeleted.cValues, i); - WritePart(hFile, VALDEL, CompareResult.stCRHeads.lpCRValDeleted, i); - } - // Write keydel part - if (!fOnlyNewEntries && (0 != CompareResult.stcDeleted.cKeys)) { - WriteTableHead(hFile, asLangTexts[iszTextKeyDel].lpszText, CompareResult.stcDeleted.cKeys, i); - WritePart(hFile, KEYDEL, CompareResult.stCRHeads.lpCRKeyDeleted, i); - } - } -// Uninstaller (.html, .unl, .txt, .cmd, -uninstall.reg, -uninstall.iss, -uninstall.nsi): ValAdd/KeyAdd/ValModi/KeyDel/ValDel - else { - // Write keydel part - if (!fOnlyNewEntries && (0 != CompareResult.stcDeleted.cKeys)) { - WriteTableHead(hFile, asLangTexts[iszTextKeyDel].lpszText, CompareResult.stcDeleted.cKeys, i); - WritePart(hFile, KEYDEL, CompareResult.stCRHeads.lpCRKeyDeleted, i); + if (!fNoDeletedEntries) { + if (!OutputFileDescription.bDeInstaller) { + // Write valdel part + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcDeleted.cValues)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTVALDELPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextValDel].lpszText, CompareResult.stcDeleted.cValues, &OutputFileDescription); + WritePart(hFile, VALDEL, CompareResult.stCRHeads.lpCRValDeleted, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDVALDELPART$$"), &OutputFileDescription); + } + // Write keydel part + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcDeleted.cKeys)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTKEYDELPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextKeyDel].lpszText, CompareResult.stcDeleted.cKeys, &OutputFileDescription); + WritePart(hFile, KEYDEL, CompareResult.stCRHeads.lpCRKeyDeleted, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDKEYDELPART$$"), &OutputFileDescription); + } } - // Write valdel part - if (!fOnlyNewEntries && (0 != CompareResult.stcDeleted.cValues)) { - WriteTableHead(hFile, asLangTexts[iszTextValDel].lpszText, CompareResult.stcDeleted.cValues, i); - WritePart(hFile, VALDEL, CompareResult.stCRHeads.lpCRValDeleted, i); + // Uninstaller (.html, .unl, .txt, .cmd, -uninstall.reg, -uninstall.iss, -uninstall.nsi): ValAdd/KeyAdd/ValModi/KeyDel/ValDel + else { + // Write keydel part + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcDeleted.cKeys)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTKEYADDPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextKeyDel].lpszText, CompareResult.stcDeleted.cKeys, &OutputFileDescription); + WritePart(hFile, KEYDEL, CompareResult.stCRHeads.lpCRKeyDeleted, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDKEYADDPART$$"), &OutputFileDescription); + } + // Write valdel part + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcDeleted.cValues)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTVALADDPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextValDel].lpszText, CompareResult.stcDeleted.cValues, &OutputFileDescription); + WritePart(hFile, VALDEL, CompareResult.stCRHeads.lpCRValDeleted, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDVALADDPART$$"), &OutputFileDescription); + } } } - - if ((i == OUT_NSI_DEINSTALL) || (i == OUT_NSI_INSTALL)) { - WriteNSISectionEnd(hFile); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - } + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDREGSECTION$$"), &OutputFileDescription); } - if ((i != OUT_REG_INSTALL) && (i != OUT_REG_DEINSTALL) && bCompareFS) { - if ((i == OUT_ISS_INSTALL) || (i == OUT_ISS_DEINSTALL)) { - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - } - else if ((i == OUT_NSI_INSTALL) || (i == OUT_NSI_DEINSTALL)) { - WriteFileCP(hFile, nCodePage, lpszNSISectionFilesystem, (DWORD)(_tcslen(lpszNSISectionFilesystem) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - WriteFileCP(hFile, nCodePage, lpszNSILogSetOn, (DWORD)(_tcslen(lpszNSILogSetOn) * sizeof(TCHAR)), &NBW, NULL); - } + if (OutputFileDescription.fFilesystem) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTFSSECTION$$"), &OutputFileDescription); // Installer (-install.reg, -install.iss): DirAdd/FileAdd/FileModi/DirModi/FileDel/DirDel - if ((i == OUT_ISS_INSTALL) || (i == OUT_NSI_INSTALL)) { + if (!OutputFileDescription.bDeInstaller) { // Write directory add part if (0 != CompareResult.stcAdded.cDirs) { - if (i == OUT_ISS_INSTALL) - WriteFileCP(hFile, nCodePage, lpszISSSectionDirs, (DWORD)(_tcslen(lpszISSSectionDirs) * sizeof(TCHAR)), &NBW, NULL); - WriteTableHead(hFile, asLangTexts[iszTextDirAdd].lpszText, CompareResult.stcAdded.cDirs, i); - WritePart(hFile, DIRADD, CompareResult.stCRHeads.lpCRDirAdded, i); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTDIRADDPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextDirAdd].lpszText, CompareResult.stcAdded.cDirs, &OutputFileDescription); + WritePart(hFile, DIRADD, CompareResult.stCRHeads.lpCRDirAdded, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDDIRADDPART$$"), &OutputFileDescription); } // Write file add part if (0 != CompareResult.stcAdded.cFiles) { - if (i == OUT_ISS_INSTALL) - WriteFileCP(hFile, nCodePage, lpszISSSectionFiles, (DWORD)(_tcslen(lpszISSSectionFiles) * sizeof(TCHAR)), &NBW, NULL); - WriteTableHead(hFile, asLangTexts[iszTextFileAdd].lpszText, CompareResult.stcAdded.cFiles, i); - WritePart(hFile, FILEADD, CompareResult.stCRHeads.lpCRFileAdded, i); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTFILEADDPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextFileAdd].lpszText, CompareResult.stcAdded.cFiles, &OutputFileDescription); + WritePart(hFile, FILEADD, CompareResult.stCRHeads.lpCRFileAdded, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDFILEADDPART$$"), &OutputFileDescription); } } // Uninstaller (.html, .unl, .txt, .cmd, -uninstall.reg, -uninstall.iss): FileAdd/DirAdd/FileModi/DirModi/DirDel/FileDel else { // Write file add part if (0 != CompareResult.stcAdded.cFiles) { - if (i == OUT_ISS_DEINSTALL) - WriteFileCP(hFile, nCodePage, lpszISSSectionInstallDelete, (DWORD)(_tcslen(lpszISSSectionInstallDelete) * sizeof(TCHAR)), &NBW, NULL); - WriteTableHead(hFile, asLangTexts[iszTextFileAdd].lpszText, CompareResult.stcAdded.cFiles, i); - WritePart(hFile, FILEADD, CompareResult.stCRHeads.lpCRFileAdded, i); - if ((i == OUT_ISS_DEINSTALL) || (i == OUT_NSI_DEINSTALL)) { - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - } + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTFILEDELPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextFileAdd].lpszText, CompareResult.stcAdded.cFiles, &OutputFileDescription); + WritePart(hFile, FILEADD, CompareResult.stCRHeads.lpCRFileAdded, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDFILEDELPART$$"), &OutputFileDescription); } // Write directory add part if (0 != CompareResult.stcAdded.cDirs) { - if (i == OUT_ISS_DEINSTALL) - WriteFileCP(hFile, nCodePage, lpszISSSectionInstallDelete, (DWORD)(_tcslen(lpszISSSectionInstallDelete) * sizeof(TCHAR)), &NBW, NULL); - WriteTableHead(hFile, asLangTexts[iszTextDirAdd].lpszText, CompareResult.stcAdded.cDirs, i); - WritePartNew(hFile, DIRADD, CompareResult.stCRHeads.lpCRFilesystemLast, i); - if ((i == OUT_ISS_DEINSTALL) || (i == OUT_NSI_DEINSTALL)) { - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - } + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTDIRDELPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextDirAdd].lpszText, CompareResult.stcAdded.cDirs, &OutputFileDescription); + WritePartNew(hFile, DIRADD, CompareResult.stCRHeads.lpCRFilesystemLast, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDDIRDELPART$$"), &OutputFileDescription); } } // Write file modi part - if ((i == OUT_TXT) || (i == OUT_HTML) || (i == OUT_UNL)) { - if (!fOnlyNewEntries && (0 != CompareResult.stcModified.cFiles)) { - WriteTableHead(hFile, asLangTexts[iszTextFileModi].lpszText, CompareResult.stcModified.cFiles, i); - WritePart(hFile, FILEMODI, CompareResult.stCRHeads.lpCRFileModified, i); + if (OutputFileDescription.bLogger) { + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcModified.cFiles)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTFILEMODIPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextFileModi].lpszText, CompareResult.stcModified.cFiles, &OutputFileDescription); + WritePart(hFile, FILEMODI, CompareResult.stCRHeads.lpCRFileModified, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDFILEMODIPART$$"), &OutputFileDescription); } } // Installer (-install.reg, -install.iss): DirAdd/FileAdd/FileModi/DirModi/FileDel/DirDel - if ((i == OUT_ISS_INSTALL) || (i == OUT_NSI_INSTALL)) { - // Write file del part - if (!fOnlyNewEntries && (0 != CompareResult.stcDeleted.cFiles)) { - if (i == OUT_ISS_INSTALL) - WriteFileCP(hFile, nCodePage, lpszISSSectionInstallDelete, (DWORD)(_tcslen(lpszISSSectionInstallDelete) * sizeof(TCHAR)), &NBW, NULL); - WriteTableHead(hFile, asLangTexts[iszTextFileDel].lpszText, CompareResult.stcDeleted.cFiles, i); - WritePart(hFile, FILEDEL, CompareResult.stCRHeads.lpCRFileDeleted, i); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - } - // Write directory del part - if (!fOnlyNewEntries && (0 != CompareResult.stcDeleted.cDirs)) { - if (i == OUT_ISS_INSTALL) - WriteFileCP(hFile, nCodePage, lpszISSSectionInstallDelete, (DWORD)(_tcslen(lpszISSSectionInstallDelete) * sizeof(TCHAR)), &NBW, NULL); - WriteTableHead(hFile, asLangTexts[iszTextDirDel].lpszText, CompareResult.stcDeleted.cDirs, i); - WritePart(hFile, DIRDEL, CompareResult.stCRHeads.lpCRDirDeleted, i); - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); - } - } -// Uninstaller (.html, .unl, .txt, .cmd, -uninstall.reg, -uninstall.iss, -uninstall.nsi): FileAdd/DirAdd/FileModi/DirModi/DirDel/FileDel - else { - // Write directory del part - if (!fOnlyNewEntries && (0 != CompareResult.stcDeleted.cDirs)) { - if (i == OUT_ISS_DEINSTALL) - WriteFileCP(hFile, nCodePage, lpszISSSectionDirs, (DWORD)(_tcslen(lpszISSSectionDirs) * sizeof(TCHAR)), &NBW, NULL); - WriteTableHead(hFile, asLangTexts[iszTextDirDel].lpszText, CompareResult.stcDeleted.cDirs, i); - WritePart(hFile, DIRDEL, CompareResult.stCRHeads.lpCRDirDeleted, i); - if ((i == OUT_ISS_DEINSTALL) || (i == OUT_NSI_DEINSTALL)) { - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); + if (!fNoDeletedEntries) { + if (!OutputFileDescription.bDeInstaller) { + // Write file del part + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcDeleted.cFiles)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTFILEDELPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextFileDel].lpszText, CompareResult.stcDeleted.cFiles, &OutputFileDescription); + WritePart(hFile, FILEDEL, CompareResult.stCRHeads.lpCRFileDeleted, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDFILEDELPART$$"), &OutputFileDescription); + } + // Write directory del part + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcDeleted.cDirs)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTDIRDELPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextDirDel].lpszText, CompareResult.stcDeleted.cDirs, &OutputFileDescription); + WritePart(hFile, DIRDEL, CompareResult.stCRHeads.lpCRDirDeleted, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDDIRDELPART$$"), &OutputFileDescription); } } - // Write file del part - if (!fOnlyNewEntries && (0 != CompareResult.stcDeleted.cFiles)) { - if (i == OUT_ISS_DEINSTALL) - WriteFileCP(hFile, nCodePage, lpszISSSectionFiles, (DWORD)(_tcslen(lpszISSSectionFiles) * sizeof(TCHAR)), &NBW, NULL); - WriteTableHead(hFile, asLangTexts[iszTextFileDel].lpszText, CompareResult.stcDeleted.cFiles, i); - WritePart(hFile, FILEDEL, CompareResult.stCRHeads.lpCRFileDeleted, i); - if ((i == OUT_ISS_DEINSTALL) || (i == OUT_NSI_DEINSTALL)) { - WriteFileCP(hFile, nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); + // Uninstaller (.html, .unl, .txt, .cmd, -uninstall.reg, -uninstall.iss, -uninstall.nsi): FileAdd/DirAdd/FileModi/DirModi/DirDel/FileDel + else { + // Write directory del part + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcDeleted.cDirs)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTDIRADDPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextDirDel].lpszText, CompareResult.stcDeleted.cDirs, &OutputFileDescription); + WritePart(hFile, DIRDEL, CompareResult.stCRHeads.lpCRDirDeleted, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDDIRADDPART$$"), &OutputFileDescription); + } + // Write file del part + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcDeleted.cFiles)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTFILEADDPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextFileDel].lpszText, CompareResult.stcDeleted.cFiles, &OutputFileDescription); + WritePart(hFile, FILEDEL, CompareResult.stCRHeads.lpCRFileDeleted, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDFILEADDPART$$"), &OutputFileDescription); } } } - // Write directory modi part - if ((i == OUT_TXT) || (i == OUT_HTML)) { - if (!fOnlyNewEntries && (0 != CompareResult.stcModified.cDirs)) { - WriteTableHead(hFile, asLangTexts[iszTextDirModi].lpszText, CompareResult.stcModified.cDirs, i); - WritePart(hFile, DIRMODI, CompareResult.stCRHeads.lpCRDirModified, i); + if (OutputFileDescription.bLogger) { + if (!OutputFileDescription.fOnlyNewEntries && (0 != CompareResult.stcModified.cDirs)) { + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$STARTDIRMODIPART$$"), &OutputFileDescription); + WriteTableHead(hFile, asLangTexts[iszTextDirModi].lpszText, CompareResult.stcModified.cDirs, &OutputFileDescription); + WritePart(hFile, DIRMODI, CompareResult.stCRHeads.lpCRDirModified, &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDDIRMODIPART$$"), &OutputFileDescription); } } - if ((i == OUT_NSI_DEINSTALL) || (i == OUT_NSI_INSTALL)) { - WriteNSISectionEnd(hFile); - } + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$ENDFSSECTION$$"), &OutputFileDescription); } } if (i == OUT_HTML) { - WriteHTML_BR(hFile); - } - WriteTableHead(hFile, asLangTexts[iszTextTotal].lpszText, (fOnlyNewEntries ? CompareResult.stcAdded.cAll : CompareResult.stcChanged.cAll), i); - if (i == OUT_HTML) { - WriteHTMLEnd(hFile); - } - if ((i == OUT_ISS_DEINSTALL) || (i == OUT_ISS_INSTALL)) { - WriteISSEnd(hFile); + WriteFileCP(hFile, OutputFileDescription.nCodePage, TEXT("
\r\n"), (DWORD)(_tcslen(TEXT("
\r\n")) * sizeof(TCHAR)), &NBW, NULL); } - // Close file + WriteTableHead(hFile, asLangTexts[iszTextTotal].lpszText, (OutputFileDescription.fOnlyNewEntries ? CompareResult.stcAdded.cAll : CompareResult.stcChanged.cAll), &OutputFileDescription); + WritePartTemplate(hFile, OutputFileDescription.lpszFormat, TEXT("$$FOOTER$$"), &OutputFileDescription); CloseHandle(hFile); fOpenEditor = (BOOL)SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_OPENEDITOR), BM_GETCHECK, (WPARAM)0, (LPARAM)0); @@ -2157,10 +2148,10 @@ BOOL OutputComparisonResult(VOID) } MYFREE(lpszDestFileName); - fUseLongRegHead = fUseLongRegHeadBackup; - fOutSeparateObjs = fOutSeparateObjsBackup; - fLogEnvironmentStrings = fLogEnvironmentStringsBackup; - fLogUNLOrder = fLogUNLOrderBackup; + MYFREE(OutputFileDescription.lpszFormat); + MYFREE(OutputFileDescription.lpszExtension); + if (OutputFileDescription.lpszOutFile != NULL) + MYFREE(OutputFileDescription.lpszOutFile); } UI_ShowHideProgressBar(SW_HIDE); @@ -3496,7 +3487,7 @@ BOOL LoadShot(LPREGSHOT lpShot) // Setup GUI for loading... cEnd = cbFileSize; UI_InitProgressBar(); - UI_UpdateCounters(TEXT(""), TEXT(""), 0, 0, TEXT(""), TEXT("Loading file...")); + UI_UpdateCounters(lpszEmpty, lpszEmpty, 0, 0, lpszEmpty, TEXT("Loading file...")); // Read file blockwise for progress bar SetFilePointer(hRegshotFile, 0, NULL, FILE_BEGIN); @@ -3828,7 +3819,7 @@ BOOL LoadShot(LPREGSHOT lpShot) } else { SendMessage(GetDlgItem(hMainWnd, IDC_CHECKDIR), BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0); SendMessage(hMainWnd, WM_COMMAND, (WPARAM)IDC_CHECKDIR, (LPARAM)0); -// SetDlgItemText(hWnd, IDC_EDITDIR, TEXT("")); +// SetDlgItemText(hWnd, IDC_EDITDIR, lpszEmpty); } SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_HKLM), BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0); SendMessage(hMainWnd, WM_COMMAND, (WPARAM)IDC_CHECK_HKLM, (LPARAM)0); @@ -4072,7 +4063,7 @@ BOOL CheckSavingShots(HWND hDlg, LPREGSHOT lpShot) if (!lpShot->fFilled || lpShot->fLoaded) return TRUE; - if (_tcscmp(lpShot->lpszFileName, _TEXT("")) != 0) + if (_tcscmp(lpShot->lpszFileName, lpszEmpty) != 0) return TRUE; lpszComputerName = lpShot->lpszComputerName; diff --git a/src/regshot.rc b/src/regshot.rc index bdf91ae..0aaf755 100644 --- a/src/regshot.rc +++ b/src/regshot.rc @@ -228,9 +228,9 @@ BEGIN EDITTEXT IDC_EDITCOMMENT,11,174,281,14,ES_AUTOHSCROLL PUSHBUTTON "&1st shot",IDC_1STSHOT,357,27,53,13 PUSHBUTTON "&2nd shot",IDC_2NDSHOT,357,44,53,13,WS_DISABLED - PUSHBUTTON "C&ompare",IDC_COMPARE,357,115,53,13,WS_DISABLED - PUSHBUTTON "&Clear all",IDC_CLEARALL,357,132,53,13,WS_DISABLED - PUSHBUTTON "Reset",IDC_RESET,357,149,25,13 + PUSHBUTTON "C&ompare",IDC_COMPARE,357,126,53,13,WS_DISABLED + PUSHBUTTON "&Clear all",IDC_CLEARALL,357,143,53,13,WS_DISABLED + PUSHBUTTON "Reset",IDC_RESET,357,160,25,13 CONTROL "&HTML document",IDC_CHECK_HTML,"Button",BS_AUTOCHECKBOX,121,104,63,10 GROUPBOX "Title/Subdirectory",IDC_STATIC_TITLE,7,3,156,32 PUSHBUTTON "Scans",IDC_PROP_SCANS,270,66,23,13 @@ -245,32 +245,33 @@ BEGIN CONTROL "Progress1",IDC_PROGBAR,"msctls_progress32",NOT WS_VISIBLE | WS_BORDER,7,210,383,9 GROUPBOX "Registry-Rootkeys",IDC_STATIC_REGS,7,39,117,53 CONTROL "",IDC_TEXTCOUNT4,"Static",SS_LEFTNOWORDWRAP | NOT WS_VISIBLE | WS_GROUP,8,197,366,8 - CONTROL "(*) Delete shot files",IDC_CHECK_DELSHOTS,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,164,107,10,WS_EX_RIGHT + CONTROL "(*) Delete shot files",IDC_CHECK_DELSHOTS,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,175,107,10,WS_EX_RIGHT CONTROL "Default actions",IDC_CHECK_DEFAULTS,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,5,107,10,WS_EX_RIGHT CONTROL "Automatic compare",IDC_CHECK_AUTOCOMPARE,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,16,107,10,WS_EX_RIGHT CONTROL "Log only added parts",IDC_CHECK_ONLYADDED,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,59,107,10,WS_EX_RIGHT - PUSHBUTTON "Save",IDC_SAVE_INI,330,149,25,13,BS_CENTER - PUSHBUTTON "Load",IDC_LOAD_INI,302,149,25,13,BS_CENTER + PUSHBUTTON "Save",IDC_SAVE_INI,330,160,25,13,BS_CENTER + PUSHBUTTON "Load",IDC_LOAD_INI,302,160,25,13,BS_CENTER ICON "",IDC_STATIC_BMP,391,197,20,20,SS_CENTERIMAGE CONTROL "Don't log registry value data in these log formats",IDC_CHECK_NOVALS, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,115,168,10 RTEXT "(*) Not saved to ini",IDC_TEXT_REMARK,293,210,94,8,0,WS_EX_RIGHT - PUSHBUTTON "Dirs",IDC_PROP_DIRS,330,115,25,13,BS_CENTER - PUSHBUTTON "Regs",IDC_PROP_REGS,302,115,25,13,BS_CENTER + PUSHBUTTON "Dirs",IDC_PROP_DIRS,330,126,25,13,BS_CENTER + PUSHBUTTON "Regs",IDC_PROP_REGS,302,126,25,13,BS_CENTER COMBOBOX IDC_COMBO_MAINCP,219,107,73,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - CONTROL "Check result before output",IDC_CHECK_RESULT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,303,70,107,10,WS_EX_RIGHT + CONTROL "Check result before output",IDC_CHECK_RESULT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,303,104,107,10,WS_EX_RIGHT EDITTEXT IDC_EDIT_OUTPUTLINES,180,14,40,14,ES_AUTOHSCROLL | ES_NUMBER GROUPBOX "Maximum output lines per value",IDC_STATIC_OUTPUTLINES,172,3,125,32 CONTROL "No filters for next comparison",IDC_CHECK_NOFILTERS, - "Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,92,107,10,WS_EX_RIGHT + "Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,81,107,10,WS_EX_RIGHT PUSHBUTTON "Logs",IDC_PROP_LOGS,189,107,23,13,BS_CENTER - CONTROL "Reset adhoc filters before",IDC_CHECK_RESETADHOC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,303,103,107,10,WS_EX_RIGHT - PUSHBUTTON "Clear2",IDC_PROP_CLEAR2,330,132,25,13,BS_CENTER | WS_DISABLED - PUSHBUTTON "Clear1",IDC_PROP_CLEAR1,302,132,25,13,BS_CENTER | WS_DISABLED + CONTROL "Reset adhoc filters before",IDC_CHECK_RESETADHOC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,303,92,107,10,WS_EX_RIGHT + PUSHBUTTON "Clear2",IDC_PROP_CLEAR2,330,143,25,13,BS_CENTER | WS_DISABLED + PUSHBUTTON "Clear1",IDC_PROP_CLEAR1,302,143,25,13,BS_CENTER | WS_DISABLED CONTROL "Open result in standard editor",IDC_CHECK_OPENEDITOR, - "Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,175,107,10,WS_EX_RIGHT - PUSHBUTTON "&Quit",IDC_QUIT,385,149,25,13 - CONTROL "Suppress output files",IDC_CHECK_SUPPRESS_LOGS,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,81,107,10,WS_EX_RIGHT + "Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,186,107,10,WS_EX_RIGHT + PUSHBUTTON "&Quit",IDC_QUIT,385,160,25,13 + CONTROL "Suppress output files",IDC_CHECK_SUPPRESS_LOGS,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,115,107,10,WS_EX_RIGHT + CONTROL "Don't log deleted parts",IDC_CHECK_NOTDELETED,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,303,70,107,10,WS_EX_RIGHT END IDD_DIALOG_OPT_SKIPREG DIALOGEX 0, 0, 391, 228 @@ -388,7 +389,7 @@ BEGIN GROUPBOX "Filetype",IDC_STATIC_REGFORMAT,16,149,170,27 CONTROL "REGEDIT5 (UTF-16 LE)",IDC_REGEDIT5,"Button",BS_AUTORADIOBUTTON,23,160,84,10 CONTROL "REGEDIT4 (ANSI)",IDC_REGEDIT4,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,111,160,70,10 - GROUPBOX "ISS properties",IDC_STATIC_INF,204,7,180,99 + GROUPBOX "Innosetup properties",IDC_STATIC_INF,204,7,180,99 CONTROL "Make restoration *-UNINSTALL.ISS file",IDC_CHECK_ISSDEL, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,213,20,163,10 CONTROL "Make installation *-INSTALL.ISS file",IDC_CHECK_ISSINS, @@ -401,7 +402,7 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,213,73,163,10 EDITTEXT IDC_COMMON_EDIT_ISSEDITOR,213,84,146,14,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_COMMON_BROWSEISSEDITOR,362,84,18,13,BS_CENTER - GROUPBOX "NSI properties",IDC_STATIC_NSI,7,7,187,99 + GROUPBOX "NSIS properties",IDC_STATIC_NSI,7,7,187,99 CONTROL "Make restoration *-UNINSTALL.NSI file",IDC_CHECK_NSIDEL, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,20,163,10 CONTROL "Make installation *-INSTALL.NSI file",IDC_CHECK_NSIINS, @@ -414,6 +415,8 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,73,163,10 EDITTEXT IDC_COMMON_EDIT_NSIEDITOR,16,84,146,14,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_COMMON_BROWSENSIEDITOR,165,84,18,13,BS_CENTER + CONTROL "AutoIt3-UNINSTALL.AU3 file (with activity logging)",IDC_CHECK_AU3, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,198,183,10 END IDD_DIALOG_OPT_SCANREG DIALOGEX 0, 0, 391, 228 @@ -618,11 +621,11 @@ BEGIN VALUE "Comments", "https://github.com/skydive241/Regshot-Advanced" VALUE "CompanyName", "Patrick (skydive241@gmx.de)" VALUE "FileDescription", "Regshot 64-Bit Unicode" - VALUE "FileVersion", "2.0.7" + VALUE "FileVersion", "3.0.0" VALUE "InternalName", "Regshot Advanced" VALUE "LegalCopyright", "Copyright (C) 1999-2021, Patrick (skydive241@gmx.de), Regshot Team and all contributors" VALUE "ProductName", "Regshot Advanced" - VALUE "ProductVersion", "2.0.7" + VALUE "ProductVersion", "3.0.0" END END BLOCK "VarFileInfo" diff --git a/src/resource.h b/src/resource.h index 2cac4f9..90e7f00 100644 --- a/src/resource.h +++ b/src/resource.h @@ -108,6 +108,8 @@ #define IDC_STATIC_BMP 1078 #define IDC_CHECK_NOVALS 1079 #define IDC_CHECK_ENVIRONMENT 1080 +#define IDC_CHECK_ONLYADDED2 1080 +#define IDC_CHECK_NOTDELETED 1080 #define IDC_PROP_DIRS 1081 #define IDC_CHECK_OPT_STOREONQUIT 1081 #define IDC_PROP_REGS 1082 @@ -141,6 +143,8 @@ #define IDC_CHECK_TXT 1102 #define IDC_COMMON_EDIT_EDITOR 1103 #define IDC_EDIT_OUTPUTLINES 1103 +#define IDC_CHECK_TXT2 1103 +#define IDC_CHECK_AU3 1103 #define IDC_COMMON_BROWSEEDITOR 1104 #define IDC_STATIC_EDITOR 1105 #define IDC_REGEDIT5 1106 @@ -181,7 +185,6 @@ #define IDC_STATIC_TVMAXNODES 1135 #define IDC_EDIT_MAXLINES 1136 #define IDC_SPIN_MAXLINES 1137 -#define IDC_STATIC_TVMAXNODES2 1138 #define IDC_STATIC_TVMAXLINES 1138 #define ID_FILE 40007 #define ID_HELP_ABOUT 40010 diff --git a/src/resultcontrol.c b/src/resultcontrol.c index 057cda4..2a6e8ce 100644 --- a/src/resultcontrol.c +++ b/src/resultcontrol.c @@ -112,6 +112,9 @@ BOOL CALLBACK DlgSkipTVProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPara case IDC_CHECK_TXT: fOutputTXTfile = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_TXT), BM_GETCHECK, (WPARAM)0, (LPARAM)0); break; + //case IDC_CHECK_AU3: + // fOutputAU3file = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_AU3), BM_GETCHECK, (WPARAM)0, (LPARAM)0); + // break; case IDC_CHECK_ISSINS: fISSInstallFile = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_ISSINS), BM_GETCHECK, (WPARAM)0, (LPARAM)0); break; @@ -150,6 +153,7 @@ BOOL CALLBACK DlgSkipTVProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPara // SendMessage(GetDlgItem(hDlg, IDC_CHECK_BAT), BM_SETCHECK, (WPARAM)(SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_BAT), BM_GETCHECK, (WPARAM)0, (LPARAM)0)), (LPARAM)0); // CMD output SendMessage(GetDlgItem(hDlg, IDC_CHECK_BAT), BM_SETCHECK, fOutputBATfile, (LPARAM)0); SendMessage(GetDlgItem(hDlg, IDC_CHECK_TXT), BM_SETCHECK, fOutputTXTfile, (LPARAM)0); +// SendMessage(GetDlgItem(hDlg, IDC_CHECK_AU3), BM_SETCHECK, fOutputAU3file, (LPARAM)0); // SendMessage(GetDlgItem(hDlg, IDC_CHECK_UNL), BM_SETCHECK, (WPARAM)(SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_UNL), BM_GETCHECK, (WPARAM)0, (LPARAM)0)), (LPARAM)0); // UNL output SendMessage(GetDlgItem(hDlg, IDC_CHECK_UNL), BM_SETCHECK, fOutputUNLfile, (LPARAM)0); @@ -190,6 +194,7 @@ BOOL CALLBACK DlgSkipTVProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPara SendMessage(GetDlgItem(hDlg, IDC_CHECK_REGINS), BM_SETCHECK, fRegIns, (LPARAM)0); SendMessage(GetDlgItem(hDlg, IDC_CHECK_REGDEL), BM_SETCHECK, fRegDel, (LPARAM)0); SendMessage(GetDlgItem(hDlg, IDC_CHECK_TXT), BM_SETCHECK, fOutputTXTfile, (LPARAM)0); +// SendMessage(GetDlgItem(hDlg, IDC_CHECK_AU3), BM_SETCHECK, fOutputAU3file, (LPARAM)0); SendMessage(GetDlgItem(hDlg, IDC_CHECK_BAT), BM_SETCHECK, fOutputBATfile, (LPARAM)0); SendMessage(GetDlgItem(hDlg, IDC_CHECK_UNL), BM_SETCHECK, fOutputUNLfile, (LPARAM)0); //SendMessage(GetDlgItem(hDlg, IDC_CHECK_UNL), BM_SETCHECK, (WPARAM)(SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_UNL), BM_GETCHECK, (WPARAM)0, (LPARAM)0)), (LPARAM)0); // UNL output @@ -373,7 +378,8 @@ BOOL BuildSkipString(HWND hwndTV, HTREEITEM hItem, int iPropertyPage) } } - _tcscpy(pSkipList[iSkipCounter].lpSkipString, TEXT("")); + if (pSkipList[iSkipCounter].lpSkipString != NULL) + _tcscpy(pSkipList[iSkipCounter].lpSkipString, lpszEmpty); for (int i = iStringCounter; i >= 0; i--) { if (pSkipList != NULL) { if ((pSkipList[iSkipCounter].lpSkipString != NULL) && (lpszNodeTextTV != NULL) && (lpszNodeTextTV[i] != NULL)) { @@ -475,7 +481,7 @@ HTREEITEM FindOrCreateTreeItem(HWND hwndTV, HTREEITEM hParent, HTREEITEM hItem, { TVITEM pitem; TV_INSERTSTRUCT tvinsert; - LPTSTR lpszNodeTextTV = MYALLOC0((MAX_PATH + 1) * sizeof(TCHAR)); + LPTSTR lpszNodeTextTV = MYALLOC0((_TREEITEMTEXT_ + 1) * sizeof(TCHAR)); int iSelectedImage = 0; while (TRUE) { @@ -536,12 +542,6 @@ BOOL InitTreeViewItems(HWND hwndTV, int iPropertyPage) BOOL bKey = TRUE; LPCOMPRESULTNEW lpCRRelevantPart = (iPropertyPage == 0 ? CompareResult.stCRHeads.lpCRRegistryLast : CompareResult.stCRHeads.lpCRFilesystemLast); - //if (iPropertyPage == 0) { - // lpCRRelevantPart = CompareResult.stCRHeads.lpCRRegistryLast; - //} - //else { - // lpCRRelevantPart = CompareResult.stCRHeads.lpCRFilesystemLast; - //} InsertRootItems(hwndTV, iPropertyPage); @@ -551,6 +551,10 @@ BOOL InitTreeViewItems(HWND hwndTV, int iPropertyPage) (DIRADD != lpCR->nActionType) && (FILEADD != lpCR->nActionType) && (VALADD != lpCR->nActionType) && (KEYADD != lpCR->nActionType)) continue; + if (fNoDeletedEntries && + (DIRDEL == lpCR->nActionType) || (FILEDEL == lpCR->nActionType) || + (VALDEL == lpCR->nActionType) || (KEYDEL == lpCR->nActionType)) + continue; if ((NULL != lpCR->lpContentOld) && (NULL == lpCR->lpContentNew)) { if (!CheckFilters(lpCR->lpContentOld, lpszFullNameTV, &lpszValueName, lpCR->nActionType, &bKey)) @@ -743,7 +747,7 @@ BOOL CheckFilters(LPVOID lpContent, LPTSTR lpszKeyName, LPTSTR * lpszValueName, *pbKey = TRUE; else *pbKey = FALSE; - lpszFullName = GetWholeFileName(lpContent, 0, FALSE); + lpszFullName = GetWholeFileName(lpContent, 0, NULL); if ((lpszKeyName != NULL) && (lpszFullName != NULL)) _tcscpy(lpszKeyName, lpszFullName); if (IsInSkipList(lpszFullName, pFileSkipList, (bFileSkipAdded ? TRUE : FALSE))) { diff --git a/src/setup.c b/src/setup.c index 9b42f08..1309c5a 100644 --- a/src/setup.c +++ b/src/setup.c @@ -68,6 +68,7 @@ LPTSTR lpszIniOutput = TEXT("Output"); LPTSTR lpszIniFlag = TEXT("Flag"); LPTSTR lpszIniOpenEditor = TEXT("OpenEditor"); LPTSTR lpszIniOutputTXTFile = TEXT("TXTFile"); +LPTSTR lpszIniOutputAU3File = TEXT("AU3File"); LPTSTR lpszIniOutputUNLFile = TEXT("UNLFile"); LPTSTR lpszIniOutputBATFile = TEXT("BATFile"); LPTSTR lpszIniOutputHTMFile = TEXT("HTMFile"); @@ -91,6 +92,7 @@ LPTSTR lpszIniCheckResult = TEXT("CheckResult"); // Section [UNL] LPTSTR lpszIniUNL = TEXT("UNL"); LPTSTR lpszIniOnlyNewEntries = TEXT("OnlyNewEntries"); +LPTSTR lpszIniNoDeletedEntries = TEXT("NoDeletedEntries"); LPTSTR lpszIniNoVals = TEXT("NoVals"); // Section [ISS] @@ -147,6 +149,7 @@ SKIPLIST * pDirScanList; // Section [Output] BOOL fOpenEditor; BOOL fOutputTXTfile; +BOOL fOutputAU3file; BOOL fOutputUNLfile; BOOL fOutputBATfile; BOOL fOutputHTMfile; @@ -168,6 +171,7 @@ int nOutMaxResultLines; // Section [UNL] BOOL fOnlyNewEntries; +BOOL fNoDeletedEntries; BOOL fNoVals; // Section [ISS] @@ -323,6 +327,7 @@ BOOL LoadSettingsFromIni(HWND hDlg) // tfx get ini info fNSIInstallFile = GetPrivateProfileInt(lpszIniOutput, lpszIniOutputNSIInstallFile, 0, lpszRegshotIni) != 0 ? TRUE : FALSE; fNSIDeinstallFile = GetPrivateProfileInt(lpszIniOutput, lpszIniOutputNSIDeinstallFile, 0, lpszRegshotIni) != 0 ? TRUE : FALSE; fOutputTXTfile = GetPrivateProfileInt(lpszIniOutput, lpszIniOutputTXTFile, 0, lpszRegshotIni) != 0 ? TRUE : FALSE; + fOutputAU3file = GetPrivateProfileInt(lpszIniOutput, lpszIniOutputAU3File, 0, lpszRegshotIni) != 0 ? TRUE : FALSE; fOutputUNLfile = GetPrivateProfileInt(lpszIniOutput, lpszIniOutputUNLFile, 0, lpszRegshotIni) != 0 ? TRUE : FALSE; SendMessage(GetDlgItem(hDlg, IDC_CHECK_UNL), BM_SETCHECK, fOutputUNLfile, (LPARAM)0); fOutputBATfile = GetPrivateProfileInt(lpszIniOutput, lpszIniOutputBATFile, 0, lpszRegshotIni) != 0 ? TRUE : FALSE; @@ -341,6 +346,8 @@ BOOL LoadSettingsFromIni(HWND hDlg) // tfx get ini info // Section [UNL] fOnlyNewEntries = (BOOL)GetPrivateProfileInt(lpszIniUNL, lpszIniOnlyNewEntries, 0, lpszRegshotIni); SendMessage(GetDlgItem(hDlg, IDC_CHECK_ONLYADDED), BM_SETCHECK, fOnlyNewEntries, (LPARAM)0); + fNoDeletedEntries = (BOOL)GetPrivateProfileInt(lpszIniUNL, lpszIniNoDeletedEntries, 0, lpszRegshotIni); + SendMessage(GetDlgItem(hDlg, IDC_CHECK_NOTDELETED), BM_SETCHECK, fNoDeletedEntries, (LPARAM)0); fNoVals = (BOOL)GetPrivateProfileInt(lpszIniUNL, lpszIniNoVals, 0, lpszRegshotIni); SendMessage(GetDlgItem(hDlg, IDC_CHECK_NOVALS), BM_SETCHECK, fNoVals, (LPARAM)0); @@ -538,6 +545,10 @@ BOOL SaveSettingsToIni(HWND hDlg) lpszValue[EXTDIRLEN - 1] = (TCHAR)'\0'; WritePrivateProfileString(lpszIniOutput, lpszIniOutputTXTFile, lpszValue, lpszRegshotIni); + _sntprintf(lpszValue, EXTDIRLEN, TEXT("%d\0"), fOutputAU3file); + lpszValue[EXTDIRLEN - 1] = (TCHAR)'\0'; + WritePrivateProfileString(lpszIniOutput, lpszIniOutputAU3File, lpszValue, lpszRegshotIni); + fOutputUNLfile = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_UNL), BM_GETCHECK, (WPARAM)0, (LPARAM)0); _sntprintf(lpszValue, EXTDIRLEN, TEXT("%d\0"), fOutputUNLfile); lpszValue[EXTDIRLEN - 1] = (TCHAR)'\0'; @@ -599,6 +610,11 @@ BOOL SaveSettingsToIni(HWND hDlg) lpszValue[EXTDIRLEN - 1] = (TCHAR)'\0'; WritePrivateProfileString(lpszIniUNL, lpszIniOnlyNewEntries, lpszValue, lpszRegshotIni); + fNoDeletedEntries = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_NOTDELETED), BM_GETCHECK, (WPARAM)0, (LPARAM)0); + _sntprintf(lpszValue, EXTDIRLEN, TEXT("%d\0"), fNoDeletedEntries); + lpszValue[EXTDIRLEN - 1] = (TCHAR)'\0'; + WritePrivateProfileString(lpszIniUNL, lpszIniNoDeletedEntries, lpszValue, lpszRegshotIni); + fNoVals = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_NOVALS), BM_GETCHECK, (WPARAM)0, (LPARAM)0); _sntprintf(lpszValue, EXTDIRLEN, TEXT("%d\0"), fNoVals); lpszValue[EXTDIRLEN - 1] = (TCHAR)'\0'; @@ -943,11 +959,13 @@ BOOL ResetOutputOptions(VOID) fRegIns = FALSE; fREG5 = TRUE; fOutputTXTfile = FALSE; + fOutputAU3file = FALSE; fNoVals = TRUE; SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_NOVALS), BM_SETCHECK, (WPARAM)(fNoVals), (LPARAM)0); // Keine Werte protokollieren fOnlyNewEntries = TRUE; SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_ONLYADDED), BM_SETCHECK, (WPARAM)(fOnlyNewEntries), (LPARAM)0); // nur neue Objekte protokollieren + SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_NOTDELETED), BM_SETCHECK, (WPARAM)(fNoDeletedEntries), (LPARAM)0); // nur neue Objekte protokollieren SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_NOFILTERS), BM_SETCHECK, (WPARAM)FALSE, (LPARAM)0); fOpenEditor = TRUE; SendMessage(GetDlgItem(hMainWnd, IDC_CHECK_OPENEDITOR), BM_SETCHECK, (WPARAM)fOpenEditor, (LPARAM)0); diff --git a/src/template.c b/src/template.c new file mode 100644 index 0000000..99ee3ef --- /dev/null +++ b/src/template.c @@ -0,0 +1,774 @@ +/* + Copyright 2021- Patrick (skydive241@gmx.de) + + This file is part of Regshot. + + Regshot is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + Regshot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with Regshot. If not, see . +*/ + +#include "global.h" + +BOOL WritePartTemplate(HANDLE hFile, LPTSTR lpszTemplate, LPTSTR lpszTask, LPOUTPUTFILEDESCRIPTION pOutputFileDescription) +{ + // TODO: Template-Leserei + DWORD nSize = 32000; + LPTSTR lpReturnedString = MYALLOC0(nSize * sizeof(TCHAR)); + DWORD cchSection = 0; + + LPTSTR lpszBlockLine = NULL; + LPTSTR lpszOutputLine = NULL; + + if (lpszMacroFileName != NULL) { + GetModuleFileNameW(NULL, lpszMacroFileName, MAX_PATH); + PathRemoveFileSpec(lpszMacroFileName); + _tcscat(lpszMacroFileName, TEXT("\\Templates\\")); + _tcscat(lpszMacroFileName, lpszTemplate); + if (_tcscmp(lpszTemplate, TEXT("COMMON")) == 0) { + _tcscat(lpszMacroFileName, TEXT("-")); + _tcscat(lpszMacroFileName, lpszLanguage); + } + _tcscat(lpszMacroFileName, TEXT(".tpl")); + + cchSection = GetPrivateProfileSection( + lpszTask, + lpReturnedString, + nSize, + lpszMacroFileName + ); + } + else { + MYFREE(lpReturnedString); + + return FALSE; + } + + //FILE* filePointer; + //int bufferLength = 255; + //LPTSTR buffer = MYALLOC0(MAX_PATH * sizeof(TCHAR)); + + //filePointer = _tfopen(lpszMacroFileName, TEXT("r,ccs=UNICODE")); + //while (_fgetts(buffer, bufferLength, filePointer)) { + // buffer[_tcscspn(buffer, "\n")] = 0; + // printf("%s", buffer); + //} + //fclose(filePointer); + + + if (0 < cchSection) { + lpszBlockLine = lpReturnedString; + for (int i = 0; ; i++) { + if (0 == *lpszBlockLine) { + break; + } + lpszOutputLine = ReplaceHeaderMacros(lpszBlockLine, pOutputFileDescription); + if (lpszOutputLine != NULL) { + size_t len = _tcslen(lpszOutputLine); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszOutputLine, (DWORD)(_tcslen(lpszOutputLine) * sizeof(TCHAR)), &NBW, NULL); + WriteFileCP(hFile, pOutputFileDescription->nCodePage, lpszCRLF, (DWORD)(_tcslen(lpszCRLF) * sizeof(TCHAR)), &NBW, NULL); + if (lpszOutputLine != lpszBlockLine) + MYFREE(lpszOutputLine); + } + lpszBlockLine += _tcslen(lpszBlockLine) + 1; + } + } + else { + MYFREE(lpReturnedString); + + return FALSE; + } + + MYFREE(lpReturnedString); + + return TRUE; +} + +BOOL ReadOutputMacros(LPOUTPUTFILEDESCRIPTION pOutputFileDescription) +{ + DWORD cchDataline; + DWORD nSize = MAX_PATH; + + if (lpszMacroFileName != NULL) { + GetModuleFileNameW(NULL, lpszMacroFileName, MAX_PATH); + PathRemoveFileSpec(lpszMacroFileName); + _tcscat(lpszMacroFileName, TEXT("\\Templates\\")); + _tcscat(lpszMacroFileName, pOutputFileDescription->lpszFormat); + _tcscat(lpszMacroFileName, TEXT(".tpl")); + + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("RegDefaultVal"), NULL, lpszRegDefaultVal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("MultiSzStringDivider"), TEXT("\", \""), lpszMultiSzStringDivider , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("SuppressedKeyPart"), NULL, lpszSuppressedKeyPart , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("VALADDNormal"), NULL, lpszVALADDNormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("VALADDShort"), NULL, lpszVALADDShort , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("VALCHANGENormal"), NULL, lpszVALCHANGENormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("VALCHANGEShort"), NULL, lpszVALCHANGEShort , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("VALDELETENormal"), NULL, lpszVALDELETENormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("VALDELETEShort"), NULL, lpszVALDELETEShort , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("KEYADDNormal"), NULL, lpszKEYADDNormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("KEYDELETENormal"), NULL, lpszKEYDELETENormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("FILEADDNormal"), NULL, lpszFILEADDNormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("FILECHANGENormal"), NULL, lpszFILECHANGENormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("FILEDELETENormal"), NULL, lpszFILEDELETENormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("FILEDELETEDeleteReadOnly"), NULL, lpszFILEDELETEDeleteReadOnly, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("DIRADDNormal"), NULL, lpszDIRADDNormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT(";DIRCHANGENormal"), NULL, lpszDIRCHANGENormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("DIRDELETENormal"), NULL, lpszDIRDELETENormal , nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), TEXT("DIRDELETEDeleteRecurse"), NULL, lpszDIRDELETEDeleteRecurse , nSize, lpszMacroFileName); + + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("NameREG_SZ"), lpszEmpty, lpszNameREG_SZ, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("NameREG_EXPAND_SZ"), lpszEmpty, lpszNameREG_EXPAND_SZ, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("NameREG_MULTI_SZ"), lpszEmpty, lpszNameREG_MULTI_SZ, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("NameREG_DWORD_LITTLE_ENDIAN"), lpszEmpty, lpszNameREG_DWORD_LITTLE_ENDIAN, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("NameREG_DWORD_BIG_ENDIAN"), lpszEmpty, lpszNameREG_DWORD_BIG_ENDIAN, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("NameREG_QWORD_LITTLE_ENDIAN"), lpszEmpty, lpszNameREG_QWORD_LITTLE_ENDIAN, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("NameREG_NONE"), lpszEmpty, lpszNameREG_NONE, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("NameREG_BINARY"), lpszEmpty, lpszNameREG_BINARY, nSize, lpszMacroFileName); + + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("PrefixREG_SZ"), lpszEmpty, lpszPrefixREG_SZ, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("PrefixREG_EXPAND_SZ"), lpszEmpty, lpszPrefixREG_EXPAND_SZ, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("PrefixREG_MULTI_SZ"), lpszEmpty, lpszPrefixREG_MULTI_SZ, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("PrefixREG_DWORD_LITTLE_ENDIAN"), lpszEmpty, lpszPrefixREG_DWORD_LITTLE_ENDIAN, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("PrefixREG_DWORD_BIG_ENDIAN"), lpszEmpty, lpszPrefixREG_DWORD_BIG_ENDIAN, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("PrefixREG_QWORD_LITTLE_ENDIAN"), lpszEmpty, lpszPrefixREG_QWORD_LITTLE_ENDIAN, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("PrefixREG_NONE"), lpszEmpty, lpszPrefixREG_NONE, nSize, lpszMacroFileName); + cchDataline = GetPrivateProfileString(TEXT("$$REGPREFS$$"), TEXT("PrefixREG_BINARY"), lpszEmpty, lpszPrefixREG_BINARY, nSize, lpszMacroFileName); + + } + + return TRUE; +} + +// ---------------------------------------------------------------------- +// Several routines to write to an output file +// ---------------------------------------------------------------------- +LPTSTR ReplaceDataMacros(LPTSTR lpszDataLineMacro, LPTSTR lpszText, LPVOID lpContent, BOOL bSuppressKey, LPOUTPUTFILEDESCRIPTION pOutputFileDescription) +{ + size_t i = 0; + LPTSTR pos = NULL; + LPTSTR macroStart = TEXT("{{##"); + LPTSTR lpszBuffer = NULL; + DWORD nBufferSize = 2048; + + if (bSuppressKey && pOutputFileDescription->fGroupRegKeys && + lpszSuppressedKeyPart != NULL && + _tcslen(lpszSuppressedKeyPart) > 0 && + _tcsncmp(lpszDataLineMacro, lpszSuppressedKeyPart, _tcslen(lpszSuppressedKeyPart)) == 0) + lpszDataLineMacro += _tcslen(lpszSuppressedKeyPart); + + if (lpszDataLineMacro != NULL) + pos = _tcsstr(lpszDataLineMacro, macroStart); + while (pos) { + i++; + pos = _tcsstr(++pos, macroStart); + } + + if (i == 0) + return lpszDataLineMacro; + else + { + LPTSTR pROOTKEYNAME = TEXT("{{##ROOTKEYNAME}}"); + LPTSTR pWHOLEKEYNAME = TEXT("{{##WHOLEKEYNAME}}"); + LPTSTR pKEYNAME = TEXT("{{##KEYNAME}}"); + LPTSTR pVALNAME = TEXT("{{##VALNAME}}"); + LPTSTR pVALTYPE = TEXT("{{##VALTYPE}}"); + LPTSTR pDIRNAME = TEXT("{{##DIRNAME}}"); + LPTSTR pDIROFFILENAME = TEXT("{{##DIROFFILENAME}}"); + LPTSTR pFILENAME = TEXT("{{##FILENAME}}"); + LPTSTR pBLANK = TEXT("{{##BLANK}}"); + LPTSTR pLINEFEED = TEXT("{{##LINEFEED}}"); + LPTSTR pBS = TEXT("{{##BS}}"); + LPTSTR pDEL = TEXT("{{##DEL}}"); + + lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); + LPTSTR lpszOutputStringCorrected = MYALLOC0(nBufferSize * sizeof(TCHAR)); + if (lpszOutputStringCorrected == NULL) + return lpszDataLineMacro; + + LPTSTR lpszReplacement = NULL; + LPTSTR lpszEscapeReplacement = NULL; + size_t iDest = 0; + for (size_t iSource = 0; iSource <= _tcslen(lpszDataLineMacro); iSource++) { + if (lpszOutputStringCorrected + iDest != NULL) { + if (_tcsncmp(lpszDataLineMacro + iSource, macroStart, _tcslen(macroStart)) == 0) { + if (_tcsncmp(lpszDataLineMacro + iSource, pROOTKEYNAME, _tcslen(pROOTKEYNAME)) == 0) { + pos = _tcschr(lpszText, _T('\\')); + if (pos != NULL) + _tcscpy(pos++, TEXT("\0")); + lpszReplacement = lpszText; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pROOTKEYNAME) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pWHOLEKEYNAME, _tcslen(pWHOLEKEYNAME)) == 0) { + lpszReplacement = lpszText; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pWHOLEKEYNAME) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pKEYNAME, _tcslen(pKEYNAME)) == 0) { + lpszReplacement = (pos != NULL ? pos : lpszEmpty); + lpszEscapeReplacement = ReplaceSpecialCharacters(lpszReplacement, TRUE); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszEscapeReplacement, _tcslen(lpszEscapeReplacement)); + iSource = iSource + _tcslen(pKEYNAME) - 1; + iDest = iDest + _tcslen(lpszEscapeReplacement); + if (lpszEscapeReplacement != lpszReplacement) + MYFREE(lpszEscapeReplacement); + i--; + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pVALNAME, _tcslen(pVALNAME)) == 0) { + lpszReplacement = (((LPVALUECONTENT)lpContent)->lpszValueName != NULL ? ((LPVALUECONTENT)lpContent)->lpszValueName : lpszEmpty); + lpszReplacement = (((_tcscmp(lpszReplacement, lpszEmpty) == 0) && (lpszRegDefaultVal != NULL)) ? lpszRegDefaultVal : lpszReplacement); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pVALNAME) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pVALTYPE, _tcslen(pVALTYPE)) == 0) { + switch (((LPVALUECONTENT)lpContent)->nTypeCode) { + case REG_NONE: + _tcscpy(lpszBuffer, lpszNameREG_NONE); + break; + case REG_SZ: + _tcscpy(lpszBuffer, lpszNameREG_SZ); + break; + case REG_EXPAND_SZ: + _tcscpy(lpszBuffer, lpszNameREG_EXPAND_SZ); + break; + case REG_BINARY: + _tcscpy(lpszBuffer, lpszNameREG_BINARY); + break; + case REG_DWORD: +// case REG_DWORD_LITTLE_ENDIAN: + _tcscpy(lpszBuffer, lpszNameREG_DWORD_LITTLE_ENDIAN); + break; + case REG_DWORD_BIG_ENDIAN: + _tcscpy(lpszBuffer, lpszNameREG_DWORD_BIG_ENDIAN); + break; + case REG_MULTI_SZ: + _tcscpy(lpszBuffer, lpszNameREG_MULTI_SZ); + break; +// case REG_QWORD_LITTLE_ENDIAN: + case REG_QWORD: + _tcscpy(lpszBuffer, lpszNameREG_QWORD_LITTLE_ENDIAN); + break; + } + lpszReplacement = lpszBuffer; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pVALTYPE) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pDIRNAME, _tcslen(pDIRNAME)) == 0) { + lpszReplacement = GetWholeFileName(lpContent, 0, pOutputFileDescription); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pDIRNAME) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + MYFREE(lpszReplacement); + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pDIROFFILENAME, _tcslen(pDIROFFILENAME)) == 0) { + lpszReplacement = GetWholeFileName(lpContent, 0, pOutputFileDescription); + pos = _tcsrchr(lpszReplacement, _T('\\')); + if (pos != NULL) + _tcscpy(pos, TEXT("\0")); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pDIROFFILENAME) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + MYFREE(lpszReplacement); + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pFILENAME, _tcslen(pFILENAME)) == 0) { + lpszReplacement = GetWholeFileName(lpContent, 0, pOutputFileDescription); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pFILENAME) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + MYFREE(lpszReplacement); + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pBLANK, _tcslen(pBLANK)) == 0) { + lpszReplacement = TEXT(" "); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pBLANK) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pBS, _tcslen(pBS)) == 0) { + iDest = iDest--; + lpszReplacement = TEXT("\0"); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, 1); + iSource = iSource + _tcslen(pBS) - 1; + i--; + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pDEL, _tcslen(pDEL)) == 0) { + iSource = iSource + _tcslen(pDEL); + i--; + } + else if (_tcsncmp(lpszDataLineMacro + iSource, pLINEFEED, _tcslen(pLINEFEED)) == 0) { + lpszReplacement = TEXT("\r\n"); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pLINEFEED) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else { + _tcsncpy(lpszOutputStringCorrected + iDest, lpszDataLineMacro + iSource, 1); + iDest++; + } + } + else { + _tcsncpy(lpszOutputStringCorrected + iDest, lpszDataLineMacro + iSource, 1); + iDest++; + } + if (i == 0) { + _tcsncpy(lpszOutputStringCorrected + iDest, lpszDataLineMacro + ++iSource, _tcslen(lpszDataLineMacro) - iSource); + + break; + } + } + } + if ((lpszText != NULL) || (lpContent != NULL)) + lpszOutputStringCorrected = ReplaceDataMacros(lpszOutputStringCorrected, NULL, NULL, FALSE, pOutputFileDescription); + else + MYFREE(lpszDataLineMacro); + + MYFREE(lpszBuffer); + + return lpszOutputStringCorrected; + } +} + +// ---------------------------------------------------------------------- +// Several routines to write to an output file +// ---------------------------------------------------------------------- +LPTSTR BuildOutputString(LPTSTR lpszText, LPVOID lpContent, int nActionType, BOOL bSuppressKey, LPOUTPUTFILEDESCRIPTION pOutputFileDescription) +{ + DWORD cchDataline = 0; + DWORD nSize = MAX_PATH; + LPTSTR lpszSpecRule = NULL; + LPTSTR lpszSpecRuleLine = NULL; + + LPTSTR lpszOutputString = NULL; + if (pOutputFileDescription->bDeInstaller) { + if (nActionType == VALADD) + nActionType = VALDEL; + else if (nActionType == VALDEL) + nActionType = VALADD; + else if (nActionType == KEYADD) + nActionType = KEYDEL; + else if (nActionType == KEYDEL) + nActionType = KEYADD; + else if (nActionType == FILEADD) + nActionType = FILEDEL; + else if (nActionType == FILEDEL) + nActionType = FILEADD; + else if (nActionType == DIRADD) + nActionType = DIRDEL; + else if (nActionType == DIRDEL) + nActionType = DIRADD; + } + if ((nActionType == VALADD) || (VALMODI == nActionType)) { + lpszSpecRule = MYALLOC0(2048); + lpszSpecRuleLine = MYALLOC0(2048); + _tcscpy(lpszSpecRule, (nActionType == VALADD ? TEXT("VALADD") : TEXT("VALCHANGE"))); + _tcscat(lpszSpecRule, (pOutputFileDescription->fNoVals ? TEXT("Short") : TEXT("Normal"))); + switch (((LPVALUECONTENT)lpContent)->nTypeCode) { + case REG_NONE: + _tcscat(lpszSpecRule, TEXT("NONE")); + break; + case REG_SZ: + _tcscat(lpszSpecRule, TEXT("SZ")); + break; + case REG_EXPAND_SZ: + _tcscat(lpszSpecRule, TEXT("EXPANDSZ")); + break; + case REG_BINARY: + _tcscat(lpszSpecRule, TEXT("BINARY")); + break; + case REG_DWORD: + _tcscat(lpszSpecRule, TEXT("DWORD")); + break; + case REG_DWORD_BIG_ENDIAN: + _tcscat(lpszSpecRule, TEXT("DWORD")); + break; + case REG_MULTI_SZ: + _tcscat(lpszSpecRule, TEXT("MULTISZ")); + break; + case REG_QWORD: + _tcscat(lpszSpecRule, TEXT("QWORD")); + break; + } + if (lpszMacroFileName != NULL) { + GetModuleFileNameW(NULL, lpszMacroFileName, MAX_PATH); + PathRemoveFileSpec(lpszMacroFileName); + _tcscat(lpszMacroFileName, TEXT("\\Templates\\")); + _tcscat(lpszMacroFileName, pOutputFileDescription->lpszFormat); + _tcscat(lpszMacroFileName, TEXT(".tpl")); + + cchDataline = GetPrivateProfileString(TEXT("$$DATALINES$$"), lpszSpecRule, lpszEmpty, lpszSpecRuleLine, nSize, lpszMacroFileName); + } + } + if (nActionType == VALADD) { + if (cchDataline != 0) + lpszOutputString = ReplaceDataMacros(lpszSpecRuleLine, lpszText, lpContent, bSuppressKey, pOutputFileDescription); + else + lpszOutputString = (pOutputFileDescription->fNoVals ? ReplaceDataMacros(lpszVALADDShort, lpszText, lpContent, bSuppressKey, pOutputFileDescription) : ReplaceDataMacros(lpszVALADDNormal, lpszText, lpContent, bSuppressKey, pOutputFileDescription)); + + MYFREE(lpszSpecRule); + MYFREE(lpszSpecRuleLine); + } + else if (VALMODI == nActionType) { + if (cchDataline != 0) + lpszOutputString = ReplaceDataMacros(lpszSpecRuleLine, lpszText, lpContent, bSuppressKey, pOutputFileDescription); + else + lpszOutputString = (pOutputFileDescription->fNoVals ? ReplaceDataMacros(lpszVALCHANGEShort, lpszText, lpContent, bSuppressKey, pOutputFileDescription) : ReplaceDataMacros(lpszVALCHANGENormal, lpszText, lpContent, bSuppressKey, pOutputFileDescription)); + + MYFREE(lpszSpecRule); + MYFREE(lpszSpecRuleLine); + } + else if (VALDEL == nActionType) { + lpszOutputString = (pOutputFileDescription->fNoVals ? ReplaceDataMacros(lpszVALDELETEShort, lpszText, lpContent, bSuppressKey, pOutputFileDescription) : ReplaceDataMacros(lpszVALDELETENormal, lpszText, lpContent, bSuppressKey, pOutputFileDescription)); + } + else if (KEYADD == nActionType) { + lpszOutputString = ReplaceDataMacros(lpszKEYADDNormal, lpszText, lpContent, FALSE, pOutputFileDescription); + } + else if (KEYDEL == nActionType) { + lpszOutputString = ReplaceDataMacros(lpszKEYDELETENormal, lpszText, lpContent, FALSE, pOutputFileDescription); + } + else if (FILEADD == nActionType) { + lpszOutputString = ReplaceDataMacros(lpszFILEADDNormal, lpszText, lpContent, FALSE, pOutputFileDescription); + } + else if (FILEMODI == nActionType) { + lpszOutputString = ReplaceDataMacros(lpszFILECHANGENormal, lpszText, lpContent, FALSE, pOutputFileDescription); + } + else if (FILEDEL == nActionType) { + lpszOutputString = (fDeleteReadOnly ? ReplaceDataMacros(lpszFILEDELETEDeleteReadOnly, lpszText, lpContent, FALSE, pOutputFileDescription) : ReplaceDataMacros(lpszFILEDELETENormal, lpszText, lpContent, FALSE, pOutputFileDescription)); + } + else if (DIRADD == nActionType) { + lpszOutputString = ReplaceDataMacros(lpszDIRADDNormal, lpszText, lpContent, FALSE, pOutputFileDescription); + } + else if (DIRMODI == nActionType) { + lpszOutputString = ReplaceDataMacros(lpszDIRCHANGENormal, lpszText, lpContent, FALSE, pOutputFileDescription); + } + else if (DIRDEL == nActionType) { + lpszOutputString = (fDeleteDirNotEmpty ? ReplaceDataMacros(lpszDIRDELETEDeleteRecurse, lpszText, lpContent, FALSE, pOutputFileDescription) : ReplaceDataMacros(lpszDIRDELETENormal, lpszText, lpContent, FALSE, pOutputFileDescription)); + } + + // EscapeSpecialCharacters(lpszOutputString, _T('"'), TEXT("\"")); + + return lpszOutputString; +} + +LPTSTR ReplaceHeaderMacros(LPTSTR lpszText, LPOUTPUTFILEDESCRIPTION pOutputFileDescription) +{ + size_t i = 0; + LPTSTR pos = NULL; + LPTSTR macroStart = TEXT("{{##"); + LPTSTR lpszBuffer = NULL; + DWORD nBufferSize = _MACROLINESIZE_; + + if (lpszText != NULL) + pos = _tcsstr(lpszText, macroStart); + while (pos) { + i++; + pos = _tcsstr(++pos, macroStart); + } + + if (i == 0) + return lpszText; + else + { + LPTSTR pCOMMENT = TEXT("{{##COMMENT}}"); + LPTSTR pBLANK = TEXT("{{##BLANK}}"); + LPTSTR pLINEFEED = TEXT("{{##LINEFEED}}"); + LPTSTR pLEFTBRACKET = TEXT("{{##LEFTBRACKET}}"); + LPTSTR pTITLE = TEXT("{{##TITLE}}"); + LPTSTR pSCRIPTFILE = TEXT("{{##SCRIPTFILE}}"); + LPTSTR pSCRIPTNAME = TEXT("{{##SCRIPTNAME}}"); + LPTSTR pOUTDIR = TEXT("{{##OUTDIR}}"); + LPTSTR pOUTFILE = TEXT("{{##OUTFILE}}"); + LPTSTR pVERSION = TEXT("{{##VERSION}}"); + LPTSTR pDATE1 = TEXT("{{##DATE1}}"); + LPTSTR pDATE2 = TEXT("{{##DATE2}}"); + LPTSTR pCOMPUTER1 = TEXT("{{##COMPUTER1}}"); + LPTSTR pCOMPUTER2 = TEXT("{{##COMPUTER2}}"); + LPTSTR pUSER1 = TEXT("{{##USER1}}"); + LPTSTR pUSER2 = TEXT("{{##USER1}}"); + LPTSTR pCOMMENTTEXT = TEXT("{{##COMMENTTEXT}}"); + LPTSTR pPARTCOUNTTEXT = TEXT("{{##PARTCOUNTTEXT}}"); + LPTSTR pPARTCOUNT = TEXT("{{##PARTCOUNT}}"); + LPTSTR pDELETERECURSE = TEXT("{{##DELETERECURSE}}"); + LPTSTR pDELETEREADONLY = TEXT("{{##DELETEREADONLY}}"); + + lpszBuffer = MYALLOC0(nBufferSize * sizeof(TCHAR)); + LPTSTR lpszOutputStringCorrected = MYALLOC0(2048 * sizeof(TCHAR)); + if (lpszOutputStringCorrected == NULL) + return lpszText; + + TCHAR szCount[17]; + LPTSTR lpszReplacement = NULL; + + size_t iDest = 0; + for (size_t iSource = 0; iSource <= _tcslen(lpszText); iSource++) { + if (lpszOutputStringCorrected + iDest != NULL) { + if (_tcsncmp(lpszText + iSource, macroStart, _tcslen(macroStart)) == 0) { + if (_tcsncmp(lpszText + iSource, pCOMMENT, _tcslen(pCOMMENT)) == 0) { + _tcsncpy(lpszOutputStringCorrected + iDest, pOutputFileDescription->lpszComment, _tcslen(pOutputFileDescription->lpszComment)); + iSource = iSource + _tcslen(pCOMMENT) - 1; + iDest = iDest + _tcslen(pOutputFileDescription->lpszComment); + i--; + } + else if (_tcsncmp(lpszText + iSource, pLEFTBRACKET, _tcslen(pLEFTBRACKET)) == 0) { + lpszReplacement = TEXT("["); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pLEFTBRACKET) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pBLANK, _tcslen(pBLANK)) == 0) { + lpszReplacement = TEXT(" "); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pBLANK) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pLINEFEED, _tcslen(pLINEFEED)) == 0) { + lpszReplacement = lpszEmpty; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pLINEFEED) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pTITLE, _tcslen(pTITLE)) == 0) { + lpszReplacement = lpszTitle; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pTITLE) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pSCRIPTFILE, _tcslen(pSCRIPTFILE)) == 0) { + lpszReplacement = pOutputFileDescription->lpszScriptFile; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pSCRIPTFILE) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pOUTFILE, _tcslen(pOUTFILE)) == 0) { + lpszReplacement = pOutputFileDescription->lpszOutFile; + if ((lpszReplacement != NULL) && (_tcslen(lpszReplacement) > 0)) { + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pOUTFILE) - 1; + iDest = iDest + _tcslen(lpszReplacement); + } + else { + MYFREE(lpszOutputStringCorrected); + lpszOutputStringCorrected = NULL; + break; + } + i--; + } + else if (_tcsncmp(lpszText + iSource, pOUTDIR, _tcslen(pOUTDIR)) == 0) { + lpszReplacement = pOutputFileDescription->lpszOutDir; + if ((lpszReplacement != NULL) && (_tcslen(lpszReplacement) > 0)) { + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pOUTDIR) - 1; + iDest = iDest + _tcslen(lpszReplacement); + } + else { + MYFREE(lpszOutputStringCorrected); + lpszOutputStringCorrected = NULL; + break; + } + i--; + } + else if (_tcsncmp(lpszText + iSource, pSCRIPTNAME, _tcslen(pSCRIPTNAME)) == 0) { + _tcscpy(lpszBuffer, lpszTitle); + _tcscat(lpszBuffer, (pOutputFileDescription->bDeInstaller ? TEXT("-uninstaller") : TEXT("-installer"))); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszBuffer, _tcslen(lpszBuffer)); + iSource = iSource + _tcslen(pSCRIPTNAME) - 1; + iDest = iDest + _tcslen(lpszBuffer); + i--; + } + else if (_tcsncmp(lpszText + iSource, pVERSION, _tcslen(pVERSION)) == 0) { + lpszReplacement = lpszProgramName; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pVERSION) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pDATE1, _tcslen(pDATE1)) == 0) { + _sntprintf(lpszBuffer, nBufferSize, TEXT("%04d-%02d-%02d %02d:%02d:%02d\0"), + CompareResult.lpShot1->systemtime.wYear, CompareResult.lpShot1->systemtime.wMonth, CompareResult.lpShot1->systemtime.wDay, + CompareResult.lpShot1->systemtime.wHour, CompareResult.lpShot1->systemtime.wMinute, CompareResult.lpShot1->systemtime.wSecond); + lpszBuffer[nBufferSize - 1] = (TCHAR)'\0'; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszBuffer, _tcslen(lpszBuffer)); + iSource = iSource + _tcslen(pDATE1) - 1; + iDest = iDest + _tcslen(lpszBuffer); + i--; + } + else if (_tcsncmp(lpszText + iSource, pDATE2, _tcslen(pDATE2)) == 0) { + _sntprintf(lpszBuffer, nBufferSize, TEXT("%04d-%02d-%02d %02d:%02d:%02d\0"), + CompareResult.lpShot2->systemtime.wYear, CompareResult.lpShot2->systemtime.wMonth, CompareResult.lpShot2->systemtime.wDay, + CompareResult.lpShot2->systemtime.wHour, CompareResult.lpShot2->systemtime.wMinute, CompareResult.lpShot2->systemtime.wSecond); + lpszBuffer[nBufferSize - 1] = (TCHAR)'\0'; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszBuffer, _tcslen(lpszBuffer)); + iSource = iSource + _tcslen(pDATE2) - 1; + iDest = iDest + _tcslen(lpszBuffer); + i--; + } + else if (_tcsncmp(lpszText + iSource, pCOMPUTER1, _tcslen(pCOMPUTER1)) == 0) { + lpszReplacement = CompareResult.lpShot1->lpszComputerName; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pCOMPUTER1) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pCOMPUTER2, _tcslen(pCOMPUTER2)) == 0) { + lpszReplacement = CompareResult.lpShot2->lpszComputerName; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pCOMPUTER2) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pUSER1, _tcslen(pUSER1)) == 0) { + lpszReplacement = CompareResult.lpShot1->lpszUserName; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pUSER1) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pUSER2, _tcslen(pUSER2)) == 0) { + lpszReplacement = CompareResult.lpShot2->lpszUserName; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pUSER2) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pCOMMENTTEXT, _tcslen(pCOMMENTTEXT)) == 0) { + GetDlgItemText(hMainWnd, IDC_EDITCOMMENT, lpszBuffer, COMMENTLENGTH); // length incl. NULL character + _tcsncpy(lpszOutputStringCorrected + iDest, lpszBuffer, _tcslen(lpszBuffer)); + iSource = iSource + _tcslen(pCOMMENTTEXT) - 1; + iDest = iDest + _tcslen(lpszBuffer); + i--; + } + else if (_tcsncmp(lpszText + iSource, pPARTCOUNTTEXT, _tcslen(pPARTCOUNTTEXT)) == 0) { + lpszReplacement = pOutputFileDescription->lpszPartCountText; + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pPARTCOUNTTEXT) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pPARTCOUNT, _tcslen(pPARTCOUNT)) == 0) { + _sntprintf(szCount, 17, TEXT("%u\0"), pOutputFileDescription->nPartCount); + szCount[16] = (TCHAR)'\0'; + _tcsncpy(lpszOutputStringCorrected + iDest, szCount, _tcslen(szCount)); + iSource = iSource + _tcslen(pPARTCOUNT) - 1; + iDest = iDest + _tcslen(szCount); + i--; + } + else if (_tcsncmp(lpszText + iSource, pDELETERECURSE, _tcslen(pDELETERECURSE)) == 0) { + lpszReplacement = (fDeleteDirNotEmpty ? TEXT("1") : TEXT("0")); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pDELETERECURSE) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else if (_tcsncmp(lpszText + iSource, pDELETEREADONLY, _tcslen(pDELETEREADONLY)) == 0) { + lpszReplacement = (fDeleteReadOnly ? TEXT("1") : TEXT("0")); + _tcsncpy(lpszOutputStringCorrected + iDest, lpszReplacement, _tcslen(lpszReplacement)); + iSource = iSource + _tcslen(pDELETEREADONLY) - 1; + iDest = iDest + _tcslen(lpszReplacement); + i--; + } + else { + _tcsncpy(lpszOutputStringCorrected + iDest, lpszText + iSource, 1); + iDest++; + } + } + else { + _tcsncpy(lpszOutputStringCorrected + iDest, lpszText + iSource, 1); + iDest++; + } + if (i == 0) { + _tcsncpy(lpszOutputStringCorrected + iDest, lpszText + ++iSource, _tcslen(lpszText) - iSource); + + break; + } + } + } + MYFREE(lpszBuffer); + + return lpszOutputStringCorrected; + } +} + +// ---------------------------------------------------------------------- +VOID WriteTableHead(HANDLE hFile, LPTSTR lpszText, DWORD nCount, LPOUTPUTFILEDESCRIPTION pOutputFileDescription) +{ + pOutputFileDescription->lpszPartCountText = lpszText; + pOutputFileDescription->nPartCount = nCount; + if (!WritePartTemplate(hFile, pOutputFileDescription->lpszFormat, TEXT("$$TABLEHEAD$$"), pOutputFileDescription)) + WritePartTemplate(hFile, TEXT("COMMON"), TEXT("$$TABLEHEAD$$"), pOutputFileDescription); +} + +// ---------------------------------------------------------------------- +// Several routines to write to an output file +// ---------------------------------------------------------------------- +LPTSTR ReplaceSpecialCharacters(LPTSTR lpszText, BOOL bNames) +{ + LPTSTR pos = NULL; + int iNewStringCounter = 0; + + size_t i = 0; + LPTSTR a[3][2] = { + {TEXT("\""), TEXT("\\")}, + {TEXT("{"), TEXT("{")}, + {NULL, NULL} + }; + + for (int count = 0; count < 3; count++) { + if (a[count][0] == NULL) + break; + + if (lpszText != NULL) + pos = _tcsstr(lpszText, a[count][0]); + while (pos) { + i++; + pos = _tcsstr(++pos, a[count][0]); + } + + if (i > 0) { + LPTSTR lpszOutputStringCorrected = MYALLOC0((_tcslen(lpszText) + i * _tcslen(a[count][1]) + 1) * sizeof(TCHAR)); + iNewStringCounter++; + + i = 0; + for (int j = 0; j <= _tcslen(lpszText); j++) { + if (lpszOutputStringCorrected + j + i != NULL) { + if (_tcsncmp(lpszText + j, a[count][0], _tcslen(a[count][0])) == 0) { + _tcsncpy(lpszOutputStringCorrected + j + i, a[count][1], _tcslen(a[count][1])); + i = i + _tcslen(a[count][1]); + } + if (lpszOutputStringCorrected + j + i != NULL) + _tcsncpy(lpszOutputStringCorrected + j + i, lpszText + j, 1); + } + } + if (iNewStringCounter > 1) + MYFREE(lpszText); + lpszText = lpszOutputStringCorrected; + } + } + + return lpszText; +} + diff --git a/src/ui.c b/src/ui.c index 9ab7750..f3f0fef 100644 --- a/src/ui.c +++ b/src/ui.c @@ -143,7 +143,7 @@ VOID UI_UpdateCounters(LPTSTR lpszTitle1, LPTSTR lpszTitle2, DWORD nCount1, DWOR } else { // _sntprintf(lpszMessage, REGSHOT_MESSAGE_LENGTH, TEXT("%s %s\0"), lpszTitle3, TEXT("-")); - _sntprintf(lpszMessage, REGSHOT_MESSAGE_LENGTH, TEXT("%s\0"), TEXT("")); + _sntprintf(lpszMessage, REGSHOT_MESSAGE_LENGTH, TEXT("%s\0"), lpszEmpty); lpszMessage[REGSHOT_MESSAGE_LENGTH - 1] = (TCHAR)'\0'; // safety NULL char } SendDlgItemMessage(hMainWnd, IDC_TEXTCOUNT4, WM_SETTEXT, (WPARAM)0, (LPARAM)lpszMessage); diff --git a/src/version.rc.h b/src/version.rc.h index 6609c14..824645a 100644 --- a/src/version.rc.h +++ b/src/version.rc.h @@ -40,9 +40,9 @@ #define beta 2 #define REGSHOT_VERSION_TYPE release -#define REGSHOT_VERSION_MAJOR 2 +#define REGSHOT_VERSION_MAJOR 3 #define REGSHOT_VERSION_MINOR 0 -#define REGSHOT_VERSION_PATCH 7 +#define REGSHOT_VERSION_PATCH 0 #define REGSHOT_VERSION_NUM_DOTS REGSHOT_VERSION_MAJOR.REGSHOT_VERSION_MINOR.REGSHOT_VERSION_PATCH diff --git a/src/winmain.c b/src/winmain.c index 5bec8c9..4d7abd5 100644 --- a/src/winmain.c +++ b/src/winmain.c @@ -167,6 +167,45 @@ BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) lpszNSIEditor = MYALLOC0((MAX_PATH + 1) * sizeof(TCHAR)); lpgrszLangSection = NULL; + // TODO: aufräumen... + lpszMacroFileName = MYALLOC0(MAX_PATH * sizeof(TCHAR)); + lpszRegDefaultVal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszMultiSzStringDivider = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszSuppressedKeyPart = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszVALADDNormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszVALADDShort = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszVALCHANGENormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszVALCHANGEShort = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszVALDELETENormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszVALDELETEShort = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszKEYADDNormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszKEYDELETENormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszFILEADDNormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszFILECHANGENormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszFILEDELETENormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszFILEDELETEDeleteReadOnly = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszDIRADDNormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszDIRCHANGENormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszDIRDELETENormal = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + lpszDIRDELETEDeleteRecurse = MYALLOC0(_MACROLINESIZE_ * sizeof(TCHAR)); + + lpszNameREG_SZ = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszNameREG_EXPAND_SZ = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszNameREG_MULTI_SZ = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszNameREG_DWORD_LITTLE_ENDIAN = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszNameREG_DWORD_BIG_ENDIAN = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszNameREG_QWORD_LITTLE_ENDIAN = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszNameREG_NONE = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszNameREG_BINARY = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszPrefixREG_SZ = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszPrefixREG_EXPAND_SZ = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszPrefixREG_MULTI_SZ = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszPrefixREG_DWORD_LITTLE_ENDIAN = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszPrefixREG_DWORD_BIG_ENDIAN = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszPrefixREG_QWORD_LITTLE_ENDIAN = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszPrefixREG_NONE = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + lpszPrefixREG_BINARY = MYALLOC0(_MACROREPLACEMENTS_ * sizeof(TCHAR)); + SendDlgItemMessage(hDlg, IDC_STATIC_BMP, STM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)ico_green); ZeroMemory(&Shot1, sizeof(Shot1)); @@ -238,6 +277,7 @@ BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) LoadSettingsFromIni(hDlg); // tfx EnableWindow(GetDlgItem(hDlg, IDC_CHECK_SUPPRESS_LOGS), (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_RESULT), BM_GETCHECK, (WPARAM)0, (LPARAM)0)); + EnableWindow(GetDlgItem(hDlg, IDC_CHECK_NOTDELETED), !(BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_ONLYADDED), BM_GETCHECK, (WPARAM)0, (LPARAM)0)); // TODO: Subdirectory TITLE nLen = _tcslen(lpszOutputPath); @@ -704,7 +744,11 @@ BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) case IDC_CHECK_HKCU: case IDC_CHECK_REGDEL: case IDC_CHECK_REGINS: + case IDC_CHECK_NOTDELETED: + break; + case IDC_CHECK_ONLYADDED: + EnableWindow(GetDlgItem(hDlg, IDC_CHECK_NOTDELETED), !(BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_ONLYADDED), BM_GETCHECK, (WPARAM)0, (LPARAM)0)); break; case IDC_CHECK_SUPPRESS_LOGS: @@ -728,7 +772,7 @@ BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) case IDCANCEL: { // Button: Window Close if (bRunning) { bRunning = FALSE; - SendDlgItemMessage(hMainWnd, IDC_TEXTCOUNT4, WM_SETTEXT, (WPARAM)0, (LPARAM)TEXT("")); + SendDlgItemMessage(hMainWnd, IDC_TEXTCOUNT4, WM_SETTEXT, (WPARAM)0, (LPARAM)lpszEmpty); return(TRUE); } if (fStoreOnQuit) { @@ -847,8 +891,12 @@ BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) break; case IDC_CHECK_HTML: - fOutputTXTfile = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_TXT), BM_GETCHECK, (WPARAM)0, (LPARAM)0); + fOutputHTMfile = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_HTML), BM_GETCHECK, (WPARAM)0, (LPARAM)0); break; + + //case IDC_CHECK_AU3: + // fOutputAU3file = (BOOL)SendMessage(GetDlgItem(hDlg, IDC_CHECK_AU3), BM_GETCHECK, (WPARAM)0, (LPARAM)0); + // break; } } return(FALSE);