mirror of
https://github.com/reactos/reactos.git
synced 2024-09-06 10:52:52 +00:00
354 lines
10 KiB
C
354 lines
10 KiB
C
////////////////////////////////////////////////////////////////////
|
|
// Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
|
|
// All rights reserved
|
|
// This file was released under the GPLv2 on June 2015.
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _OSTA_MISC_H_
|
|
#define _OSTA_MISC_H_
|
|
|
|
/* based on ECMA 167 structure definitions */
|
|
#include "ecma_167.h"
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
/* -------- Basic types and constants ----------- */
|
|
/* UDF character set (UDF 1.50 2.1.2) */
|
|
#define UDF_CHAR_SET_TYPE 0
|
|
#define UDF_CHAR_SET_INFO "OSTA Compressed Unicode"
|
|
|
|
#define UDF_ID_DEVELOPER ("*WINNT " VER_STR_PRODUCT_NAME " UDF")
|
|
|
|
#define UDF_ID_DEVELOPER_ADAPTEC "*Adaptec DirectCD"
|
|
|
|
/* UDF 1.02 2.2.6.4 */
|
|
struct LogicalVolIntegrityDescImpUse
|
|
{
|
|
EntityID impIdent;
|
|
uint32 numFiles;
|
|
uint32 numDirs;
|
|
uint16 minUDFReadRev;
|
|
uint16 minUDFWriteRev;
|
|
uint16 maxUDFWriteRev;
|
|
};
|
|
|
|
/* UDF 1.02 2.2.7.2 */
|
|
/* LVInformation may be present in ImpUseVolDesc.impUse */
|
|
struct ImpUseVolDescImpUse
|
|
{
|
|
charspec LVICharset;
|
|
dstring logicalVolIdent[128];
|
|
dstring LVInfo1[36];
|
|
dstring LVInfo2[36];
|
|
dstring LVInfo3[36];
|
|
EntityID impIdent;
|
|
uint8 impUse[128];
|
|
};
|
|
|
|
struct UdfPartitionMap2
|
|
{
|
|
uint8 partitionMapType;
|
|
uint8 partitionMapLength;
|
|
uint8 reserved1[2];
|
|
EntityID partIdent;
|
|
uint16 volSeqNum;
|
|
uint16 partitionNum;
|
|
uint8 reserved2[24];
|
|
};
|
|
|
|
/* UDF 1.5 2.2.8 */
|
|
struct VirtualPartitionMap
|
|
{
|
|
uint8 partitionMapType; /* 2 */
|
|
uint8 partitionMapLength; /* 64 */
|
|
uint8 reserved1[2]; /* #00 */
|
|
EntityID partIdent;
|
|
uint16 volSeqNum;
|
|
uint16 partitionNum;
|
|
uint8 reserved2[24]; /* #00 */
|
|
};
|
|
|
|
#define UDF_VAT_FREE_ENTRY 0xffffffff
|
|
|
|
/* UDF 1.5 2.2.9 */
|
|
typedef struct _SPARABLE_PARTITION_MAP
|
|
{
|
|
uint8 partitionMapType; /* 2 */
|
|
uint8 partitionMapLength; /* 64 */
|
|
uint8 reserved1[2]; /* #00 */
|
|
EntityID partIdent; /* Flags = 0 */
|
|
/* Id = UDF_ID_SPARABLE */
|
|
/* IdSuf = 2.1.5.3 */
|
|
uint16 volSeqNum;
|
|
uint16 partitionNum;
|
|
uint16 packetLength; /* 32 */
|
|
uint8 numSparingTables;
|
|
uint8 reserved2[1]; /* #00 */
|
|
uint32 sizeSparingTable;
|
|
// uint32 locSparingTable[0];
|
|
// uint8 pad[0];
|
|
} SPARABLE_PARTITION_MAP, *PSPARABLE_PARTITION_MAP;
|
|
|
|
#define UDF_TYPE1_MAP15 0x1511U
|
|
#define UDF_VIRTUAL_MAP15 0x1512U
|
|
#define UDF_VIRTUAL_MAP20 0x2012U
|
|
#define UDF_SPARABLE_MAP15 0x1522U
|
|
#define UDF_METADATA_MAP25 0x2522U
|
|
|
|
#ifndef PACKETSIZE_UDF
|
|
#define PACKETSIZE_UDF 32
|
|
#endif //PACKETSIZE_UDF
|
|
|
|
/* UDF 2.5 */
|
|
typedef struct _METADATA_PARTITION_MAP
|
|
{
|
|
uint8 partitionMapType; /* 2 */
|
|
uint8 partitionMapLength; /* 64 */
|
|
uint8 reserved1[2]; /* #00 */
|
|
EntityID partIdent; /* Flags = 0 */
|
|
/* Id = UDF_ID_METADATA */
|
|
/* IdSuf = 2.1.5.3 */
|
|
uint16 volSeqNum;
|
|
uint16 partitionNum;
|
|
uint32 metadataFELocation;
|
|
uint32 metadataMirrorFELocation;
|
|
uint32 metadataBitmapFELocation;
|
|
uint32 allocationUnit; /* blocks */
|
|
uint16 alignmentUnit; /* blocks */
|
|
uint8 flags;
|
|
uint8 pad[5];
|
|
} METADATA_PARTITION_MAP, *PMETADATA_PARTITION_MAP;
|
|
|
|
#define UDF_METADATA_DUPLICATED 0x01U
|
|
|
|
/* DVD Copyright Management Info, see UDF 1.02 3.3.4.5.1.2 */
|
|
/* when ImpUseExtendedAttr.impIdent= "*UDF DVD CGMS Info" */
|
|
struct DVDCopyrightImpUse {
|
|
uint16 headerChecksum;
|
|
uint8 CGMSInfo;
|
|
uint8 dataType;
|
|
uint8 protectionSystemInfo[4];
|
|
};
|
|
|
|
/* the impUse of long_ad used in AllocDescs - UDF 1.02 2.3.10.1 */
|
|
struct ADImpUse
|
|
{
|
|
uint16 flags;
|
|
uint8 impUse[4];
|
|
};
|
|
|
|
/* the impUse of long_ad used in AllocDescs - UDF 1.02 2.3.10.1 */
|
|
struct FidADImpUse
|
|
{
|
|
uint8 reserved[2];
|
|
uint32 uniqueID;
|
|
};
|
|
|
|
/* UDF 1.02 2.3.10.1 */
|
|
#define UDF_EXTENT_LENGTH_MASK 0x3FFFFFFF
|
|
#define UDF_EXTENT_FLAG_MASK 0xc0000000
|
|
#define UDF_EXTENT_FLAG_ERASED 0x40000000
|
|
|
|
/*
|
|
* Important! VirtualAllocationTables are
|
|
* very different between 1.5 and 2.0!
|
|
*/
|
|
|
|
/* ----------- 1.5 ------------- */
|
|
/* UDF 1.5 2.2.10 */
|
|
#define UDF_FILE_TYPE_VAT15 0x0U
|
|
|
|
/* UDF 1.5 2.2.10 - VAT layout: */
|
|
struct VirtualAllocationTable15 {
|
|
/* uint32 VirtualSector[0];*/
|
|
EntityID ident;
|
|
uint32 previousVATICB;
|
|
};
|
|
/* where number of VirtualSector's is (VATSize-36)/4 */
|
|
|
|
/* ----------- 2.0 ------------- */
|
|
/* UDF 2.0 2.2.10 */
|
|
#define UDF_FILE_TYPE_VAT20 0xf8U
|
|
|
|
/* UDF 2.0 2.2.10 (different from 1.5!) */
|
|
struct VirtualAllocationTable20 {
|
|
uint16 lengthHeader;
|
|
uint16 lengthImpUse;
|
|
dstring logicalVolIdent[128];
|
|
uint32 previousVatICBLoc;
|
|
uint32 numFIDSFiles;
|
|
uint32 numFIDSDirectories; /* non-parent */
|
|
uint16 minReadRevision;
|
|
uint16 minWriteRevision;
|
|
uint16 maxWriteRevision;
|
|
uint16 reserved;
|
|
/* uint8 impUse[0];*/
|
|
/* uint32 vatEntry[0];*/
|
|
};
|
|
|
|
/* Sparing maps, see UDF 1.5 2.2.11 */
|
|
typedef struct _SparingEntry {
|
|
uint32 origLocation;
|
|
uint32 mappedLocation;
|
|
} SparingEntry;
|
|
|
|
#define SPARING_LOC_AVAILABLE 0xffffffff
|
|
#define SPARING_LOC_CORRUPTED 0xfffffff0
|
|
|
|
typedef SparingEntry SPARING_ENTRY;
|
|
typedef SPARING_ENTRY* PSPARING_ENTRY;
|
|
|
|
typedef SPARING_ENTRY SPARING_MAP;
|
|
typedef PSPARING_ENTRY PSPARING_MAP;
|
|
|
|
/* sparing maps, see UDF 2.0 2.2.11 */
|
|
typedef struct _SPARING_TABLE {
|
|
tag descTag;
|
|
EntityID sparingIdent; /* *UDF Sparing Table */
|
|
uint16 reallocationTableLen;
|
|
uint16 reserved; /* #00 */
|
|
uint32 sequenceNum;
|
|
// SparingEntry mapEntry[0];
|
|
} SPARING_TABLE, *PSPARING_TABLE;
|
|
|
|
/* Identifier Suffixes, see EntityID */
|
|
|
|
typedef struct {
|
|
uint16 currentRev;
|
|
uint8 flags;
|
|
uint8 reserved[5];
|
|
} domainIdentSuffix;
|
|
|
|
#define ENTITYID_FLAGS_HARD_RO 0x01U
|
|
#define ENTITYID_FLAGS_SOFT_RO 0x02U
|
|
|
|
typedef struct {
|
|
uint16 currentRev;
|
|
uint8 OSClass;
|
|
uint8 OSIdent;
|
|
uint8 reserved[4];
|
|
} UDFIdentSuffix;
|
|
|
|
typedef struct {
|
|
uint8 OSClass;
|
|
uint8 OSIdent;
|
|
uint8 reserved[6];
|
|
} impIdentSuffix;
|
|
|
|
/* Unique ID maps, see UDF 2.0 2.2.11 */
|
|
|
|
typedef struct {
|
|
uint32 uniqueID;
|
|
uint32 parentLogicalBlock;
|
|
uint32 objectLogicalBlock;
|
|
uint16 parentPartitionReferenceNum;
|
|
uint16 objectPartitionReferenceNum;
|
|
} UniqueIDEntry;
|
|
|
|
typedef UniqueIDEntry UID_MAPPING_ENTRY;
|
|
typedef UID_MAPPING_ENTRY* PUID_MAPPING_ENTRY;
|
|
|
|
typedef struct {
|
|
EntityID ident;
|
|
uint32 flags;
|
|
uint32 entryCount;
|
|
uint8 reserved[8];
|
|
// UniqueIDEntry mapEntry[0];
|
|
} UniqueIDMappingData;
|
|
|
|
typedef UniqueIDMappingData UID_MAPPING_TABLE;
|
|
typedef UID_MAPPING_TABLE* PUID_MAPPING_TABLE;
|
|
|
|
/* Entity Identifiers (UDF 1.50 6.1) */
|
|
#define UDF_ID_COMPLIANT "*OSTA UDF Compliant"
|
|
#define UDF_ID_LV_INFO "*UDF LV Info"
|
|
#define UDF_ID_FREE_EA "*UDF FreeEASpace"
|
|
#define UDF_ID_FREE_APP_EA "*UDF FreeAppEASpace"
|
|
#define UDF_ID_DVD_CGMS "*UDF DVD CGMS Info"
|
|
#define UDF_ID_OS2_EA "*UDF OS/2 EA"
|
|
#define UDF_ID_OS2_EA_LENGTH "*UDF OS/2 EALength"
|
|
#define UDF_ID_OS400_DIRINFO "*UDF OS/400 DirInfo"
|
|
#define UDF_ID_MAC_VOLUME "*UDF Mac VolumeInfo"
|
|
#define UDF_ID_MAC_FINDER "*UDF Mac FinderInfo"
|
|
#define UDF_ID_MAC_UNIQUE "*UDF Mac UniqueIDTable"
|
|
#define UDF_ID_MAC_RESOURCE "*UDF Mac ResourceFork"
|
|
#define UDF_ID_VIRTUAL "*UDF Virtual Partition"
|
|
#define UDF_ID_SPARABLE "*UDF Sparable Partition"
|
|
#define UDF_ID_METADATA "*UDF Metadata Partition"
|
|
#define UDF_ID_ALLOC "*UDF Virtual Alloc Tbl"
|
|
#define UDF_ID_SPARING "*UDF Sparing Table"
|
|
|
|
/* Operating System Identifiers (UDF 1.50 6.3) */
|
|
#define UDF_OS_CLASS_UNDEF 0x00U
|
|
#define UDF_OS_CLASS_DOS 0x01U
|
|
#define UDF_OS_CLASS_OS2 0x02U
|
|
#define UDF_OS_CLASS_MAC 0x03U
|
|
#define UDF_OS_CLASS_UNIX 0x04U
|
|
#define UDF_OS_CLASS_WIN95 0x05U
|
|
#define UDF_OS_CLASS_WINNT 0x06U
|
|
#define UDF_OS_CLASS_OS400 0x07U
|
|
#define UDF_OS_CLASS_BEOS 0x08U
|
|
#define UDF_OS_CLASS_WINCE 0x09U
|
|
|
|
#define UDF_OS_ID_GENERIC 0x00U
|
|
#define UDF_OS_ID_UNDEF 0x00U
|
|
#define UDF_OS_ID_DOS 0x00U
|
|
#define UDF_OS_ID_OS2 0x00U
|
|
#define UDF_OS_ID_MAC 0x00U
|
|
#define UDF_OS_ID_UNIX 0x00U
|
|
#define UDF_OS_ID_WIN95 0x00U
|
|
#define UDF_OS_ID_WINNT 0x00U
|
|
#define UDF_OS_ID_OS400 0x00U
|
|
#define UDF_OS_ID_BEOS 0x00U
|
|
|
|
#define UDF_OS_ID_AIX 0x01U
|
|
#define UDF_OS_ID_SOLARIS 0x02U
|
|
#define UDF_OS_ID_HPUX 0x03U
|
|
#define UDF_OS_ID_IRIX 0x04U
|
|
#define UDF_OS_ID_LINUX 0x05U
|
|
#define UDF_OS_ID_MKLINUX 0x06U
|
|
#define UDF_OS_ID_FREEBSD 0x07U
|
|
#define UDF_OS_ID_NETBSD 0x08U
|
|
|
|
#define UDF_NAME_PAD 4
|
|
#define UDF_NAME_LEN 255
|
|
#define UDF_EXT_SIZE 5 // ???
|
|
#define UDF_PATH_LEN 1023
|
|
#define UDF_VOL_LABEL_LEN 32
|
|
|
|
/* Reserved file names */
|
|
|
|
#define UDF_FN_NON_ALLOCATABLE L"Non-Allocatable Space"
|
|
#define UDF_FN_NON_ALLOCATABLE_2 L"Non-Allocatable List"
|
|
|
|
#define UDF_FN_NON_ALLOCATABLE_USER "Non-Allocatable Space"
|
|
#define UDF_FN_NON_ALLOCATABLE_2_USER "Non-Allocatable List"
|
|
|
|
/* Reserved system stream names */
|
|
/* METADATA bit shall be set to 1 */
|
|
|
|
#define UDF_SN_UID_MAPPING L"*UDF Unique ID Mapping Data"
|
|
#define UDF_SN_NON_ALLOCATABLE L"*UDF Non-Allocatable Space"
|
|
#define UDF_SN_POWER_CAL_TABLE L"*UDF Power Cal Table"
|
|
#define UDF_SN_BACKUP L"*UDF Backup"
|
|
|
|
/* Reserved non-system stream names */
|
|
/* METADATA bit shall be set to 0 */
|
|
|
|
#define UDF_SN_MAC_RESOURCE_FORK L"*UDF Macintosh Resource Fork"
|
|
#define UDF_SN_OS2_EA L"*UDF OS/2 EA"
|
|
#define UDF_SN_NT_ACL L"*UDF NT ACL"
|
|
#define UDF_SN_UNIX_ACL L"*UDF UNIX ACL"
|
|
|
|
#define UDF_RESERVED_NAME_HDR L"*UDF "
|
|
|
|
/* ----------- 2.01 ------------ */
|
|
/* UDF 2.0 2.2.10 */
|
|
#define UDF_FILE_TYPE_REALTIME 0xf9U
|
|
|
|
#define TID_ADAPTEC_LOGICAL_VOL_DESC 0x9999U
|
|
|
|
#pragma pack(pop)
|
|
|
|
#endif /* _OSTA_MISC_H */
|