mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
[Symbian Installation File] Split files into subcomponents.
This commit is contained in:
@@ -46,6 +46,10 @@
|
|||||||
<EmbeddedResource Include="..\LICENSE.LGPL">
|
<EmbeddedResource Include="..\LICENSE.LGPL">
|
||||||
<Link>LICENSE.LGPL</Link>
|
<Link>LICENSE.LGPL</Link>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Update="Localization\Localization.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Localization.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Aaru.CommonTypes\Aaru.CommonTypes.csproj"/>
|
<ProjectReference Include="..\Aaru.CommonTypes\Aaru.CommonTypes.csproj"/>
|
||||||
|
|||||||
5
Aaru.Archives/Aaru.Archives.csproj.DotSettings
Normal file
5
Aaru.Archives/Aaru.Archives.csproj.DotSettings
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<wpf:ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:s="clr-namespace:System;assembly=mscorlib"
|
||||||
|
xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xml:space="preserve">
|
||||||
|
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=symbian/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||||
37
Aaru.Archives/Authors.cs
Normal file
37
Aaru.Archives/Authors.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// Aaru Data Preservation Suite
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : Authors.cs
|
||||||
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||||
|
//
|
||||||
|
// Component : Aaru.Filesystems.
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This library 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.
|
||||||
|
//
|
||||||
|
// This library 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 this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright © 2011-2023 Natalia Portillo
|
||||||
|
// ****************************************************************************/
|
||||||
|
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
|
namespace Aaru.Archives;
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||||
|
static class Authors
|
||||||
|
{
|
||||||
|
internal const string NataliaPortillo = "Natalia Portillo";
|
||||||
|
}
|
||||||
71
Aaru.Archives/Localization/Localization.Designer.cs
generated
Normal file
71
Aaru.Archives/Localization/Localization.Designer.cs
generated
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Aaru.Filters {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Localization {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Localization() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Aaru.Archives.Localization.Localization", typeof(Localization).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Symbian Installation File.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Symbian_Name {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Symbian_Name", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
21
Aaru.Archives/Localization/Localization.es.resx
Normal file
21
Aaru.Archives/Localization/Localization.es.resx
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<root>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>1.3</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
|
||||||
|
PublicKeyToken=b77a5c561934e089
|
||||||
|
</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
|
||||||
|
PublicKeyToken=b77a5c561934e089
|
||||||
|
</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="Symbian_Name" xml:space="preserve">
|
||||||
|
<value>Fichero de Instalación de Symbian</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
29
Aaru.Archives/Localization/Localization.resx
Normal file
29
Aaru.Archives/Localization/Localization.resx
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
|
||||||
|
<root>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
|
||||||
|
id="root"
|
||||||
|
xmlns="">
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true"></xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>1.3</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
|
||||||
|
PublicKeyToken=b77a5c561934e089
|
||||||
|
</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
|
||||||
|
PublicKeyToken=b77a5c561934e089
|
||||||
|
</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="Symbian_Name" xml:space="preserve">
|
||||||
|
<value>Symbian Installation File</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
46
Aaru.Archives/Symbian/Consts.cs
Normal file
46
Aaru.Archives/Symbian/Consts.cs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// Aaru Data Preservation Suite
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : Symbian.cs
|
||||||
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||||
|
//
|
||||||
|
// Component : Symbian plugin.
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Identifies Symbian installer (.sis) packages and shows information.
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This library 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.
|
||||||
|
//
|
||||||
|
// This library 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 this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright © 2011-2023 Natalia Portillo
|
||||||
|
// ****************************************************************************/
|
||||||
|
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
|
namespace Aaru.Archives;
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "UnusedType.Global")]
|
||||||
|
[SuppressMessage("ReSharper", "UnusedMember.Local")]
|
||||||
|
public partial class Symbian
|
||||||
|
{
|
||||||
|
// Magics
|
||||||
|
const uint SYMBIAN_MAGIC = 0x10000419;
|
||||||
|
const uint EPOC_MAGIC = 0x1000006D;
|
||||||
|
const uint EPOC6_MAGIC = 0x10003A12;
|
||||||
|
const uint SYMBIAN9_MAGIC = 0x10201A7A;
|
||||||
|
}
|
||||||
197
Aaru.Archives/Symbian/Enums.cs
Normal file
197
Aaru.Archives/Symbian/Enums.cs
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// Aaru Data Preservation Suite
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : Symbian.cs
|
||||||
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||||
|
//
|
||||||
|
// Component : Symbian plugin.
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Identifies Symbian installer (.sis) packages and shows information.
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This library 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.
|
||||||
|
//
|
||||||
|
// This library 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 this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright © 2011-2023 Natalia Portillo
|
||||||
|
// ****************************************************************************/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
|
namespace Aaru.Archives;
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "UnusedMember.Local")]
|
||||||
|
[SuppressMessage("ReSharper", "UnusedType.Local")]
|
||||||
|
[SuppressMessage("ReSharper", "UnusedType.Global")]
|
||||||
|
public partial class Symbian
|
||||||
|
{
|
||||||
|
#region Nested type: LanguageCodes
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||||
|
enum LanguageCodes
|
||||||
|
{
|
||||||
|
Test,
|
||||||
|
EN,
|
||||||
|
FR,
|
||||||
|
GE,
|
||||||
|
SP,
|
||||||
|
IT,
|
||||||
|
SW,
|
||||||
|
DA,
|
||||||
|
NO,
|
||||||
|
FI,
|
||||||
|
AM,
|
||||||
|
SF,
|
||||||
|
SG,
|
||||||
|
PO,
|
||||||
|
TU,
|
||||||
|
IC,
|
||||||
|
RU,
|
||||||
|
HU,
|
||||||
|
DU,
|
||||||
|
BL,
|
||||||
|
AU,
|
||||||
|
BF,
|
||||||
|
AS,
|
||||||
|
NZ,
|
||||||
|
IF,
|
||||||
|
CS,
|
||||||
|
SK,
|
||||||
|
PL,
|
||||||
|
SL,
|
||||||
|
TC,
|
||||||
|
HK,
|
||||||
|
ZH,
|
||||||
|
JA,
|
||||||
|
TH,
|
||||||
|
AF,
|
||||||
|
SQ,
|
||||||
|
AH,
|
||||||
|
AR,
|
||||||
|
HY,
|
||||||
|
TL,
|
||||||
|
BE,
|
||||||
|
BN,
|
||||||
|
BG,
|
||||||
|
MY,
|
||||||
|
CA,
|
||||||
|
HR,
|
||||||
|
CE,
|
||||||
|
IE,
|
||||||
|
ZA,
|
||||||
|
ET,
|
||||||
|
FA,
|
||||||
|
CF,
|
||||||
|
GD,
|
||||||
|
KA,
|
||||||
|
EL,
|
||||||
|
CG,
|
||||||
|
GU,
|
||||||
|
HE,
|
||||||
|
HI,
|
||||||
|
IN,
|
||||||
|
GA,
|
||||||
|
SZ,
|
||||||
|
KN,
|
||||||
|
KK,
|
||||||
|
KM,
|
||||||
|
KO,
|
||||||
|
LO,
|
||||||
|
LV,
|
||||||
|
LT,
|
||||||
|
MK,
|
||||||
|
MS,
|
||||||
|
ML,
|
||||||
|
MR,
|
||||||
|
MO,
|
||||||
|
MN,
|
||||||
|
NN,
|
||||||
|
BP,
|
||||||
|
PA,
|
||||||
|
RO,
|
||||||
|
SR,
|
||||||
|
SI,
|
||||||
|
SO,
|
||||||
|
OS,
|
||||||
|
LS,
|
||||||
|
SH,
|
||||||
|
FS,
|
||||||
|
TA,
|
||||||
|
TE,
|
||||||
|
BO,
|
||||||
|
TI,
|
||||||
|
CT,
|
||||||
|
TK,
|
||||||
|
UK,
|
||||||
|
UR,
|
||||||
|
VI,
|
||||||
|
CY,
|
||||||
|
ZU
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Nested type: SymbianOptions
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Options
|
||||||
|
/// </summary>
|
||||||
|
[Flags]
|
||||||
|
enum SymbianOptions : ushort
|
||||||
|
{
|
||||||
|
IsUnicode = 0x0001,
|
||||||
|
IsDistributable = 0x0002,
|
||||||
|
NoCompress = 0x0008,
|
||||||
|
ShutdownApps = 0x0010
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Nested type: SymbianType
|
||||||
|
|
||||||
|
// Types
|
||||||
|
enum SymbianType : ushort
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Application
|
||||||
|
/// </summary>
|
||||||
|
Application = 0x0000,
|
||||||
|
/// <summary>
|
||||||
|
/// System component (library)
|
||||||
|
/// </summary>
|
||||||
|
SystemComponent = 0x0001,
|
||||||
|
/// <summary>
|
||||||
|
/// Optional component
|
||||||
|
/// </summary>
|
||||||
|
OptionalComponent = 0x0002,
|
||||||
|
/// <summary>
|
||||||
|
/// Configures an application
|
||||||
|
/// </summary>
|
||||||
|
Configurator = 0x0003,
|
||||||
|
/// <summary>
|
||||||
|
/// Patch
|
||||||
|
/// </summary>
|
||||||
|
Patch = 0x0004,
|
||||||
|
/// <summary>
|
||||||
|
/// Upgrade
|
||||||
|
/// </summary>
|
||||||
|
Upgrade = 0x0005
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
197
Aaru.Archives/Symbian/Info.cs
Normal file
197
Aaru.Archives/Symbian/Info.cs
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// Aaru Data Preservation Suite
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : Symbian.cs
|
||||||
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||||
|
//
|
||||||
|
// Component : Symbian plugin.
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Identifies Symbian installer (.sis) packages and shows information.
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This library 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.
|
||||||
|
//
|
||||||
|
// This library 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 this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright © 2011-2023 Natalia Portillo
|
||||||
|
// ****************************************************************************/
|
||||||
|
|
||||||
|
namespace Aaru.Archives;
|
||||||
|
|
||||||
|
public partial class Symbian
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
public override bool Identify(FileStream fileStream, long offset)
|
||||||
|
{
|
||||||
|
uint uid1, uid2, uid3;
|
||||||
|
BinaryReader br = new BinaryReader(fileStream);
|
||||||
|
|
||||||
|
br.BaseStream.Seek(0 + offset, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
uid1 = br.Readuint();
|
||||||
|
uid2 = br.Readuint();
|
||||||
|
uid3 = br.Readuint();
|
||||||
|
|
||||||
|
if(uid1 == Symbian9Magic)
|
||||||
|
return true;
|
||||||
|
else if(uid3 == SymbianMagic)
|
||||||
|
{
|
||||||
|
if(uid2 == EPOCMagic || uid2 == EPOC6Magic)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void GetInformation (FileStream fileStream, long offset, out string information)
|
||||||
|
{
|
||||||
|
information = "";
|
||||||
|
StringBuilder description = new StringBuilder();
|
||||||
|
List<string> languages = new List<string>();
|
||||||
|
Dictionary<uint, uint> capabilities = new Dictionary<uint, uint>();
|
||||||
|
int ENpos = 0;
|
||||||
|
uint comp_len;
|
||||||
|
uint comp_name_ptr;
|
||||||
|
byte[] ComponentName_b;
|
||||||
|
string ComponentName = "";
|
||||||
|
|
||||||
|
SymbianHeader sh = new SymbianHeader();
|
||||||
|
BinaryReader br = new BinaryReader(fileStream);
|
||||||
|
|
||||||
|
br.BaseStream.Seek(0 + offset, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
sh.uid1 = br.Readuint();
|
||||||
|
sh.uid2 = br.Readuint();
|
||||||
|
sh.uid3 = br.Readuint();
|
||||||
|
sh.uid4 = br.Readuint();
|
||||||
|
sh.crc16 = br.Readushort();
|
||||||
|
sh.languages = br.Readushort();
|
||||||
|
sh.files = br.Readushort();
|
||||||
|
sh.requisites = br.Readushort();
|
||||||
|
sh.inst_lang = br.Readushort();
|
||||||
|
sh.inst_files = br.Readushort();
|
||||||
|
sh.inst_drive = br.Readushort();
|
||||||
|
sh.capabilities = br.Readushort();
|
||||||
|
sh.inst_version = br.Readuint();
|
||||||
|
sh.options = br.Readushort();
|
||||||
|
sh.type = br.Readushort();
|
||||||
|
sh.major = br.Readushort();
|
||||||
|
sh.minor = br.Readushort();
|
||||||
|
sh.variant = br.Readuint();
|
||||||
|
sh.lang_ptr = br.Readuint();
|
||||||
|
sh.files_ptr = br.Readuint();
|
||||||
|
sh.reqs_ptr = br.Readuint();
|
||||||
|
sh.certs_ptr = br.Readuint();
|
||||||
|
sh.comp_ptr = br.Readuint();
|
||||||
|
sh.sig_ptr = br.Readuint();
|
||||||
|
sh.caps_ptr = br.Readuint();
|
||||||
|
sh.instspace = br.Readuint();
|
||||||
|
sh.maxinsspc = br.Readuint();
|
||||||
|
sh.reserved1 = br.Readulong();
|
||||||
|
sh.reserved2 = br.Readulong();
|
||||||
|
|
||||||
|
// Go to enumerate languages
|
||||||
|
br.BaseStream.Seek(sh.lang_ptr + offset, SeekOrigin.Begin);
|
||||||
|
for(int i = 0; i < sh.languages; i++)
|
||||||
|
{
|
||||||
|
ushort language = br.Readushort();
|
||||||
|
if(language == 0x0001)
|
||||||
|
ENpos = i;
|
||||||
|
languages.Add(((LanguageCodes)language).ToString("G"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Go to component record
|
||||||
|
br.BaseStream.Seek(sh.comp_ptr + offset, SeekOrigin.Begin);
|
||||||
|
for(int i = 0; i < sh.languages; i++)
|
||||||
|
{
|
||||||
|
comp_len = br.Readuint();
|
||||||
|
comp_name_ptr = br.Readuint();
|
||||||
|
if(i == ENpos)
|
||||||
|
{
|
||||||
|
br.BaseStream.Seek(comp_name_ptr + offset, SeekOrigin.Begin);
|
||||||
|
ComponentName_b = new byte[comp_len];
|
||||||
|
ComponentName_b = br.ReadBytes((int)comp_len);
|
||||||
|
ComponentName = Encoding.ASCII.GetString(ComponentName_b);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Go to capabilities (???)
|
||||||
|
br.BaseStream.Seek(sh.caps_ptr + offset, SeekOrigin.Begin);
|
||||||
|
for(int i = 0; i < sh.capabilities; i++)
|
||||||
|
{
|
||||||
|
uint cap_key = br.Readuint();
|
||||||
|
uint cap_value = br.Readuint();
|
||||||
|
capabilities.Add(cap_key, cap_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sh.uid1 == Symbian9Magic)
|
||||||
|
{
|
||||||
|
description.AppendLine("Symbian Installation File");
|
||||||
|
description.AppendLine("SymbianOS 9.1 or later");
|
||||||
|
description.AppendFormat("Application ID: 0x{0:X8}", sh.uid3).AppendLine();
|
||||||
|
description.AppendFormat("UIDs checksum: 0x{0:X8}", sh.uid4).AppendLine();
|
||||||
|
}
|
||||||
|
else if(sh.uid3 == SymbianMagic)
|
||||||
|
{
|
||||||
|
description.AppendLine("Symbian Installation File");
|
||||||
|
|
||||||
|
if(sh.uid2 == EPOCMagic)
|
||||||
|
description.AppendLine("SymbianOS 3 or later");
|
||||||
|
else if (sh.uid2 == EPOC6Magic)
|
||||||
|
description.AppendLine("SymbianOS 6 or later");
|
||||||
|
else
|
||||||
|
description.AppendFormat("Unknown EPOC magic 0x{0:X8}", sh.uid2).AppendLine();
|
||||||
|
|
||||||
|
description.AppendFormat("Application ID: 0x{0:X8}", sh.uid1).AppendLine();
|
||||||
|
description.AppendFormat("UIDs checksum: 0x{0:X8}", sh.uid4).AppendLine();
|
||||||
|
description.AppendFormat("CRC16 of header: 0x{0:X4}", sh.crc16).AppendLine();
|
||||||
|
description.AppendLine();
|
||||||
|
|
||||||
|
switch(sh.type)
|
||||||
|
{
|
||||||
|
case SISApp:
|
||||||
|
description.AppendLine("SIS contains an application");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
description.AppendFormat("Component: {0} v{1}.{2}", ComponentName, sh.major, sh.minor).AppendLine();
|
||||||
|
|
||||||
|
description.AppendFormat("File contains {0} languages:", sh.languages).AppendLine();
|
||||||
|
for(int i = 0; i < languages.Count; i++)
|
||||||
|
{
|
||||||
|
if(i>0)
|
||||||
|
description.Append(", ");
|
||||||
|
description.AppendFormat("{0}", languages[i]);
|
||||||
|
}
|
||||||
|
description.AppendLine();
|
||||||
|
|
||||||
|
description.AppendFormat("File contains {0} files (pointer: {1})", sh.files, sh.files_ptr).AppendLine();
|
||||||
|
description.AppendFormat("File contains {0} requisites", sh.requisites).AppendLine();
|
||||||
|
// description.AppendLine("Capabilities:");
|
||||||
|
// foreach(KeyValuePair<uint, uint> kvp in capabilities)
|
||||||
|
// description.AppendFormat("{0} = {1}", kvp.Key, kvp.Value).AppendLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
information = description.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
}
|
||||||
167
Aaru.Archives/Symbian/Structs.cs
Normal file
167
Aaru.Archives/Symbian/Structs.cs
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// Aaru Data Preservation Suite
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : Symbian.cs
|
||||||
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||||
|
//
|
||||||
|
// Component : Symbian plugin.
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Identifies Symbian installer (.sis) packages and shows information.
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This library 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.
|
||||||
|
//
|
||||||
|
// This library 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 this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright © 2011-2023 Natalia Portillo
|
||||||
|
// ****************************************************************************/
|
||||||
|
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Aaru.Archives;
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "UnusedType.Global")]
|
||||||
|
[SuppressMessage("ReSharper", "UnusedType.Local")]
|
||||||
|
public partial class Symbian
|
||||||
|
{
|
||||||
|
#region Nested type: SymbianHeader
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
|
struct SymbianHeader
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Application UID before SymbianOS 9, magic after
|
||||||
|
/// </summary>
|
||||||
|
public uint uid1;
|
||||||
|
/// <summary>
|
||||||
|
/// EPOC release magic before SOS 9, NULLs after
|
||||||
|
/// </summary>
|
||||||
|
public uint uid2;
|
||||||
|
/// <summary>
|
||||||
|
/// Application UID after SOS 9, magic before
|
||||||
|
/// </summary>
|
||||||
|
public uint uid3;
|
||||||
|
/// <summary>
|
||||||
|
/// Checksum of UIDs 1 to 3
|
||||||
|
/// </summary>
|
||||||
|
public uint uid4;
|
||||||
|
/// <summary>
|
||||||
|
/// CRC16 of all header
|
||||||
|
/// </summary>
|
||||||
|
public ushort crc16;
|
||||||
|
/// <summary>
|
||||||
|
/// Number of languages
|
||||||
|
/// </summary>
|
||||||
|
public ushort languages;
|
||||||
|
/// <summary>
|
||||||
|
/// Number of files
|
||||||
|
/// </summary>
|
||||||
|
public ushort files;
|
||||||
|
/// <summary>
|
||||||
|
/// Number of requisites
|
||||||
|
/// </summary>
|
||||||
|
public ushort requisites;
|
||||||
|
/// <summary>
|
||||||
|
/// Installed language (only residual SIS)
|
||||||
|
/// </summary>
|
||||||
|
public ushort inst_lang;
|
||||||
|
/// <summary>
|
||||||
|
/// Installed files (only residual SIS)
|
||||||
|
/// </summary>
|
||||||
|
public ushort inst_files;
|
||||||
|
/// <summary>
|
||||||
|
/// Installed drive (only residual SIS), NULL or 0x0021
|
||||||
|
/// </summary>
|
||||||
|
public ushort inst_drive;
|
||||||
|
/// <summary>
|
||||||
|
/// Number of capabilities
|
||||||
|
/// </summary>
|
||||||
|
public ushort capabilities;
|
||||||
|
/// <summary>
|
||||||
|
/// Version of Symbian Installer required
|
||||||
|
/// </summary>
|
||||||
|
public uint inst_version;
|
||||||
|
/// <summary>
|
||||||
|
/// Option flags
|
||||||
|
/// </summary>
|
||||||
|
public SymbianOptions options;
|
||||||
|
/// <summary>
|
||||||
|
/// Type
|
||||||
|
/// </summary>
|
||||||
|
public SymbianType type;
|
||||||
|
/// <summary>
|
||||||
|
/// Major version of application
|
||||||
|
/// </summary>
|
||||||
|
public ushort major;
|
||||||
|
/// <summary>
|
||||||
|
/// Minor version of application
|
||||||
|
/// </summary>
|
||||||
|
public ushort minor;
|
||||||
|
/// <summary>
|
||||||
|
/// Variant when SIS is a prerequisite for other SISs
|
||||||
|
/// </summary>
|
||||||
|
public uint variant;
|
||||||
|
/// <summary>
|
||||||
|
/// Pointer to language records
|
||||||
|
/// </summary>
|
||||||
|
public uint lang_ptr;
|
||||||
|
/// <summary>
|
||||||
|
/// Pointer to file records
|
||||||
|
/// </summary>
|
||||||
|
public uint files_ptr;
|
||||||
|
/// <summary>
|
||||||
|
/// Pointer to requisite records
|
||||||
|
/// </summary>
|
||||||
|
public uint reqs_ptr;
|
||||||
|
/// <summary>
|
||||||
|
/// Pointer to certificate records
|
||||||
|
/// </summary>
|
||||||
|
public uint certs_ptr;
|
||||||
|
/// <summary>
|
||||||
|
/// Pointer to component name record
|
||||||
|
/// </summary>
|
||||||
|
public uint comp_ptr;
|
||||||
|
// From EPOC Release 6
|
||||||
|
/// <summary>
|
||||||
|
/// Pointer to signature record
|
||||||
|
/// </summary>
|
||||||
|
public uint sig_ptr;
|
||||||
|
/// <summary>
|
||||||
|
/// Pointer to capability records
|
||||||
|
/// </summary>
|
||||||
|
public uint caps_ptr;
|
||||||
|
/// <summary>
|
||||||
|
/// Installed space (only residual SIS)
|
||||||
|
/// </summary>
|
||||||
|
public uint instspace;
|
||||||
|
/// <summary>
|
||||||
|
/// Space required
|
||||||
|
/// </summary>
|
||||||
|
public uint maxinsspc;
|
||||||
|
/// <summary>
|
||||||
|
/// Reserved
|
||||||
|
/// </summary>
|
||||||
|
public ulong reserved1;
|
||||||
|
/// <summary>
|
||||||
|
/// Reserved
|
||||||
|
/// </summary>
|
||||||
|
public ulong reserved2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
@@ -30,333 +30,15 @@
|
|||||||
// Copyright © 2011-2023 Natalia Portillo
|
// Copyright © 2011-2023 Natalia Portillo
|
||||||
// ****************************************************************************/
|
// ****************************************************************************/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Aaru.Archives;
|
||||||
|
|
||||||
// Information from http://www.thoukydides.webspace.virginmedia.com/software/psifs/sis.html
|
// Information from http://www.thoukydides.webspace.virginmedia.com/software/psifs/sis.html
|
||||||
// TODO: Implement support for disc images
|
public partial class Symbian
|
||||||
/*
|
|
||||||
|
|
||||||
namespace Aaru.Plugins
|
|
||||||
{
|
{
|
||||||
class SymbianIS : Plugin
|
const string MODULE_NAME = "Symbian Installation File Plugin";
|
||||||
{
|
public string Name => Filters.Localization.Symbian_Name;
|
||||||
// Magics
|
public Guid Id => new("0EC84EC7-EAE6-4196-83FE-943B3FE48DBD");
|
||||||
private const uint SymbianMagic = 0x10000419;
|
public string Author => Authors.NataliaPortillo;
|
||||||
private const uint EPOCMagic = 0x1000006D;
|
}
|
||||||
private const uint EPOC6Magic = 0x10003A12;
|
|
||||||
private const uint Symbian9Magic = 0x10201A7A;
|
|
||||||
|
|
||||||
// Options
|
|
||||||
private const ushort IsUnicode = 0x0001;
|
|
||||||
private const ushort IsDistributable = 0x0002;
|
|
||||||
private const ushort NoCompress = 0x0008;
|
|
||||||
private const ushort ShutdownApps = 0x0010;
|
|
||||||
|
|
||||||
// Types
|
|
||||||
private const ushort SISApp = 0x0000; // Application
|
|
||||||
private const ushort SISSystem = 0x0001; // System component (library)
|
|
||||||
private const ushort SISOption = 0x0002; // Optional component
|
|
||||||
private const ushort SISConfig = 0x0003; // Configures an application
|
|
||||||
private const ushort SISPatch = 0x0004; // Patch
|
|
||||||
private const ushort SISUpgrade = 0x0005; // Upgrade
|
|
||||||
|
|
||||||
private enum LanguageCodes
|
|
||||||
{
|
|
||||||
Test,
|
|
||||||
EN,
|
|
||||||
FR,
|
|
||||||
GE,
|
|
||||||
SP,
|
|
||||||
IT,
|
|
||||||
SW,
|
|
||||||
DA,
|
|
||||||
NO,
|
|
||||||
FI,
|
|
||||||
AM,
|
|
||||||
SF,
|
|
||||||
SG,
|
|
||||||
PO,
|
|
||||||
TU,
|
|
||||||
IC,
|
|
||||||
RU,
|
|
||||||
HU,
|
|
||||||
DU,
|
|
||||||
BL,
|
|
||||||
AU,
|
|
||||||
BF,
|
|
||||||
AS,
|
|
||||||
NZ,
|
|
||||||
IF,
|
|
||||||
CS,
|
|
||||||
SK,
|
|
||||||
PL,
|
|
||||||
SL,
|
|
||||||
TC,
|
|
||||||
HK,
|
|
||||||
ZH,
|
|
||||||
JA,
|
|
||||||
TH,
|
|
||||||
AF,
|
|
||||||
SQ,
|
|
||||||
AH,
|
|
||||||
AR,
|
|
||||||
HY,
|
|
||||||
TL,
|
|
||||||
BE,
|
|
||||||
BN,
|
|
||||||
BG,
|
|
||||||
MY,
|
|
||||||
CA,
|
|
||||||
HR,
|
|
||||||
CE,
|
|
||||||
IE,
|
|
||||||
ZA,
|
|
||||||
ET,
|
|
||||||
FA,
|
|
||||||
CF,
|
|
||||||
GD,
|
|
||||||
KA,
|
|
||||||
EL,
|
|
||||||
CG,
|
|
||||||
GU,
|
|
||||||
HE,
|
|
||||||
HI,
|
|
||||||
IN,
|
|
||||||
GA,
|
|
||||||
SZ,
|
|
||||||
KN,
|
|
||||||
KK,
|
|
||||||
KM,
|
|
||||||
KO,
|
|
||||||
LO,
|
|
||||||
LV,
|
|
||||||
LT,
|
|
||||||
MK,
|
|
||||||
MS,
|
|
||||||
ML,
|
|
||||||
MR,
|
|
||||||
MO,
|
|
||||||
MN,
|
|
||||||
NN,
|
|
||||||
BP,
|
|
||||||
PA,
|
|
||||||
RO,
|
|
||||||
SR,
|
|
||||||
SI,
|
|
||||||
SO,
|
|
||||||
OS,
|
|
||||||
LS,
|
|
||||||
SH,
|
|
||||||
FS,
|
|
||||||
TA,
|
|
||||||
TE,
|
|
||||||
BO,
|
|
||||||
TI,
|
|
||||||
CT,
|
|
||||||
TK,
|
|
||||||
UK,
|
|
||||||
UR,
|
|
||||||
VI,
|
|
||||||
CY,
|
|
||||||
ZU
|
|
||||||
};
|
|
||||||
|
|
||||||
public SymbianIS()
|
|
||||||
{
|
|
||||||
base.Name = "Symbian Installation File Plugin";
|
|
||||||
base.PluginUUID = new Guid("0ec84ec7-eae6-4196-83fe-943b3fe48dbd");
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Identify(FileStream fileStream, long offset)
|
|
||||||
{
|
|
||||||
uint uid1, uid2, uid3;
|
|
||||||
BinaryReader br = new BinaryReader(fileStream);
|
|
||||||
|
|
||||||
br.BaseStream.Seek(0 + offset, SeekOrigin.Begin);
|
|
||||||
|
|
||||||
uid1 = br.Readuint();
|
|
||||||
uid2 = br.Readuint();
|
|
||||||
uid3 = br.Readuint();
|
|
||||||
|
|
||||||
if(uid1 == Symbian9Magic)
|
|
||||||
return true;
|
|
||||||
else if(uid3 == SymbianMagic)
|
|
||||||
{
|
|
||||||
if(uid2 == EPOCMagic || uid2 == EPOC6Magic)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void GetInformation (FileStream fileStream, long offset, out string information)
|
|
||||||
{
|
|
||||||
information = "";
|
|
||||||
StringBuilder description = new StringBuilder();
|
|
||||||
List<string> languages = new List<string>();
|
|
||||||
Dictionary<uint, uint> capabilities = new Dictionary<uint, uint>();
|
|
||||||
int ENpos = 0;
|
|
||||||
uint comp_len;
|
|
||||||
uint comp_name_ptr;
|
|
||||||
byte[] ComponentName_b;
|
|
||||||
string ComponentName = "";
|
|
||||||
|
|
||||||
SymbianHeader sh = new SymbianHeader();
|
|
||||||
BinaryReader br = new BinaryReader(fileStream);
|
|
||||||
|
|
||||||
br.BaseStream.Seek(0 + offset, SeekOrigin.Begin);
|
|
||||||
|
|
||||||
sh.uid1 = br.Readuint();
|
|
||||||
sh.uid2 = br.Readuint();
|
|
||||||
sh.uid3 = br.Readuint();
|
|
||||||
sh.uid4 = br.Readuint();
|
|
||||||
sh.crc16 = br.Readushort();
|
|
||||||
sh.languages = br.Readushort();
|
|
||||||
sh.files = br.Readushort();
|
|
||||||
sh.requisites = br.Readushort();
|
|
||||||
sh.inst_lang = br.Readushort();
|
|
||||||
sh.inst_files = br.Readushort();
|
|
||||||
sh.inst_drive = br.Readushort();
|
|
||||||
sh.capabilities = br.Readushort();
|
|
||||||
sh.inst_version = br.Readuint();
|
|
||||||
sh.options = br.Readushort();
|
|
||||||
sh.type = br.Readushort();
|
|
||||||
sh.major = br.Readushort();
|
|
||||||
sh.minor = br.Readushort();
|
|
||||||
sh.variant = br.Readuint();
|
|
||||||
sh.lang_ptr = br.Readuint();
|
|
||||||
sh.files_ptr = br.Readuint();
|
|
||||||
sh.reqs_ptr = br.Readuint();
|
|
||||||
sh.certs_ptr = br.Readuint();
|
|
||||||
sh.comp_ptr = br.Readuint();
|
|
||||||
sh.sig_ptr = br.Readuint();
|
|
||||||
sh.caps_ptr = br.Readuint();
|
|
||||||
sh.instspace = br.Readuint();
|
|
||||||
sh.maxinsspc = br.Readuint();
|
|
||||||
sh.reserved1 = br.Readulong();
|
|
||||||
sh.reserved2 = br.Readulong();
|
|
||||||
|
|
||||||
// Go to enumerate languages
|
|
||||||
br.BaseStream.Seek(sh.lang_ptr + offset, SeekOrigin.Begin);
|
|
||||||
for(int i = 0; i < sh.languages; i++)
|
|
||||||
{
|
|
||||||
ushort language = br.Readushort();
|
|
||||||
if(language == 0x0001)
|
|
||||||
ENpos = i;
|
|
||||||
languages.Add(((LanguageCodes)language).ToString("G"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Go to component record
|
|
||||||
br.BaseStream.Seek(sh.comp_ptr + offset, SeekOrigin.Begin);
|
|
||||||
for(int i = 0; i < sh.languages; i++)
|
|
||||||
{
|
|
||||||
comp_len = br.Readuint();
|
|
||||||
comp_name_ptr = br.Readuint();
|
|
||||||
if(i == ENpos)
|
|
||||||
{
|
|
||||||
br.BaseStream.Seek(comp_name_ptr + offset, SeekOrigin.Begin);
|
|
||||||
ComponentName_b = new byte[comp_len];
|
|
||||||
ComponentName_b = br.ReadBytes((int)comp_len);
|
|
||||||
ComponentName = Encoding.ASCII.GetString(ComponentName_b);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Go to capabilities (???)
|
|
||||||
br.BaseStream.Seek(sh.caps_ptr + offset, SeekOrigin.Begin);
|
|
||||||
for(int i = 0; i < sh.capabilities; i++)
|
|
||||||
{
|
|
||||||
uint cap_key = br.Readuint();
|
|
||||||
uint cap_value = br.Readuint();
|
|
||||||
capabilities.Add(cap_key, cap_value);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(sh.uid1 == Symbian9Magic)
|
|
||||||
{
|
|
||||||
description.AppendLine("Symbian Installation File");
|
|
||||||
description.AppendLine("SymbianOS 9.1 or later");
|
|
||||||
description.AppendFormat("Application ID: 0x{0:X8}", sh.uid3).AppendLine();
|
|
||||||
description.AppendFormat("UIDs checksum: 0x{0:X8}", sh.uid4).AppendLine();
|
|
||||||
}
|
|
||||||
else if(sh.uid3 == SymbianMagic)
|
|
||||||
{
|
|
||||||
description.AppendLine("Symbian Installation File");
|
|
||||||
|
|
||||||
if(sh.uid2 == EPOCMagic)
|
|
||||||
description.AppendLine("SymbianOS 3 or later");
|
|
||||||
else if (sh.uid2 == EPOC6Magic)
|
|
||||||
description.AppendLine("SymbianOS 6 or later");
|
|
||||||
else
|
|
||||||
description.AppendFormat("Unknown EPOC magic 0x{0:X8}", sh.uid2).AppendLine();
|
|
||||||
|
|
||||||
description.AppendFormat("Application ID: 0x{0:X8}", sh.uid1).AppendLine();
|
|
||||||
description.AppendFormat("UIDs checksum: 0x{0:X8}", sh.uid4).AppendLine();
|
|
||||||
description.AppendFormat("CRC16 of header: 0x{0:X4}", sh.crc16).AppendLine();
|
|
||||||
description.AppendLine();
|
|
||||||
|
|
||||||
switch(sh.type)
|
|
||||||
{
|
|
||||||
case SISApp:
|
|
||||||
description.AppendLine("SIS contains an application");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
description.AppendFormat("Component: {0} v{1}.{2}", ComponentName, sh.major, sh.minor).AppendLine();
|
|
||||||
|
|
||||||
description.AppendFormat("File contains {0} languages:", sh.languages).AppendLine();
|
|
||||||
for(int i = 0; i < languages.Count; i++)
|
|
||||||
{
|
|
||||||
if(i>0)
|
|
||||||
description.Append(", ");
|
|
||||||
description.AppendFormat("{0}", languages[i]);
|
|
||||||
}
|
|
||||||
description.AppendLine();
|
|
||||||
|
|
||||||
description.AppendFormat("File contains {0} files (pointer: {1})", sh.files, sh.files_ptr).AppendLine();
|
|
||||||
description.AppendFormat("File contains {0} requisites", sh.requisites).AppendLine();
|
|
||||||
// description.AppendLine("Capabilities:");
|
|
||||||
// foreach(KeyValuePair<uint, uint> kvp in capabilities)
|
|
||||||
// description.AppendFormat("{0} = {1}", kvp.Key, kvp.Value).AppendLine();
|
|
||||||
}
|
|
||||||
|
|
||||||
information = description.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private struct SymbianHeader
|
|
||||||
{
|
|
||||||
public uint uid1; // Application UID before SymbianOS 9, magic after
|
|
||||||
public uint uid2; // EPOC release magic before SOS 9, NULLs after
|
|
||||||
public uint uid3; // Application UID after SOS 9, magic before
|
|
||||||
public uint uid4; // Checksum of UIDs 1 to 3
|
|
||||||
public ushort crc16; // CRC16 of all header
|
|
||||||
public ushort languages; // Number of languages
|
|
||||||
public ushort files; // Number of files
|
|
||||||
public ushort requisites; // Number of requisites
|
|
||||||
public ushort inst_lang; // Installed language (only residual SIS)
|
|
||||||
public ushort inst_files; // Installed files (only residual SIS)
|
|
||||||
public ushort inst_drive; // Installed drive (only residual SIS), NULL or 0x0021
|
|
||||||
public ushort capabilities; // Number of capabilities
|
|
||||||
public uint inst_version; // Version of Symbian Installer required
|
|
||||||
public ushort options; // Option flags
|
|
||||||
public ushort type; // Type
|
|
||||||
public ushort major; // Major version of application
|
|
||||||
public ushort minor; // Minor version of application
|
|
||||||
public uint variant; // Variant when SIS is a prerequisite for other SISs
|
|
||||||
public uint lang_ptr; // Pointer to language records
|
|
||||||
public uint files_ptr; // Pointer to file records
|
|
||||||
public uint reqs_ptr; // Pointer to requisite records
|
|
||||||
public uint certs_ptr; // Pointer to certificate records
|
|
||||||
public uint comp_ptr; // Pointer to component name record
|
|
||||||
// From EPOC Release 6
|
|
||||||
public uint sig_ptr; // Pointer to signature record
|
|
||||||
public uint caps_ptr; // Pointer to capability records
|
|
||||||
public uint instspace; // Installed space (only residual SIS)
|
|
||||||
public uint maxinsspc; // Space required
|
|
||||||
public ulong reserved1; // Reserved
|
|
||||||
public ulong reserved2; // Reserved
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user