📄 iso13346.h
字号:
* nsr_pvd_destag.destag_Ident = DESTAG_ID_NSR_PVD
*
*/
typedef struct NSR_PVD {
DESTAG Destag; // Descriptor Tag (NSR_PVD)
ULONG VolDescSeqNum; // Volume Descriptor Sequence Number
ULONG Number; // Primary Volume Descriptor Number
UCHAR VolumeID[32]; // Volume Identifier
USHORT VolSetSeq; // Volume Set Sequence Number
USHORT VolSetSeqMax; // Maximum Volume Set Sequence Number
USHORT Level; // Interchange Level
USHORT LevelMax; // Maximum Interchange Level
ULONG CharSetList; // Character Set List (See 1/7.2.11)
ULONG CharSetListMax; // Maximum Character Set List
UCHAR VolSetID[128]; // Volume Set Identifier
CHARSPEC CharsetDesc; // Descriptor Character Set
CHARSPEC CharsetExplan; // Explanatory Character Set
EXTENTAD Abstract; // Volume Abstract Location
EXTENTAD Copyright; // Volume Copyright Notice Location
REGID Application; // Application Identifier
TIMESTAMP RecordTime; // Recording Time
REGID ImpUseID; // Implementation Identifier
UCHAR ImpUse[64]; // Implementation Use
ULONG Predecessor; // Predecessor Vol Desc Seq Location
USHORT Flags; // Flags
UCHAR Res490[22]; // Reserved Zeros
} NSR_PVD, *PNSR_PVD;
// NSRPVD_F_... - Definitions for nsr_pvd_Flags
#define NSRPVD_F_COMMON_VOLID (0x0001)// Volume ID is common across Vol Set
/*** nsr_anchor - Anchor Volume Descriptor Pointer (3/10.2)
*
* nsr_anchor_destag.destag_Ident = DESTAG_ID_NSR_ANCHOR
*
*/
typedef struct NSR_ANCHOR {
DESTAG Destag; // Descriptor Tag (NSR_ANCHOR)
EXTENTAD Main; // Main Vol Desc Sequence Location
EXTENTAD Reserve; // Reserve Vol Desc Sequence Location
UCHAR Res32[480]; // Reserved Zeros
} NSR_ANCHOR, *PNSR_ANCHOR;
/*** nsr_vdp - Volume Descriptor Pointer (3/10.3)
*
* nsr_vdp_destag.destag_Ident = DESTAG_ID_NSR_VDP
*
*/
typedef struct NSR_VDP {
DESTAG Destag; // Descriptor Tag (NSR_VDP)
ULONG VolDescSeqNum; // Vol Desc Sequence Number
EXTENTAD Next; // Next Vol Desc Sequence Location
UCHAR Res28[484]; // Reserved Zeros
} NSR_VDP, *PNSR_VDP;
/*** nsr_impuse - Implementation Use Volume Descriptor (3/10.4)
*
* nsr_impuse_destag.destag_Ident = DESTAG_ID_NSR_IMPUSE
*
*/
typedef struct NSR_IMPUSE {
DESTAG Destag; // Descriptor Tag (NSR_IMPUSE)
ULONG VolDescSeqNum; // Vol Desc Sequence Number
REGID ImpUseID; // Implementation Identifier
UCHAR ImpUse[460]; // Implementation Use
} NSR_IMPUSE, *PNSR_IMPUSE;
/*** nsr_part - Partition Descriptor (3/10.5)
*
* nsr_part_destag.destag_Ident = DESTAG_ID_NSR_PART
*
*/
typedef struct NSR_PART {
DESTAG Destag; // Descriptor Tag (NSR_PART)
ULONG VolDescSeqNum; // Vol Desc Sequence Number
USHORT Flags; // Partition Flags (NSR_PART_F_...)
USHORT Number; // Partition Number
REGID ContentsID; // Partition Contents ID
UCHAR ContentsUse[128]; // Partition Contents Use
ULONG AccessType; // Access Type
ULONG Start; // Partition Starting Location
ULONG Length; // Partition Length (sector count)
REGID ImpUseID; // Implementation Identifier
UCHAR ImpUse[128]; // Implementation Use
UCHAR Res356[156]; // Reserved Zeros
} NSR_PART, *PNSR_PART;
// NSR_PART_F_... - Definitions for nsr_part_Flags
#define NSR_PART_F_ALLOCATION (0x0001) // Volume Space Allocated
// Values for nsr_part_ContentsID.regid_Identifier
#define NSR_PART_CONTID_FDC01 "+FDC01" // ISO 9293-1987
#define NSR_PART_CONTID_CD001 "+CD001" // ISO 9660
#define NSR_PART_CONTID_CDW01 "+CDW01" // ECMA 168
#define NSR_PART_CONTID_CDW02 "+CDW02" // ISO 13490
#define NSR_PART_CONTID_NSR01 "+NSR01" // ECMA 167
#define NSR_PART_CONTID_NSR02 "+NSR02" // ISO 13346
typedef enum NSR_PART_CONTID {
NsrPartContIdBad = 0,
NsrPartContIdFDC01,
NsrPartContIdCD001,
NsrPartContIdCDW01,
NsrPartContIdCDW02,
NsrPartContIdNSR01,
NsrPartContIdNSR02
} NSR_PART_CONTID, *PNSR_PART_CONTID;
// Values for nsr_part_AccessType
#define NSR_PART_ACCESS_NOSPEC 0 // Partition Access Unspecified
#define NSR_PART_ACCESS_RO 1 // Read Only Access
#define NSR_PART_ACCESS_WO 2 // Write-Once Access
#define NSR_PART_ACCESS_RW_PRE 3 // Read/Write with preparation
#define NSR_PART_ACCESS_RW_OVER 4 // Read/Write, fully overwritable
/*** nsr_lvol - Logical Volume Descriptor (3/10.6)
*
* nsr_lvol_destag.destag_Ident = DESTAG_ID_NSR_LVOL
*
* The Logical Volume Contents Use field is specified here as a
* File Set Descriptor Sequence (FSD) address. See (4/3.1).
*
*/
typedef struct NSR_LVOL {
DESTAG Destag; // Descriptor Tag (NSR_LVOL)
ULONG VolDescSeqNum; // Vol Desc Sequence Number
CHARSPEC Charset; // Descriptor Character Set
UCHAR VolumeID[128]; // Logical Volume ID
ULONG BlockSize; // Logical Block Size (in bytes)
REGID DomainID; // Domain Identifier
LONGAD FSD; // Logical Volume Contents Use
ULONG MapTableLength; // Map Table Length (bytes)
ULONG MapTableCount; // Map Table Partition Maps Count
REGID ImpUseID; // Implementaion Identifier
UCHAR ImpUse[128]; // Implementation Use
EXTENTAD Integrity; // Integrity Sequence Extent
UCHAR MapTable[0]; // Partition Map Table (variant!)
// The true length of this structure may vary!
} NSR_LVOL, *PNSR_LVOL;
#define ISONsrLvolConstantSize (FIELD_OFFSET( NSR_LVOL, MapTable ))
#define ISONsrLvolSize( L ) (QuadAlign( ISONsrLvolConstantSize + (L)->MapTableLength ))
/*** partmap_generic - Generic Partition Map (3/10.7.1)
*
*/
typedef struct PARTMAP_GENERIC {
UCHAR Type; // Partition Map Type
UCHAR Length; // Partition Map Length
UCHAR Map[0]; // Partion Mapping (variant!)
// The true length of this structure may vary!
} PARTMAP_GENERIC, *PPARTMAP_GENERIC;
// Values for partmap_g_Type
#define PARTMAP_TYPE_NOTSPEC 0 // Partition Map Format Not Specified
#define PARTMAP_TYPE_PHYSICAL 1 // Partition Map in Volume Set (Type 1)
#define PARTMAP_TYPE_PROXY 2 // Partition Map by identifier (Type 2)
/*** partmap_physical - Normal (Type 1) Partition Map (3/10.7.2)
*
* A Normal Partion Map specifies a partition number on a volume
* within the same volume set.
*
*/
typedef struct PARTMAP_PHYSICAL {
UCHAR Type; // Partition Map Type = 1
UCHAR Length; // Partition Map Length = 6
USHORT VolSetSeq; // Partition Volume Set Sequence Number
USHORT Partition; // Partition Number
} PARTMAP_PHYSICAL, *PPARTMAP_PHYSICAL;
/*** partmap_proxy - Proxy (Type 2) Partition Map (3/10.7.3)
*
* A Proxy Partition Map is commonly not interchangeable.
*
*/
typedef struct PARTMAP_PROXY {
UCHAR Type; // Partition Map Type = 2
UCHAR Length; // Partition Map Length = 64
UCHAR PartID[62]; // Partition Identifier (Proxy)
} PARTMAP_PROXY, *PPARTMAP_PROXY;
/*** nsr_uasd - Unallocated Space Descriptor (3/10.8)
*
* nsr_uasd_destag.destag_Ident = DESTAG_ID_NSR_UASD
*
* The true length of nsr_uasd_Extents is (nsr_uasd_ExtentCount * 8), and
* the last logical sector of nsr_uasd_Extents is zero padded.
*
*/
typedef struct NSR_UASD {
DESTAG Destag; // Descriptor Tag (NSR_UASD)
ULONG VolDescSeqNum; // Vol Desc Sequence Number
ULONG ExtentCount; // Number of Allocation Descriptors
EXTENTAD Extents[0]; // Allocation Descriptors (variant!)
// The true length of this structure may vary!
// The true length of nsr_uasd_Extents is (nsr_uasd_ExtentCount * 8) bytes.
// The last logical sector of nsr_uasd_Extents is zero padded.
} NSR_UASD, *PNSR_UASD;
/*** nsr_term - Terminating Descriptor (3/10.9 and 4/14.2)
*
* nsr_term_destag.destag_Ident = DESTAG_ID_NSR_TERM
*
*/
typedef struct NSR_TERM {
DESTAG Destag; // Descriptor Tag (NSR_TERM)
UCHAR Res16[496]; // Reserved Zeros
} NSR_TERM, *PNSR_TERM;
/*** nsr_lvhd - Logical Volume Header Descriptor (4/14.15)
*
* This descriptor is found in the Logical Volume Content Use
* field of a Logical Volume Integrity Descriptor.
*
* This definition is moved to here to avoid forward reference.
*/
typedef struct NSR_LVHD {
ULONG UniqueID[2]; // Unique ID
UCHAR Res8[24]; // Reserved Zeros
} NSR_LVHD, *PNSR_LVHD;
/*** nsr_integ - Logical Volume Integrity Descriptor (3/10.10)
*
* nsr_integ_destag.destag_Ident = DESTAG_ID_NSR_LVINTEG
*
* WARNING: WARNING: WARNING: nsr_integ is a multi-variant structure!
*
* The starting address of nsr_integ_Size is not acurrate.
* Compensate for this nsr_integ_Size problem by adding the value of
* (nsr_integ_PartitionCount-1) to the ULONG ARRAY INDEX.
*
* The starting address of nsr_integ_ImpUse[0] is not accurate.
* Compensate for this nsr_integ_ImpUse problem by adding the value of
* ((nsr_integ_PartitionCount-1)<<3) to the UCHAR ARRAY INDEX.
*
* This descriptor is padded with zero bytes to the end of the last
* logical sector it occupies.
*
* The Logical Volume Contents Use field is specified here as a
* Logical Volume Header Descriptor. See (4/3.1) second last point.
*/
typedef struct NSR_INTEG {
DESTAG Destag; // Descriptor Tag (NSR_LVINTEG)
TIMESTAMP Time; // Recording Date
ULONG Type; // Integrity Type (INTEG_T_...)
EXTENTAD Next; // Next Integrity Extent
NSR_LVHD LVHD; // Logical Volume Contents Use
ULONG PartitionCount; // Number of Partitions
ULONG ImpUseLength; // Length of Implementation Use
ULONG Free[1]; // Free Space Table
// nsr_integ_Free has a variant length = (4*nsr_integ_PartitionCount)
ULONG Size[1]; // Size Table
// nsr_integ_Size has a variant starting offset due to nsr_integ_Free
// nsr_integ_Size has a variant length = (4*nsr_integ_PartitionCount)
UCHAR ImpUse[0]; // Implementation Use
// nsr_integ_ImpUse has a variant starting offset due to nsr_integ_Free and
// nsr_integ_Size.
// nsr_integ_ImpUse has a variant length = (nsr_integ_ImpUseLength)
} NSR_INTEG, *PNSR_INTEG;
// Values for nsr_integ_Type
#define NSR_INTEG_T_OPEN 0 // Open Integrity Descriptor
#define NSR_INTEG_T_CLOSE 1 // Close Integrity Descriptor
/*** ISO 13346 Part 4: File Structure
*
* See DESTAG structure in Part 3 for definitions found in (4/7.2).
*
*/
/*** nsr_fsd - File Set Descriptor (4/14.1)
*
* nsr_fsd_destag.destag_Ident = DESTAG_ID_NSR_FSD
*/
typedef struct NSR_FSD {
DESTAG Destag; // Descriptor Tag (NSR_LVOL)
TIMESTAMP Time; // Recording Time
USHORT Level; // Interchange Level
USHORT LevelMax; // Maximum Interchange Level
ULONG CharSetList; // Character Set List (See 1/7.2.11)
ULONG CharSetListMax; // Maximum Character Set List
ULONG FileSet; // File Set Number
ULONG FileSetDesc; // File Set Descriptor Number
CHARSPEC CharspecVolID; // Volume ID Character Set
UCHAR VolID[128]; // Volume ID
CHARSPEC CharspecFileSet; // File Set Character Set
UCHAR FileSetID[32]; // File Set ID
UCHAR Copyright[32]; // Copyright File Name
UCHAR Abstract[32]; // Abstract File Name
LONGAD IcbRoot; // Root Directory ICB Address
REGID DomainID; // Domain Identifier
LONGAD NextExtent; // Next FSD Extent
UCHAR Res464[48]; // Reserved Zeros
} NSR_FSD, *PNSR_FSD;
/*** nsr_part_h - Partition Header Descriptor (4/14.3)
*
* No Descriptor Tag.
*
* This descriptor is found in the nsr_part_ContentsUse field of
* an NSR02 Partition Descriptor. See NSR_PART_CONTID_NSR02.
*
*/
typedef struct NSR_PART_H {
SHORTAD UASTable; // Unallocated Space Table
SHORTAD UASBitmap; // Unallocated Space Bitmap
SHORTAD IntegTable; // Integrity Table
SHORTAD FreedTable; // Freed Space Table
SHORTAD FreedBitmap; // Freed Space Bitmap
UCHAR Res40[88]; // Reserved Zeros
} NSR_PART_H, *PNSR_PART_H;
/*** nsr_fid - File Identifier Descriptor (4/14.4)
*
* nsr_fid_destag.destag_Ident = DESTAG_ID_NSR_FID
*
* WARNING: WARNING: WARNING: nsr_fid is a multi-variant structure!
*
* The starting address of nsr_fid_FileID is not acurrate.
* Compensate for this nsr_fid_FileID problem by adding the value of
* (nsr_fid_ImpUseLen-1) to the UCHAR ARRAY INDEX.
*
* The starting address of nsr_fid_Padding is not acurrate.
* Compensate for this nsr_fid_Padding problem by adding the value of
* (nsr_fid_ImpUseLen+nsr_fid_FileIDLen-2) to the UCHAR ARRAY INDEX.
*
* The true total size of nsr_fid_s is
* ((38 + nsr_fid_FileIDLen + nsr_fid_ImpUseLen) + 3) & ~3)
*
*/
typedef struct NSR_FID {
DESTAG Destag; // Descriptor Tag (NSR_FID)
USHORT Version; // File Version Number
UCHAR Flags; // File Flags (NSR_FID_F_...)
UCHAR FileIDLen; // File ID Length
LONGAD Icb; // ICB (long) Address
USHORT ImpUseLen; // Implementation Use Length
UCHAR ImpUse[1]; // Implementation Use Area
// nsr_fid_ImpUse has a variant length = nsr_fid_ImpUseLen
UCHAR FileID[1]; // File Identifier
// nsr_fid_FileID has a variant starting offset due to nsr_fid_ImpUse
// nsr_fid_FileID has a variant length = nsr_fid_FileIDLen
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -