mirror of
https://github.com/SabreTools/SabreTools.Models.git
synced 2026-02-08 05:44:30 +00:00
Compare commits
50 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca58343c30 | ||
|
|
2f637e0012 | ||
|
|
80172942fd | ||
|
|
aa0960b42f | ||
|
|
2554f64277 | ||
|
|
4c5c960915 | ||
|
|
1cb49163dd | ||
|
|
d144dd47a1 | ||
|
|
c4247c7ccb | ||
|
|
1e77437167 | ||
|
|
3d79e07d76 | ||
|
|
9d50d577ab | ||
|
|
494ca175fb | ||
|
|
73b3d4a7a8 | ||
|
|
bd40158423 | ||
|
|
149a45d871 | ||
|
|
e18d8d7543 | ||
|
|
38f0d4aef5 | ||
|
|
3959993255 | ||
|
|
00df5bdd6e | ||
|
|
00c087d8e0 | ||
|
|
6bc948784a | ||
|
|
c4f14854c2 | ||
|
|
adaac68898 | ||
|
|
a9bc4a2bfe | ||
|
|
262b91de65 | ||
|
|
62bd6a4bde | ||
|
|
7f14f0c5b0 | ||
|
|
33d63fddae | ||
|
|
209be57bf4 | ||
|
|
a1581e9d9b | ||
|
|
521664d5a8 | ||
|
|
73a8d91a83 | ||
|
|
438e87f833 | ||
|
|
2cdedbb456 | ||
|
|
b57a545598 | ||
|
|
8dc6eb2eee | ||
|
|
b58436d71a | ||
|
|
925c20021f | ||
|
|
9bebf95599 | ||
|
|
089e13ca03 | ||
|
|
de07b3b0dd | ||
|
|
22cb5360e6 | ||
|
|
a422ec7e6d | ||
|
|
f60afd6368 | ||
|
|
b8f67a8ab0 | ||
|
|
d844a8b582 | ||
|
|
8583baa862 | ||
|
|
8f3be17850 | ||
|
|
5856967794 |
4
.github/workflows/build_nupkg.yml
vendored
4
.github/workflows/build_nupkg.yml
vendored
@@ -28,13 +28,13 @@ jobs:
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: 'Nuget Package'
|
||||
path: 'bin/Release/*.nupkg'
|
||||
path: 'SabreTools.Models/bin/Release/*.nupkg'
|
||||
|
||||
- name: Upload to rolling
|
||||
uses: ncipollo/release-action@v1.14.0
|
||||
with:
|
||||
allowUpdates: True
|
||||
artifacts: 'bin/Release/*.nupkg'
|
||||
artifacts: 'SabreTools.Models/bin/Release/*.nupkg'
|
||||
body: 'Last built commit: ${{ github.sha }}'
|
||||
name: 'Rolling Release'
|
||||
prerelease: True
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.InstallShieldArchiveV3
|
||||
{
|
||||
/// <see href="https://github.com/wfr/unshieldv3/blob/master/ISArchiveV3.cpp"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public class Directory
|
||||
{
|
||||
[MarshalAs(UnmanagedType.BStr)]
|
||||
public string? Name;
|
||||
|
||||
public ushort FileCount;
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCSD#Card_Info_Header"/>
|
||||
public sealed class CardInfoHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// CARD2: Writable Address In Media Units (For 'On-Chip' Savedata). CARD1: Always 0xFFFFFFFF.
|
||||
/// </summary>
|
||||
public uint WritableAddressMediaUnits { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Card Info Bitmask
|
||||
/// </summary>
|
||||
public uint CardInfoBitmask { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
public byte[]? Reserved1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Filled size of cartridge
|
||||
/// </summary>
|
||||
public uint FilledSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
public byte[]? Reserved2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Title version
|
||||
/// </summary>
|
||||
public ushort TitleVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Card revision
|
||||
/// </summary>
|
||||
public ushort CardRevision { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
public byte[]? Reserved3 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Title ID of CVer in included update partition
|
||||
/// </summary>
|
||||
public byte[]? CVerTitleID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Version number of CVer in included update partition
|
||||
/// </summary>
|
||||
public ushort CVerVersionNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
public byte[]? Reserved4 { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCSD#Development_Card_Info_Header_Extension"/>
|
||||
public sealed class DevelopmentCardInfoHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// InitialData
|
||||
/// </summary>
|
||||
public InitialData? InitialData { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// CardDeviceReserved1
|
||||
/// </summary>
|
||||
public byte[]? CardDeviceReserved1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// TitleKey
|
||||
/// </summary>
|
||||
public byte[]? TitleKey { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// CardDeviceReserved2
|
||||
/// </summary>
|
||||
public byte[]? CardDeviceReserved2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// TestData
|
||||
/// </summary>
|
||||
public TestData? TestData { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCSD#InitialData"/>
|
||||
public sealed class InitialData
|
||||
{
|
||||
/// <summary>
|
||||
/// Card seed keyY (first u64 is Media ID (same as first NCCH partitionId))
|
||||
/// </summary>
|
||||
public byte[]? CardSeedKeyY { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Encrypted card seed (AES-CCM, keyslot 0x3B for retail cards, see CTRCARD_SECSEED)
|
||||
/// </summary>
|
||||
public byte[]? EncryptedCardSeed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Card seed AES-MAC
|
||||
/// </summary>
|
||||
public byte[]? CardSeedAESMAC { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Card seed nonce
|
||||
/// </summary>
|
||||
public byte[]? CardSeedNonce { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved3
|
||||
/// </summary>
|
||||
public byte[]? Reserved { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Copy of first NCCH header (excluding RSA signature)
|
||||
/// </summary>
|
||||
public NCCHHeader? BackupHeader { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/CIA#Meta"/>
|
||||
public sealed class MetaData
|
||||
{
|
||||
/// <summary>
|
||||
/// Title ID dependency list - Taken from the application's ExHeader
|
||||
/// </summary>
|
||||
/// TODO: Determine numeric format of each entry
|
||||
public byte[]? TitleIDDependencyList { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
public byte[]? Reserved1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Core Version
|
||||
/// </summary>
|
||||
public uint CoreVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
public byte[]? Reserved2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Icon Data(.ICN) - Taken from the application's ExeFS
|
||||
/// </summary>
|
||||
public byte[]? IconData { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <summary>
|
||||
/// The test data is the same one encountered in development DS/DSi cartridges.
|
||||
/// </summary>
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCSD#TestData"/>
|
||||
public sealed class TestData
|
||||
{
|
||||
/// <summary>
|
||||
/// The bytes FF 00 FF 00 AA 55 AA 55.
|
||||
/// </summary>
|
||||
public byte[]? Signature { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An ascending byte sequence equal to the offset mod 256 (08 09 0A ... FE FF 00 01 ... FF).
|
||||
/// </summary>
|
||||
public byte[]? AscendingByteSequence { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A descending byte sequence equal to 255 minus the offset mod 256 (FF FE FD ... 00 FF DE ... 00).
|
||||
/// </summary>
|
||||
public byte[]? DescendingByteSequence { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Filled with 00 (0b00000000) bytes.
|
||||
/// </summary>
|
||||
public byte[]? Filled00 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Filled with FF (0b11111111) bytes.
|
||||
/// </summary>
|
||||
public byte[]? FilledFF { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Filled with 0F (0b00001111) bytes.
|
||||
/// </summary>
|
||||
public byte[]? Filled0F { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Filled with F0 (0b11110000) bytes.
|
||||
/// </summary>
|
||||
public byte[]? FilledF0 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Filled with 55 (0b01010101) bytes.
|
||||
/// </summary>
|
||||
public byte[]? Filled55 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Filled with AA (0b10101010) bytes.
|
||||
/// </summary>
|
||||
public byte[]? FilledAA { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The final byte is 00 (0b00000000).
|
||||
/// </summary>
|
||||
public byte FinalByte { get; set; }
|
||||
}
|
||||
}
|
||||
719
PKZIP/Enums.cs
719
PKZIP/Enums.cs
@@ -1,719 +0,0 @@
|
||||
using System;
|
||||
|
||||
/// <see href="https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT"/>
|
||||
namespace SabreTools.Models.PKZIP
|
||||
{
|
||||
public enum CompressionMethod : ushort
|
||||
{
|
||||
/// <summary>
|
||||
/// The file is stored (no compression)
|
||||
/// </summary>
|
||||
Stored = 0,
|
||||
|
||||
/// <summary>
|
||||
/// The file is Shrunk
|
||||
/// </summary>
|
||||
Shrunk = 1,
|
||||
|
||||
/// <summary>
|
||||
/// The file is Reduced with compression factor 1
|
||||
/// </summary>
|
||||
ReducedCompressionFactor1 = 2,
|
||||
|
||||
/// <summary>
|
||||
/// The file is Reduced with compression factor 2
|
||||
/// </summary>
|
||||
ReducedCompressionFactor2 = 3,
|
||||
|
||||
/// <summary>
|
||||
/// The file is Reduced with compression factor 3
|
||||
/// </summary>
|
||||
ReducedCompressionFactor3 = 4,
|
||||
|
||||
/// <summary>
|
||||
/// The file is Reduced with compression factor 4
|
||||
/// </summary>
|
||||
ReducedCompressionFactor4 = 5,
|
||||
|
||||
/// <summary>
|
||||
/// The file is Imploded
|
||||
/// </summary>
|
||||
Implode = 6,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved for Tokenizing compression algorithm
|
||||
/// </summary>
|
||||
TokenizingCompressionAlgorithm = 7,
|
||||
|
||||
/// <summary>
|
||||
/// The file is Deflated
|
||||
/// </summary>
|
||||
Deflate = 8,
|
||||
|
||||
/// <summary>
|
||||
/// Enhanced Deflating using Deflate64(tm)
|
||||
/// </summary>
|
||||
Deflate64 = 9,
|
||||
|
||||
/// <summary>
|
||||
/// PKWARE Data Compression Library Imploding (old IBM TERSE)
|
||||
/// </summary>
|
||||
PKWAREDataCompressionLibraryImplode = 10,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved by PKWARE
|
||||
/// </summary>
|
||||
CompressionMethod11 = 11,
|
||||
|
||||
/// <summary>
|
||||
/// File is compressed using BZIP2 algorithm
|
||||
/// </summary>
|
||||
BZIP2 = 12,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved by PKWARE
|
||||
/// </summary>
|
||||
CompressionMethod13 = 13,
|
||||
|
||||
/// <summary>
|
||||
/// LZMA
|
||||
/// </summary>
|
||||
LZMA = 14,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved by PKWARE
|
||||
/// </summary>
|
||||
CompressionMethod15 = 15,
|
||||
|
||||
/// <summary>
|
||||
/// IBM z/OS CMPSC Compression
|
||||
/// </summary>
|
||||
IBMzOSCMPSC = 16,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved by PKWARE
|
||||
/// </summary>
|
||||
CompressionMethod17 = 17,
|
||||
|
||||
/// <summary>
|
||||
/// File is compressed using IBM TERSE (new)
|
||||
/// </summary>
|
||||
IBMTERSE = 18,
|
||||
|
||||
/// <summary>
|
||||
/// IBM LZ77 z Architecture
|
||||
/// </summary>
|
||||
IBMLZ77 = 19,
|
||||
|
||||
/// <summary>
|
||||
/// deprecated (use method 93 for zstd)
|
||||
/// </summary>
|
||||
[Obsolete]
|
||||
OldZstandard = 20,
|
||||
|
||||
/// <summary>
|
||||
/// Zstandard (zstd) Compression
|
||||
/// </summary>
|
||||
Zstandard = 93,
|
||||
|
||||
/// <summary>
|
||||
/// MP3 Compression
|
||||
/// </summary>
|
||||
MP3 = 94,
|
||||
|
||||
/// <summary>
|
||||
/// XZ Compression
|
||||
/// </summary>
|
||||
XZ = 95,
|
||||
|
||||
/// <summary>
|
||||
/// JPEG variant
|
||||
/// </summary>
|
||||
JPEGVariant = 96,
|
||||
|
||||
/// <summary>
|
||||
/// WavPack compressed data
|
||||
/// </summary>
|
||||
WavPack = 97,
|
||||
|
||||
/// <summary>
|
||||
/// PPMd version I, Rev 1
|
||||
/// </summary>
|
||||
PPMdVersionIRev1 = 98,
|
||||
|
||||
/// <summary>
|
||||
/// AE-x encryption marker
|
||||
/// </summary>
|
||||
AExEncryption = 99,
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum GeneralPurposeBitFlags : ushort
|
||||
{
|
||||
/// <summary>
|
||||
/// Indicates that the file is encrypted
|
||||
/// </summary>
|
||||
FileEncrypted = 0b0000_0000_0000_0001,
|
||||
|
||||
#region Compression Method 6 (Implode)
|
||||
|
||||
/// <summary>
|
||||
/// Set - 8K sliding dictionary
|
||||
/// Clear - 4K sliding dictionary
|
||||
/// </summary>
|
||||
LargeSlidingDictionary = 0b0000_0000_0000_0010,
|
||||
|
||||
/// <summary>
|
||||
/// Set - 3 Shannon-Fano trees were used
|
||||
/// Clear - 2 Shannon-Fano trees were used
|
||||
/// </summary>
|
||||
ThreeTrees = 0b0000_0000_0000_0100,
|
||||
|
||||
#endregion
|
||||
|
||||
#region Compression Method 8 (Deflate)
|
||||
|
||||
/// <summary>
|
||||
/// Normal (-en) compression
|
||||
/// </summary>
|
||||
NormalCompression = 0b0000_0000_0000_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Maximum (-ex) compression
|
||||
/// </summary>
|
||||
MaximumCompression = 0b0000_0000_0000_0010,
|
||||
|
||||
/// <summary>
|
||||
/// Fast (-ef) compression
|
||||
/// </summary>
|
||||
FastCompression = 0b0000_0000_0000_0100,
|
||||
|
||||
/// <summary>
|
||||
/// Super Fast (-es) compression
|
||||
/// </summary>
|
||||
SuperFastCompression = 0b0000_0000_0000_0110,
|
||||
|
||||
#endregion
|
||||
|
||||
#region Compression Method 14 (LZMA)
|
||||
|
||||
/// <summary>
|
||||
/// Set - indicates an end-of-stream (EOS) marker is used to
|
||||
/// mark the end of the compressed data stream.
|
||||
/// Clear - an EOS marker is not present and the compressed data
|
||||
/// size must be known to extract.
|
||||
/// </summary>
|
||||
EndOfStreamMarker = 0b0000_0000_0000_0010,
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// set - the fields crc-32, compressed size and
|
||||
/// uncompressed size are set to zero in the
|
||||
/// local header. The correct values are put
|
||||
/// in the data descriptor immediately
|
||||
/// following the compressed data.
|
||||
/// </summary>
|
||||
NoCRC = 0b0000_0000_0000_1000,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved for use with method 8, for enhanced deflating.
|
||||
/// </summary>
|
||||
EnhancedDeflateReserved = 0b0000_0000_0001_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Indicates that the file is compressed patched data.
|
||||
/// </summary>
|
||||
/// <remarks>Requires PKZIP version 2.70 or greater</remarks>
|
||||
CompressedPatchedData = 0b0000_0000_0010_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Set - you MUST set the version needed to extract value
|
||||
/// to at least 50 and you MUST also set bit 0. If AES
|
||||
/// encryption is used, the version needed to extract
|
||||
/// value MUST be at least 51.
|
||||
/// </summary>
|
||||
StrongEncryption = 0b0000_0000_0100_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Currently unused
|
||||
/// </summary>
|
||||
Bit7 = 0b0000_0000_1000_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Currently unused
|
||||
/// </summary>
|
||||
Bit8 = 0b0000_0001_0000_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Currently unused
|
||||
/// </summary>
|
||||
Bit9 = 0b0000_0010_0000_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Currently unused
|
||||
/// </summary>
|
||||
Bit10 = 0b0000_0100_0000_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Set - the filename and comment fields for this
|
||||
/// file MUST be encoded using UTF-8.
|
||||
/// </summary>
|
||||
LanguageEncodingFlag = 0b0000_1000_0000_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved by PKWARE for enhanced compression
|
||||
/// </summary>
|
||||
PKWAREEnhancedCompression = 0b0001_0000_0000_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Set - Set when encrypting the Central Directory to
|
||||
/// indicate selected data values in the Local
|
||||
/// Header are masked to hide their actual values
|
||||
/// </summary>
|
||||
LocalHeaderValuesMasked = 0b0010_0000_0000_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved by PKWARE for alternate streams
|
||||
/// </summary>
|
||||
PKWAREAlternateStreams = 0b0100_0000_0000_0000,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved by PKWARE
|
||||
/// </summary>
|
||||
PKWAREReserved = 0b1000_0000_0000_0000,
|
||||
}
|
||||
|
||||
public enum HeaderID : ushort
|
||||
{
|
||||
/// <summary>
|
||||
/// Zip64 extended information extra field
|
||||
/// </summary>
|
||||
Zip64ExtendedInformation = 0x0001,
|
||||
|
||||
/// <summary>
|
||||
/// AV Info
|
||||
/// </summary>
|
||||
AVInfo = 0x0007,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved for extended language encoding data (PFS)
|
||||
/// </summary>
|
||||
ExtendedLanguageEncodingData = 0x0008,
|
||||
|
||||
/// <summary>
|
||||
/// OS/2
|
||||
/// </summary>
|
||||
OS2 = 0x0009,
|
||||
|
||||
/// <summary>
|
||||
/// NTFS
|
||||
/// </summary>
|
||||
NTFS = 0x000A,
|
||||
|
||||
/// <summary>
|
||||
/// OpenVMS
|
||||
/// </summary>
|
||||
OpenVMS = 0x000C,
|
||||
|
||||
/// <summary>
|
||||
/// UNIX
|
||||
/// </summary>
|
||||
UNIX = 0x000D,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved for file stream and fork descriptors
|
||||
/// </summary>
|
||||
FileStreamFork = 0x000E,
|
||||
|
||||
/// <summary>
|
||||
/// Patch Descriptor
|
||||
/// </summary>
|
||||
PatchDescriptor = 0x000F,
|
||||
|
||||
/// <summary>
|
||||
/// PKCS#7 Store for X.509 Certificates
|
||||
/// </summary>
|
||||
PKCSStore = 0x0014,
|
||||
|
||||
/// <summary>
|
||||
/// X.509 Certificate ID and Signature for individual file
|
||||
/// </summary>
|
||||
X509IndividualFile = 0x0015,
|
||||
|
||||
/// <summary>
|
||||
/// X.509 Certificate ID for Central Directory
|
||||
/// </summary>
|
||||
X509CentralDirectory = 0x0016,
|
||||
|
||||
/// <summary>
|
||||
/// Strong Encryption Header
|
||||
/// </summary>
|
||||
StrongEncryptionHeader = 0x0017,
|
||||
|
||||
/// <summary>
|
||||
/// Record Management Controls
|
||||
/// </summary>
|
||||
RecordManagementControls = 0x0018,
|
||||
|
||||
/// <summary>
|
||||
/// PKCS#7 Encryption Recipient Certificate List
|
||||
/// </summary>
|
||||
PKCSCertificateList = 0x0019,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved for Timestamp record
|
||||
/// </summary>
|
||||
Timestamp = 0x0020,
|
||||
|
||||
/// <summary>
|
||||
/// Policy Decryption Key Record
|
||||
/// </summary>
|
||||
PolicyDecryptionKey = 0x0021,
|
||||
|
||||
/// <summary>
|
||||
/// Smartcrypt Key Provider Record
|
||||
/// </summary>
|
||||
SmartcryptKeyProvider = 0x0022,
|
||||
|
||||
/// <summary>
|
||||
/// Smartcrypt Policy Key Data Record
|
||||
/// </summary>
|
||||
SmartcryptPolicyKeyData = 0x0023,
|
||||
|
||||
/// <summary>
|
||||
/// IBM S/390 (Z390), AS/400 (I400) attributes - uncompressed
|
||||
/// </summary>
|
||||
IBMS390AttributesUncompressed = 0x0065,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved for IBM S/390 (Z390), AS/400 (I400) attributes - compressed
|
||||
/// </summary>
|
||||
IBMS390AttributesCompressed = 0x0066,
|
||||
|
||||
/// <summary>
|
||||
/// POSZIP 4690 (reserved)
|
||||
/// </summary>
|
||||
POSZIP4690 = 0x4690,
|
||||
|
||||
#region Third-Party
|
||||
|
||||
/// <summary>
|
||||
/// Macintosh
|
||||
/// </summary>
|
||||
Macintosh = 0x07C8,
|
||||
|
||||
/// <summary>
|
||||
/// Pixar USD header ID
|
||||
/// </summary>
|
||||
PixarUSD = 0x1986,
|
||||
|
||||
/// <summary>
|
||||
/// ZipIt Macintosh
|
||||
/// </summary>
|
||||
ZipItMacintosh = 0x2605,
|
||||
|
||||
/// <summary>
|
||||
/// ZipIt Macintosh 1.3.5+
|
||||
/// </summary>
|
||||
ZipItMacintosh135Plus = 0x2705,
|
||||
|
||||
/// <summary>
|
||||
/// ZipIt Macintosh 1.3.5+
|
||||
/// </summary>
|
||||
ZipItMacintosh135PlusAlt = 0x2805,
|
||||
|
||||
/// <summary>
|
||||
/// Info-ZIP Macintosh
|
||||
/// </summary>
|
||||
InfoZIPMacintosh = 0x334D,
|
||||
|
||||
/// <summary>
|
||||
/// Acorn/SparkFS
|
||||
/// </summary>
|
||||
AcornSparkFS = 0x4341,
|
||||
|
||||
/// <summary>
|
||||
/// Windows NT security descriptor (binary ACL)
|
||||
/// </summary>
|
||||
WindowsNTSecurityDescriptor = 0x4453,
|
||||
|
||||
/// <summary>
|
||||
/// VM/CMS
|
||||
/// </summary>
|
||||
VMCMS = 0x4704,
|
||||
|
||||
/// <summary>
|
||||
/// MVS
|
||||
/// </summary>
|
||||
MVS = 0x470F,
|
||||
|
||||
/// <summary>
|
||||
/// THEOS (old?)
|
||||
/// </summary>
|
||||
THEOSold = 0x4854,
|
||||
|
||||
/// <summary>
|
||||
/// FWKCS MD5
|
||||
/// </summary>
|
||||
FWKCSMD5 = 0x4B46,
|
||||
|
||||
/// <summary>
|
||||
/// OS/2 access control list (text ACL)
|
||||
/// </summary>
|
||||
OS2AccessControlList = 0x4C41,
|
||||
|
||||
/// <summary>
|
||||
/// Info-ZIP OpenVMS
|
||||
/// </summary>
|
||||
InfoZIPOpenVMS = 0x4D49,
|
||||
|
||||
/// <summary>
|
||||
/// Macintosh Smartzip (??)
|
||||
/// </summary>
|
||||
MacintoshSmartzip = 0x4D63,
|
||||
|
||||
/// <summary>
|
||||
/// Xceed original location extra field
|
||||
/// </summary>
|
||||
XceedOriginalLocation = 0x4F4C,
|
||||
|
||||
/// <summary>
|
||||
/// AOS/VS (ACL)
|
||||
/// </summary>
|
||||
ADSVS = 0x5356,
|
||||
|
||||
/// <summary>
|
||||
/// extended timestamp
|
||||
/// </summary>
|
||||
ExtendedTimestamp = 0x5455,
|
||||
|
||||
/// <summary>
|
||||
/// Xceed unicode extra field
|
||||
/// </summary>
|
||||
XceedUnicode = 0x554E,
|
||||
|
||||
/// <summary>
|
||||
/// Info-ZIP UNIX (original, also OS/2, NT, etc)
|
||||
/// </summary>
|
||||
InfoZIPUNIX = 0x5855,
|
||||
|
||||
/// <summary>
|
||||
/// Info-ZIP Unicode Comment Extra Field
|
||||
/// </summary>
|
||||
InfoZIPUnicodeComment = 0x6375,
|
||||
|
||||
/// <summary>
|
||||
/// BeOS/BeBox
|
||||
/// </summary>
|
||||
BeOSBeBox = 0x6542,
|
||||
|
||||
/// <summary>
|
||||
/// THEOS
|
||||
/// </summary>
|
||||
THEOS = 0x6854,
|
||||
|
||||
/// <summary>
|
||||
/// Info-ZIP Unicode Path Extra Field
|
||||
/// </summary>
|
||||
InfoZIPUnicodePath = 0x7075,
|
||||
|
||||
/// <summary>
|
||||
/// AtheOS/Syllable
|
||||
/// </summary>
|
||||
AtheOSSyllable = 0x7441,
|
||||
|
||||
/// <summary>
|
||||
/// ASi UNIX
|
||||
/// </summary>
|
||||
ASiUNIX = 0x756E,
|
||||
|
||||
/// <summary>
|
||||
/// Info-ZIP UNIX (new)
|
||||
/// </summary>
|
||||
InfoZIPUNIXNew = 0x7855,
|
||||
|
||||
/// <summary>
|
||||
/// Info-ZIP UNIX (newer UID/GID)
|
||||
/// </summary>
|
||||
InfoZIPUNIXNewer = 0x7875,
|
||||
|
||||
/// <summary>
|
||||
/// Data Stream Alignment (Apache Commons-Compress)
|
||||
/// </summary>
|
||||
DataStreamAlignment = 0xA11E,
|
||||
|
||||
/// <summary>
|
||||
/// Microsoft Open Packaging Growth Hint
|
||||
/// </summary>
|
||||
MicrosoftOpenPackagingGrowthHint = 0xA220,
|
||||
|
||||
/// <summary>
|
||||
/// Java JAR file Extra Field Header ID
|
||||
/// </summary>
|
||||
JavaJAR = 0xCAFE,
|
||||
|
||||
/// <summary>
|
||||
/// Android ZIP Alignment Extra Field
|
||||
/// </summary>
|
||||
AndroidZIPAlignment = 0xD935,
|
||||
|
||||
/// <summary>
|
||||
/// Korean ZIP code page info
|
||||
/// </summary>
|
||||
KoreanZIPCodePage = 0xE57A,
|
||||
|
||||
/// <summary>
|
||||
/// SMS/QDOS
|
||||
/// </summary>
|
||||
SMSQDOS = 0xFD4A,
|
||||
|
||||
/// <summary>
|
||||
/// AE-x encryption structure
|
||||
/// </summary>
|
||||
AExEncryptionStructure = 0x9901,
|
||||
|
||||
/// <summary>
|
||||
/// Unknown
|
||||
/// </summary>
|
||||
Unknown = 0x9902,
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public enum HostSystem : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems)
|
||||
/// </summary>
|
||||
MSDOS = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Amiga
|
||||
/// </summary>
|
||||
Amiga = 1,
|
||||
|
||||
/// <summary>
|
||||
/// OpenVMS
|
||||
/// </summary>
|
||||
OpenVMS = 2,
|
||||
|
||||
/// <summary>
|
||||
/// UNIX
|
||||
/// </summary>
|
||||
UNIX = 3,
|
||||
|
||||
/// <summary>
|
||||
/// VM/CMS
|
||||
/// </summary>
|
||||
VMCMS = 4,
|
||||
|
||||
/// <summary>
|
||||
/// Atari ST
|
||||
/// </summary>
|
||||
AtariST = 5,
|
||||
|
||||
/// <summary>
|
||||
/// OS/2 H.P.F.S.
|
||||
/// </summary>
|
||||
OS2HPFS = 6,
|
||||
|
||||
/// <summary>
|
||||
/// Macintosh
|
||||
/// </summary>
|
||||
Macintosh = 7,
|
||||
|
||||
/// <summary>
|
||||
/// Z-System
|
||||
/// </summary>
|
||||
ZSystem = 8,
|
||||
|
||||
/// <summary>
|
||||
/// CP/M
|
||||
/// </summary>
|
||||
CPM = 9,
|
||||
|
||||
/// <summary>
|
||||
/// Windows NTFS
|
||||
/// </summary>
|
||||
WindowsNTFS = 10,
|
||||
|
||||
/// <summary>
|
||||
/// MVS (OS/390 - Z/OS)
|
||||
/// </summary>
|
||||
MVS = 11,
|
||||
|
||||
/// <summary>
|
||||
/// VSE
|
||||
/// </summary>
|
||||
VSE = 12,
|
||||
|
||||
/// <summary>
|
||||
/// Acorn Risc
|
||||
/// </summary>
|
||||
AcornRisc = 13,
|
||||
|
||||
/// <summary>
|
||||
/// VFAT
|
||||
/// </summary>
|
||||
VFAT = 14,
|
||||
|
||||
/// <summary>
|
||||
/// alternate MVS
|
||||
/// </summary>
|
||||
AlternateVMS = 15,
|
||||
|
||||
/// <summary>
|
||||
/// BeOS
|
||||
/// </summary>
|
||||
BeOS = 16,
|
||||
|
||||
/// <summary>
|
||||
/// Tandem
|
||||
/// </summary>
|
||||
Tandem = 17,
|
||||
|
||||
/// <summary>
|
||||
/// OS/400
|
||||
/// </summary>
|
||||
OS400 = 18,
|
||||
|
||||
/// <summary>
|
||||
/// OS X (Darwin)
|
||||
/// </summary>
|
||||
OSX = 19,
|
||||
|
||||
// 20 thru 255 - unused
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum InternalFileAttributes : ushort
|
||||
{
|
||||
/// <summary>
|
||||
/// Set - The file is apparently an ASCII or text file
|
||||
/// Clear - The file is apparently binary data
|
||||
/// </summary>
|
||||
ASCII = 0b0000_0000_0000_0001,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved for use by PKWARE
|
||||
/// </summary>
|
||||
Bit1 = 0b0000_0000_0000_0010,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved for use by PKWARE
|
||||
/// </summary>
|
||||
Bit2 = 0b0000_0000_0000_0100,
|
||||
|
||||
/*
|
||||
4.4.14.2 The 0x0002 bit of this field indicates, if set, that
|
||||
a 4 byte variable record length control field precedes each
|
||||
logical record indicating the length of the record. The
|
||||
record length control field is stored in little-endian byte
|
||||
order. This flag is independent of text control characters,
|
||||
and if used in conjunction with text data, includes any
|
||||
control characters in the total length of the record. This
|
||||
value is provided for mainframe data transfer support.
|
||||
*/
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
namespace SabreTools.Models.PortableExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about each item in a menu resource that does not open a menu
|
||||
/// or a submenu. The structure definition provided here is for explanation only; it
|
||||
/// is not present in any standard header file.
|
||||
///
|
||||
/// Contains information about the menu items in a menu resource that open a menu
|
||||
/// or a submenu. The structure definition provided here is for explanation only;
|
||||
/// it is not present in any standard header file.
|
||||
/// </summary>
|
||||
/// <see href="https://learn.microsoft.com/en-us/windows/win32/menurc/normalmenuitem"/>
|
||||
/// <see href="https://learn.microsoft.com/en-us/windows/win32/menurc/popupmenuitem"/>
|
||||
public sealed class MenuItem
|
||||
{
|
||||
#region NORMALMENUITEM
|
||||
|
||||
/// <summary>
|
||||
/// The type of menu item.
|
||||
/// </summary>
|
||||
public MenuFlags NormalResInfo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A null-terminated Unicode string that contains the text for this menu item.
|
||||
/// There is no fixed limit on the size of this string.
|
||||
/// </summary>
|
||||
public string? NormalMenuText { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region POPUPMENUITEM
|
||||
|
||||
/// <summary>
|
||||
/// Describes the menu item.
|
||||
/// </summary>
|
||||
public MenuFlags PopupItemType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Describes the menu item.
|
||||
/// </summary>
|
||||
public MenuFlags PopupState { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A numeric expression that identifies the menu item that is passed in the
|
||||
/// WM_COMMAND message.
|
||||
/// </summary>
|
||||
public uint PopupID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A set of bit flags that specify the type of menu item.
|
||||
/// </summary>
|
||||
public MenuFlags PopupResInfo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A null-terminated Unicode string that contains the text for this menu item.
|
||||
/// There is no fixed limit on the size of this string.
|
||||
/// </summary>
|
||||
public string? PopupMenuText { get; set; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<!-- Assembly Properties -->
|
||||
<TargetFrameworks>net20;net35;net40;net452;net462;net472;net48;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0</TargetFrameworks>
|
||||
<RuntimeIdentifiers>win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<Version>1.4.3</Version>
|
||||
<WarningsNotAsErrors>CS0618</WarningsNotAsErrors>
|
||||
|
||||
<!-- Package Properties -->
|
||||
<Authors>Matt Nadareski</Authors>
|
||||
<Description>Common models used by other SabreTools projects</Description>
|
||||
<Copyright>Copyright (c) Matt Nadareski 2022-2024</Copyright>
|
||||
<PackageProjectUrl>https://github.com/SabreTools/</PackageProjectUrl>
|
||||
<PackageReadmeFile>README.md</PackageReadmeFile>
|
||||
<RepositoryUrl>https://github.com/SabreTools/SabreTools.Models</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<PackageTags>model models executable protection archive</PackageTags>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="README.md" Pack="true" PackagePath="" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Support for old .NET versions -->
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith(`net2`)) OR $(TargetFramework.StartsWith(`net3`))">
|
||||
<PackageReference Include="MinValueTupleBridge" Version="0.2.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith(`net4`))">
|
||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Models", "SabreTools.Models.csproj", "{51F0D5D9-7C2B-445A-8ECD-4A47B33609C4}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Models", "SabreTools.Models\SabreTools.Models.csproj", "{51F0D5D9-7C2B-445A-8ECD-4A47B33609C4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
||||
@@ -6,11 +6,13 @@ namespace SabreTools.Models.BDPlus
|
||||
/// <summary>
|
||||
/// "BDSVM_CC"
|
||||
/// </summary>
|
||||
/// <remarks>8 bytes</remarks>
|
||||
public string? Signature { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 5 bytes of unknown data
|
||||
/// Unknown data
|
||||
/// </summary>
|
||||
/// <remarks>5 bytes</remarks>
|
||||
public byte[]? Unknown1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@@ -29,8 +31,9 @@ namespace SabreTools.Models.BDPlus
|
||||
public byte Day { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 4 bytes of unknown data
|
||||
/// Unknown data
|
||||
/// </summary>
|
||||
/// <remarks>4 bytes</remarks>
|
||||
public byte[]? Unknown2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@@ -14,6 +14,6 @@
|
||||
/// <summary>
|
||||
/// Files
|
||||
/// </summary>
|
||||
public FileEntry?[]? Files { get; set; }
|
||||
public FileEntry[]? Files { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ namespace SabreTools.Models.BSP
|
||||
/// <summary>
|
||||
/// Offsets
|
||||
/// </summary>
|
||||
/// <remarks>TextureCount entries</remarks>
|
||||
public uint[]? Offsets { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,7 @@ namespace SabreTools.Models.CFB
|
||||
///
|
||||
/// If Header Major Version is 4, there MUST be 1,024 fields specified to fill a 4,096-byte sector
|
||||
/// </remarks>
|
||||
public SectorNumber?[]? FATSectorNumbers { get; set; }
|
||||
public SectorNumber[]? FATSectorNumbers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The mini FAT is used to allocate space in the mini stream.
|
||||
@@ -38,7 +38,7 @@ namespace SabreTools.Models.CFB
|
||||
///
|
||||
/// If Header Major Version is 4, there MUST be 1,024 fields specified to fill a 4,096-byte sector
|
||||
/// </remarks>
|
||||
public SectorNumber?[]? MiniFATSectorNumbers { get; set; }
|
||||
public SectorNumber[]? MiniFATSectorNumbers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The DIFAT array is used to represent storage of the FAT sectors.
|
||||
@@ -55,7 +55,7 @@ namespace SabreTools.Models.CFB
|
||||
/// If Header Major Version is 4, there MUST be 1,023 fields specified
|
||||
/// to fill a 4,096-byte sector minus the "Next DIFAT Sector Location" field.
|
||||
/// </remarks>
|
||||
public SectorNumber?[]? DIFATSectorNumbers { get; set; }
|
||||
public SectorNumber[]? DIFATSectorNumbers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The directory entry array is an array of directory entries that
|
||||
@@ -87,6 +87,6 @@ namespace SabreTools.Models.CFB
|
||||
/// all zeroes. The Modified Time field in the root storage directory
|
||||
/// entry MAY be all zeroes.
|
||||
/// <remarks>
|
||||
public DirectoryEntry?[]? DirectoryEntries { get; set; }
|
||||
public DirectoryEntry[]? DirectoryEntries { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,10 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.CFB
|
||||
{
|
||||
/// <see href="https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-CFB/%5bMS-CFB%5d.pdf"/>
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||||
public sealed class DirectoryEntry
|
||||
{
|
||||
/// <summary>
|
||||
@@ -16,13 +18,15 @@ namespace SabreTools.Models.CFB
|
||||
/// The following characters are illegal and MUST NOT be part of the
|
||||
/// name: '/', '\', ':', '!'.
|
||||
/// </summary>
|
||||
public string? Name { get; set; }
|
||||
/// <remarks>64 bytes</remarks>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||||
public string? Name;
|
||||
|
||||
/// <summary>
|
||||
/// This field MUST be 0x00, 0x01, 0x02, or 0x05, depending on the
|
||||
/// actual type of object. All other values are not valid.
|
||||
/// </summary>
|
||||
public ushort NameLength { get; set; }
|
||||
public ushort NameLength;
|
||||
|
||||
/// <summary>
|
||||
/// This field MUST match the length of the Directory Entry Name Unicode
|
||||
@@ -30,31 +34,36 @@ namespace SabreTools.Models.CFB
|
||||
/// terminating null character in the count. This length MUST NOT exceed 64,
|
||||
/// the maximum size of the Directory Entry Name field.
|
||||
/// </summary>
|
||||
public ObjectType ObjectType { get; set; }
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
public ObjectType ObjectType;
|
||||
|
||||
/// <summary>
|
||||
/// This field MUST be 0x00 (red) or 0x01 (black). All other values are not valid.
|
||||
/// </summary>
|
||||
public ColorFlag ColorFlag { get; set; }
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
public ColorFlag ColorFlag;
|
||||
|
||||
/// <summary>
|
||||
/// This field contains the stream ID of the left sibling. If there
|
||||
/// is no left sibling, the field MUST be set to NOSTREAM (0xFFFFFFFF).
|
||||
/// </summary>
|
||||
public StreamID LeftSiblingID { get; set; }
|
||||
[MarshalAs(UnmanagedType.U4)]
|
||||
public StreamID LeftSiblingID;
|
||||
|
||||
/// <summary>
|
||||
/// This field contains the stream ID of the right sibling. If there
|
||||
/// is no right sibling, the field MUST be set to NOSTREAM (0xFFFFFFFF).
|
||||
/// </summary>
|
||||
public StreamID RightSiblingID { get; set; }
|
||||
[MarshalAs(UnmanagedType.U4)]
|
||||
public StreamID RightSiblingID;
|
||||
|
||||
/// <summary>
|
||||
/// This field contains the stream ID of a child object. If there is no
|
||||
/// child object, including all entries for stream objects, the field
|
||||
/// MUST be set to NOSTREAM (0xFFFFFFFF).
|
||||
/// </summary>
|
||||
public StreamID ChildID { get; set; }
|
||||
[MarshalAs(UnmanagedType.U4)]
|
||||
public StreamID ChildID;
|
||||
|
||||
/// <summary>
|
||||
/// This field contains an object class GUID, if this entry is for a
|
||||
@@ -67,7 +76,7 @@ namespace SabreTools.Models.CFB
|
||||
/// this value is not all zeroes, the object class GUID can be used as a
|
||||
/// parameter to start applications.
|
||||
/// </summary>
|
||||
public Guid CLSID { get; set; }
|
||||
public Guid CLSID;
|
||||
|
||||
/// <summary>
|
||||
/// This field contains the user-defined flags if this entry is for a storage
|
||||
@@ -78,7 +87,7 @@ namespace SabreTools.Models.CFB
|
||||
/// objects without explicitly setting state bits, it MUST write all zeroes
|
||||
/// by default.
|
||||
/// </summary>
|
||||
public uint StateBits { get; set; }
|
||||
public uint StateBits;
|
||||
|
||||
/// <summary>
|
||||
/// This field contains the creation time for a storage object, or all zeroes
|
||||
@@ -88,7 +97,7 @@ namespace SabreTools.Models.CFB
|
||||
/// object, this field MUST be all zeroes, and the creation time is retrieved
|
||||
/// or set on the compound file itself.
|
||||
/// </summary>
|
||||
public ulong CreationTime { get; set; }
|
||||
public ulong CreationTime;
|
||||
|
||||
/// <summary>
|
||||
/// This field contains the modification time for a storage object, or all
|
||||
@@ -98,7 +107,7 @@ namespace SabreTools.Models.CFB
|
||||
/// storage object, this field MAY<2> be set to all zeroes, and the modified
|
||||
/// time is retrieved or set on the compound file itself.
|
||||
/// </summary>
|
||||
public ulong ModifiedTime { get; set; }
|
||||
public ulong ModifiedTime;
|
||||
|
||||
/// <summary>
|
||||
/// This field contains the first sector location if this is a stream object.
|
||||
@@ -106,7 +115,7 @@ namespace SabreTools.Models.CFB
|
||||
/// mini stream, if the mini stream exists. For a storage object, this field MUST
|
||||
/// be set to all zeroes.
|
||||
/// </summary>
|
||||
public uint StartingSectorLocation { get; set; }
|
||||
public uint StartingSectorLocation;
|
||||
|
||||
/// <summary>
|
||||
/// This 64-bit integer field contains the size of the user-defined data if this
|
||||
@@ -128,6 +137,6 @@ namespace SabreTools.Models.CFB
|
||||
/// unless there is a specific reason to do otherwise (for example, a parser whose
|
||||
/// purpose is to verify the correctness of a compound file).
|
||||
/// </remarks>
|
||||
public ulong StreamSize { get; set; }
|
||||
public ulong StreamSize;
|
||||
}
|
||||
}
|
||||
@@ -1,38 +1,40 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.CFB
|
||||
{
|
||||
/// <see href="https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-CFB/%5bMS-CFB%5d.pdf"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class FileHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// Iddentification signature for the compound file structure, and MUST be
|
||||
/// set to the value 0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1.
|
||||
/// </summary>
|
||||
public ulong Signature { get; set; }
|
||||
public ulong Signature;
|
||||
|
||||
/// <summary>
|
||||
/// Reserved and unused class ID that MUST be set to all zeroes (CLSID_NULL)
|
||||
/// </summary>
|
||||
public Guid CLSID { get; set; }
|
||||
public Guid CLSID;
|
||||
|
||||
/// <summary>
|
||||
/// Version number for nonbreaking changes. This field SHOULD be set to
|
||||
/// 0x003E if the major version field is either 0x0003 or 0x0004.
|
||||
/// </summary>
|
||||
public ushort MinorVersion { get; set; }
|
||||
public ushort MinorVersion;
|
||||
|
||||
/// <summary>
|
||||
/// Version number for breaking changes. This field MUST be set to either
|
||||
/// 0x0003 (version 3) or 0x0004 (version 4).
|
||||
/// </summary>
|
||||
public ushort MajorVersion { get; set; }
|
||||
public ushort MajorVersion;
|
||||
|
||||
/// <summary>
|
||||
/// This field MUST be set to 0xFFFE. This field is a byte order mark for
|
||||
/// all integer fields, specifying little-endian byte order.
|
||||
/// </summary>
|
||||
public ushort ByteOrder { get; set; }
|
||||
public ushort ByteOrder;
|
||||
|
||||
/// <summary>
|
||||
/// This field MUST be set to 0x0009, or 0x000c, depending on the Major
|
||||
@@ -45,19 +47,21 @@ namespace SabreTools.Models.CFB
|
||||
/// If Major Version is 4, the Sector Shift MUST be 0x000C, specifying a
|
||||
/// sector size of 4096 bytes.
|
||||
/// </summary>
|
||||
public ushort SectorShift { get; set; }
|
||||
public ushort SectorShift;
|
||||
|
||||
/// <summary>
|
||||
/// This field MUST be set to 0x0006. This field specifies the sector size
|
||||
/// of the Mini Stream as a power of 2. The sector size of the Mini Stream
|
||||
/// MUST be 64 bytes.
|
||||
/// </summary>
|
||||
public ushort MiniSectorShift { get; set; }
|
||||
public ushort MiniSectorShift;
|
||||
|
||||
/// <summary>
|
||||
/// This field MUST be set to all zeroes.
|
||||
/// </summary>
|
||||
public byte[]? Reserved { get; set; }
|
||||
/// <remarks>6 bytes</remarks>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
|
||||
public byte[]? Reserved;
|
||||
|
||||
/// <summary>
|
||||
/// This integer field contains the count of the number of directory sectors
|
||||
@@ -66,18 +70,18 @@ namespace SabreTools.Models.CFB
|
||||
/// If Major Version is 3, the Number of Directory Sectors MUST be zero. This
|
||||
/// field is not supported for version 3 compound files.
|
||||
/// </summary>
|
||||
public uint NumberOfDirectorySectors { get; set; }
|
||||
public uint NumberOfDirectorySectors;
|
||||
|
||||
/// <summary>
|
||||
/// This integer field contains the count of the number of FAT sectors in the
|
||||
/// compound file.
|
||||
/// </summary>
|
||||
public uint NumberOfFATSectors { get; set; }
|
||||
public uint NumberOfFATSectors;
|
||||
|
||||
/// <summary>
|
||||
/// This integer field contains the starting sector number for the directory stream.
|
||||
/// </summary>
|
||||
public uint FirstDirectorySectorLocation { get; set; }
|
||||
public uint FirstDirectorySectorLocation;
|
||||
|
||||
/// <summary>
|
||||
/// This integer field MAY contain a sequence number that is incremented every time
|
||||
@@ -85,7 +89,7 @@ namespace SabreTools.Models.CFB
|
||||
/// This is the field that MUST be set to all zeroes if file transactions are not
|
||||
/// implemented.
|
||||
/// </summary>
|
||||
public uint TransactionSignatureNumber { get; set; }
|
||||
public uint TransactionSignatureNumber;
|
||||
|
||||
/// <summary>
|
||||
/// This integer field MUST be set to 0x00001000. This field specifies the maximum
|
||||
@@ -94,34 +98,36 @@ namespace SabreTools.Models.CFB
|
||||
/// greater than or equal to this cutoff size must be allocated as normal sectors from
|
||||
/// the FAT.
|
||||
/// </summary>
|
||||
public uint MiniStreamCutoffSize { get; set; }
|
||||
public uint MiniStreamCutoffSize;
|
||||
|
||||
/// <summary>
|
||||
/// This integer field contains the starting sector number for the mini FAT.
|
||||
/// </summary>
|
||||
public uint FirstMiniFATSectorLocation { get; set; }
|
||||
public uint FirstMiniFATSectorLocation;
|
||||
|
||||
/// <summary>
|
||||
/// This integer field contains the count of the number of mini FAT sectors in the
|
||||
/// compound file.
|
||||
/// </summary>
|
||||
public uint NumberOfMiniFATSectors { get; set; }
|
||||
public uint NumberOfMiniFATSectors;
|
||||
|
||||
/// <summary>
|
||||
/// This integer field contains the starting sector number for the DIFAT.
|
||||
/// </summary>
|
||||
public uint FirstDIFATSectorLocation { get; set; }
|
||||
public uint FirstDIFATSectorLocation;
|
||||
|
||||
/// <summary>
|
||||
/// This integer field contains the count of the number of DIFAT sectors in the
|
||||
/// compound file.
|
||||
/// </summary>
|
||||
public uint NumberOfDIFATSectors { get; set; }
|
||||
public uint NumberOfDIFATSectors;
|
||||
|
||||
/// <summary>
|
||||
/// This array of 32-bit integer fields contains the first 109 FAT sector
|
||||
/// locations of the compound file
|
||||
/// </summary>
|
||||
public SectorNumber?[]? DIFAT { get; set; }
|
||||
/// <remarks>109 entries</remarks>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 109)]
|
||||
public SectorNumber[]? DIFAT;
|
||||
}
|
||||
}
|
||||
@@ -75,7 +75,7 @@ namespace SabreTools.Models.CFB
|
||||
/// Properties
|
||||
/// </summary>
|
||||
/// <remarks>Each Variant might be followed by an index and offset value</remarks>
|
||||
public Variant?[]? Properties { get; set; }
|
||||
public Variant[]? Properties { get; set; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -1,28 +1,31 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.CHD
|
||||
{
|
||||
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
|
||||
public class CompressedMapEntryV5
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class CompressedMapEntryV5
|
||||
{
|
||||
/// <summary>
|
||||
/// Compression type
|
||||
/// </summary>
|
||||
public byte Compression { get; set; }
|
||||
public byte Compression;
|
||||
|
||||
/// <summary>
|
||||
/// Compressed length
|
||||
/// </summary>
|
||||
/// <remarks>Actually UInt24</remarks>
|
||||
public uint CompLength { get; set; }
|
||||
public uint CompLength;
|
||||
|
||||
/// <summary>
|
||||
/// Offset
|
||||
/// </summary>
|
||||
/// <remarks>Actually UInt48</remarks>
|
||||
public ulong Offset { get; set; }
|
||||
public ulong Offset;
|
||||
|
||||
/// <summary>
|
||||
/// CRC-16 of the data
|
||||
/// </summary>
|
||||
public ushort CRC { get; set; }
|
||||
public ushort CRC;
|
||||
}
|
||||
}
|
||||
@@ -1,42 +1,45 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.CHD
|
||||
{
|
||||
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
|
||||
public class CompressedMapHeaderV5
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class CompressedMapHeaderV5
|
||||
{
|
||||
/// <summary>
|
||||
/// Length of compressed map
|
||||
/// </summary>
|
||||
public uint Length { get; set; }
|
||||
public uint Length;
|
||||
|
||||
/// <summary>
|
||||
/// Offset of first block
|
||||
/// </summary>
|
||||
/// <remarks>Actually UInt48</remarks>
|
||||
public ulong DataStart { get; set; }
|
||||
public ulong DataStart;
|
||||
|
||||
/// <summary>
|
||||
/// CRC-16 of the map
|
||||
/// </summary>
|
||||
public ushort CRC { get; set; }
|
||||
public ushort CRC;
|
||||
|
||||
/// <summary>
|
||||
/// Bits used to encode complength
|
||||
/// </summary>
|
||||
public byte LengthBits { get; set; }
|
||||
public byte LengthBits;
|
||||
|
||||
/// <summary>
|
||||
/// Bits used to encode self-refs
|
||||
/// </summary>
|
||||
public byte HunkBits { get; set; }
|
||||
public byte HunkBits;
|
||||
|
||||
/// <summary>
|
||||
/// Bits used to encode parent unit refs
|
||||
/// </summary>
|
||||
public byte ParentUnitBits { get; set; }
|
||||
public byte ParentUnitBits;
|
||||
|
||||
/// <summary>
|
||||
/// Future use
|
||||
/// </summary>
|
||||
public byte Reserved { get; set; }
|
||||
public byte Reserved;
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,19 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.CHD
|
||||
{
|
||||
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
|
||||
public class MapV1
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class MapV1
|
||||
{
|
||||
/// <summary>
|
||||
/// Starting offset within the file
|
||||
/// </summary>
|
||||
public ulong StartingOffset { get; set; }
|
||||
public ulong StartingOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Length of data; If == hunksize, data is uncompressed
|
||||
/// </summary>
|
||||
public ulong Length { get; set; }
|
||||
public ulong Length;
|
||||
}
|
||||
}
|
||||
@@ -1,31 +1,34 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.CHD
|
||||
{
|
||||
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
|
||||
public class MapV3
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class MapV3
|
||||
{
|
||||
/// <summary>
|
||||
/// Starting offset within the file
|
||||
/// </summary>
|
||||
public ulong StartingOffset { get; set; }
|
||||
public ulong StartingOffset;
|
||||
|
||||
/// <summary>
|
||||
/// 32-bit CRC of the uncompressed data
|
||||
/// </summary>
|
||||
public uint CRC32 { get; set; }
|
||||
public uint CRC32;
|
||||
|
||||
/// <summary>
|
||||
/// Lower 16 bits of length
|
||||
/// </summary>
|
||||
public ushort LengthLo { get; set; }
|
||||
public ushort LengthLo;
|
||||
|
||||
/// <summary>
|
||||
/// Upper 8 bits of length
|
||||
/// </summary>
|
||||
public byte LengthHi { get; set; }
|
||||
public byte LengthHi;
|
||||
|
||||
/// <summary>
|
||||
/// Flags, indicating compression info
|
||||
/// </summary>
|
||||
public byte Flags { get; set; }
|
||||
public byte Flags;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,14 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.CHD
|
||||
{
|
||||
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public class UncompressedMapV5
|
||||
{
|
||||
/// <summary>
|
||||
/// Starting offset / hunk size
|
||||
/// </summary>
|
||||
public uint StartingOffset { get; set; }
|
||||
public uint StartingOffset;
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ namespace SabreTools.Models.Charts
|
||||
{
|
||||
/// <see href="https://github.com/TheNathannator/GuitarGame_ChartFormats/tree/main/doc/FileFormats/song.ini"/>
|
||||
/// <remarks>[song]/[Song]</remarks>
|
||||
internal class SongIni
|
||||
public class SongIni
|
||||
{
|
||||
#region Song/Chart Metadata
|
||||
|
||||
16
SabreTools.Models/Charts/Tier.cs
Normal file
16
SabreTools.Models/Charts/Tier.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace SabreTools.Models.Charts
|
||||
{
|
||||
/// <see href="https://github.com/TheNathannator/GuitarGame_ChartFormats/blob/main/doc/FileFormats/Other/Frets%20on%20Fire%20X/Careers.md"/>
|
||||
public class Tier
|
||||
{
|
||||
/// <summary>
|
||||
/// Display name of the tier.
|
||||
/// </summary>
|
||||
public string? Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Name used for associating a song with this tier, and for checking unlock requirements.
|
||||
/// </summary>
|
||||
public string? UnlockId { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SabreTools.Models.Charts
|
||||
{
|
||||
/// <see href="https://github.com/TheNathannator/GuitarGame_ChartFormats/blob/main/doc/FileFormats/Other/Frets%20on%20Fire%20X/Careers.md"/>
|
||||
/// <remarks>[titles]</remarks>
|
||||
internal class TitlesIni
|
||||
public class TitlesIni
|
||||
{
|
||||
/// <summary>
|
||||
/// A space-separated list of .ini sections to include in the career.
|
||||
@@ -13,9 +11,8 @@ namespace SabreTools.Models.Charts
|
||||
public string[]? SectionList { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// `name` - Display name of the tier.
|
||||
/// `unlock_id` - Name used for associating a song with this tier, and for checking unlock requirements.
|
||||
/// This entry points to other sections that should be used as part of the career.
|
||||
/// </summary>
|
||||
public Dictionary<string, (string? Name, string? UnlockId)>? Sections { get; set; }
|
||||
public Tier[]? Sections { get; set; }
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user