mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-10 12:07:08 -06:00
215 lines
4.0 KiB
C++
Executable File
215 lines
4.0 KiB
C++
Executable File
// Archive::Rar::Header.h
|
|
|
|
#pragma once
|
|
|
|
#ifndef __ARCHIVE_RAR_HEADER_H
|
|
#define __ARCHIVE_RAR_HEADER_H
|
|
|
|
#include "Common/Types.h"
|
|
|
|
#pragma pack(push, PragmaRarHeaders)
|
|
#pragma pack(push, 1)
|
|
|
|
namespace NArchive{
|
|
namespace NRar{
|
|
namespace NHeader{
|
|
|
|
const int kMarkerSize = 7;
|
|
extern BYTE kMarker[kMarkerSize];
|
|
|
|
const int kArchiveSolid = 0x1;
|
|
|
|
namespace NBlockType
|
|
{
|
|
enum EBlockType
|
|
{
|
|
kMarker = 0x72,
|
|
kArchiveHeader = 0x73,
|
|
kFileHeader = 0x74,
|
|
kCommentHeader = 0x75,
|
|
kOldAuthenticity = 0x76,
|
|
kSubBlock = 0x77,
|
|
kRecoveryRecord = 0x78,
|
|
kAuthenticity = 0x79,
|
|
|
|
kEndOfArchive = 0x7B // Is not safe
|
|
};
|
|
}
|
|
|
|
namespace NArchive
|
|
{
|
|
const UINT16 kVolume = 1;
|
|
const UINT16 kComment = 2;
|
|
const UINT16 kLock = 4;
|
|
const UINT16 kSolid = 8;
|
|
const UINT16 kNewVolName = 0x10; // ('volname.partN.rar')
|
|
const UINT16 kAuthenticity = 0x20;
|
|
const UINT16 kRecovery = 0x40;
|
|
const UINT16 kBlockEncryption = 0x80;
|
|
const UINT16 kFirstVolume = 0x100; // (set only by RAR 3.0 and later)
|
|
|
|
struct CBlock
|
|
{
|
|
UINT16 CRC;
|
|
BYTE Type;
|
|
UINT16 Flags;
|
|
UINT16 Size;
|
|
UINT16 Reserved1;
|
|
UINT32 Reserved2;
|
|
UINT16 GetRealCRC() const;
|
|
};
|
|
|
|
const int kBlockHeadersAreEncrypted = 0x80;
|
|
}
|
|
|
|
namespace NFile
|
|
{
|
|
const int kSplitBefore = 1 << 0;
|
|
const int kSplitAfter = 1 << 1;
|
|
const int kEncrypted = 1 << 2;
|
|
const int kComment = 1 << 3;
|
|
const int kSolid = 1 << 4;
|
|
|
|
const int kDictBitStart = 5;
|
|
const int kNumDictBits = 3;
|
|
const int kDictMask = (1 << kNumDictBits) - 1;
|
|
const int kDictDirectoryValue = 0x7;
|
|
|
|
const int kSize64Bits = 1 << 8;
|
|
const int kUnicodeName = 1 << 9;
|
|
const int kSalt = 1 << 10;
|
|
const int kOldVersion = 1 << 11;
|
|
const int kExtTime = 1 << 12;
|
|
// const int kExtFlags = 1 << 13;
|
|
// const int kSkipIfUnknown = 1 << 14;
|
|
|
|
const int kLongBlock = 1 << 15;
|
|
|
|
struct CBlock
|
|
{
|
|
// UINT16 HeadCRC;
|
|
// BYTE Type;
|
|
// UINT16 Flags;
|
|
// UINT16 HeadSize;
|
|
UINT32 PackSize;
|
|
UINT32 UnPackSize;
|
|
BYTE HostOS;
|
|
UINT32 FileCRC;
|
|
UINT32 Time;
|
|
BYTE UnPackVersion;
|
|
BYTE Method;
|
|
UINT16 NameSize;
|
|
UINT32 Attributes;
|
|
};
|
|
|
|
/*
|
|
struct CBlock32
|
|
{
|
|
UINT16 HeadCRC;
|
|
BYTE Type;
|
|
UINT16 Flags;
|
|
UINT16 HeadSize;
|
|
UINT32 PackSize;
|
|
UINT32 UnPackSize;
|
|
BYTE HostOS;
|
|
UINT32 FileCRC;
|
|
UINT32 Time;
|
|
BYTE UnPackVersion;
|
|
BYTE Method;
|
|
UINT16 NameSize;
|
|
UINT32 Attributes;
|
|
UINT16 GetRealCRC(const void *aName, UINT32 aNameSize,
|
|
bool anExtraDataDefined = false, BYTE *anExtraData = 0) const;
|
|
};
|
|
struct CBlock64
|
|
{
|
|
UINT16 HeadCRC;
|
|
BYTE Type;
|
|
UINT16 Flags;
|
|
UINT16 HeadSize;
|
|
UINT32 PackSizeLow;
|
|
UINT32 UnPackSizeLow;
|
|
BYTE HostOS;
|
|
UINT32 FileCRC;
|
|
UINT32 Time;
|
|
BYTE UnPackVersion;
|
|
BYTE Method;
|
|
UINT16 NameSize;
|
|
UINT32 Attributes;
|
|
UINT32 PackSizeHigh;
|
|
UINT32 UnPackSizeHigh;
|
|
UINT16 GetRealCRC(const void *aName, UINT32 aNameSize) const;
|
|
};
|
|
*/
|
|
|
|
const int kLabelFileAttribute = 0x08;
|
|
const int kWinFileDirectoryAttributeMask = 0x10;
|
|
|
|
enum CHostOS
|
|
{
|
|
kHostMSDOS = 0,
|
|
kHostOS2 = 1,
|
|
kHostWin32 = 2,
|
|
kHostUnix = 3,
|
|
kHostMacOS = 4,
|
|
kHostBeOS = 5
|
|
};
|
|
}
|
|
|
|
namespace NBlock
|
|
{
|
|
const UINT16 kLongBlock = 1 << 15;
|
|
struct CBlock
|
|
{
|
|
UINT16 CRC;
|
|
BYTE Type;
|
|
UINT16 Flags;
|
|
UINT16 HeadSize;
|
|
// UINT32 DataSize;
|
|
};
|
|
}
|
|
|
|
struct CSubBlock
|
|
{
|
|
UINT16 HeadCRC;
|
|
BYTE HeadType;
|
|
UINT16 Flags;
|
|
UINT16 HeadSize;
|
|
UINT32 DataSize;
|
|
UINT16 SubType;
|
|
BYTE Level; // Reserved : Must be 0
|
|
};
|
|
|
|
struct CCommentBlock
|
|
{
|
|
UINT16 HeadCRC;
|
|
BYTE HeadType;
|
|
UINT16 Flags;
|
|
UINT16 HeadSize;
|
|
UINT16 UnpSize;
|
|
BYTE UnpVer;
|
|
BYTE Method;
|
|
UINT16 CommCRC;
|
|
};
|
|
|
|
|
|
struct CProtectHeader
|
|
{
|
|
UINT16 HeadCRC;
|
|
BYTE HeadType;
|
|
UINT16 Flags;
|
|
UINT16 HeadSize;
|
|
UINT32 DataSize;
|
|
BYTE Version;
|
|
UINT16 RecSectors;
|
|
UINT32 TotalBlocks;
|
|
BYTE Mark[8];
|
|
};
|
|
|
|
}}}
|
|
|
|
#pragma pack(pop)
|
|
#pragma pack(pop, PragmaRarHeaders)
|
|
|
|
#endif
|