⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rarheader.h

📁 7-Zip 3.11的源码
💻 H
字号:
// 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -