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

📄 tsk_ext2fs.h

📁 linux下开发的针对所有磁盘的数据恢复的源码
💻 H
字号:
/*** The Sleuth Kit **** Brian Carrier [carrier <at> sleuthkit [dot] org]** Copyright (c) 2003-2008 Brian Carrier.  All rights reserved**** TASK** Copyright (c) 2002 Brian Carrier, @stake Inc.  All rights reserved** ** This software is distributed under the Common Public License 1.0 *//* * Contains the structures and function APIs for EXT2FS file system support. */#ifndef _TSK_EXT2FS_H#define _TSK_EXT2FS_H#ifdef __cplusplusextern "C" {#endif    typedef uint32_t EXT2_GRPNUM_T;#define PRI_EXT2GRP	PRIu32/*** Constants*/#define EXT2FS_FIRSTINO    1    /* inode 1 contains the bad blocks */#define EXT2FS_ROOTINO     2    /* location of root directory inode */#define EXT2FS_NDADDR      12#define EXT2FS_NIADDR      3#define EXT2FS_SBOFF       1024#define EXT2FS_FS_MAGIC    0xef53#define EXT2FS_MAXNAMLEN	255#define EXT2FS_MAXPATHLEN	4096#define EXT2FS_MIN_BLOCK_SIZE	1024#define EXT2FS_MAX_BLOCK_SIZE	4096#define EXT2FS_DEV_BSIZE	512#define EXT2FS_FILE_CONTENT_LEN     ((EXT2FS_NDADDR + EXT2FS_NIADDR) * sizeof(TSK_DADDR_T))/*** Super Block*/    typedef struct {        uint8_t s_inodes_count[4];      /* u32 */        uint8_t s_blocks_count[4];      /* u32 */        uint8_t s_r_blocks_count[4];        uint8_t s_free_blocks_count[4]; /* u32 */        uint8_t s_free_inode_count[4];  /* u32 */        uint8_t s_first_data_block[4];  /* u32 */        uint8_t s_log_block_size[4];    /* u32 */        uint8_t s_log_frag_size[4];     /* s32 */        uint8_t s_blocks_per_group[4];  /* u32 */        uint8_t s_frags_per_group[4];   /* u32 */        uint8_t s_inodes_per_group[4];  /* u32 */        uint8_t s_mtime[4];     /* u32 *//* mount time */        uint8_t s_wtime[4];     /* u32 *//* write time */        uint8_t s_mnt_count[2]; /* u16 *//* mount count */        uint8_t s_max_mnt_count[2];     /* s16 */        uint8_t s_magic[2];     /* u16 */        uint8_t s_state[2];     /* u16 *//* fs state */        uint8_t s_errors[2];    /* u16 */        uint8_t s_minor_rev_level[2];   /* u16 */        uint8_t s_lastcheck[4]; /* u32 */        uint8_t s_checkinterval[4];     /* u32 */        uint8_t s_creator_os[4];        /* u32 */        uint8_t s_rev_level[4]; /* u32 */        uint8_t s_def_resuid[2];        /* u16 */        uint8_t s_def_resgid[2];        /* u16 */        uint8_t s_first_ino[4]; /* u32 */        uint8_t s_inode_size[2];        /* u16 */        uint8_t s_block_group_nr[2];    /* u16 */        uint8_t s_feature_compat[4];    /* u32 */        uint8_t s_feature_incompat[4];  /* u32 */        uint8_t s_feature_ro_compat[4]; /* u32 */        uint8_t s_uuid[16];     /* u8[16] */        char s_volume_name[16];        char s_last_mounted[64];        uint8_t s_algorithm_usage_bitmap[4];    /* u32 */        uint8_t s_prealloc_blocks;      /* u8 */        uint8_t s_prealloc_dir_blocks;  /* u8 */        uint8_t s_padding1[2];  /* u16 */        uint8_t s_journal_uuid[16];     /* u8[16] */        uint8_t s_journal_inum[4];      /* u32 */        uint8_t s_journal_dev[4];       /* u32 */        uint8_t s_last_orphan[4];       /* u32 */        uint8_t s_padding[788];    } ext2fs_sb;/* File system State Values */#define EXT2FS_STATE_VALID	0x0001  /* unmounted correctly */#define EXT2FS_STATE_ERROR	0x0002  /* errors detected *//* Operating System Codes */#define EXT2FS_OS_LINUX		0#define EXT2FS_OS_HURD		1#define	EXT2FS_OS_MASIX		2#define EXT2FS_OS_FREEBSD	3#define EXT2FS_OS_LITES		4/* Revision Levels */#define EXT2FS_REV_ORIG		0#define EXT2FS_REV_DYN		1/* feature flags */#define EXT2FS_FEATURE_COMPAT_DIR_PREALLOC	0x0001#define EXT2FS_FEATURE_COMPAT_IMAGIC_INODES	0x0002#define EXT2FS_FEATURE_COMPAT_HAS_JOURNAL	0x0004#define EXT2FS_FEATURE_COMPAT_EXT_ATTR		0x0008#define EXT2FS_FEATURE_COMPAT_RESIZE_INO	0x0010#define EXT2FS_FEATURE_COMPAT_DIR_INDEX		0x0020#define EXT2FS_FEATURE_INCOMPAT_COMPRESSION	0x0001#define EXT2FS_FEATURE_INCOMPAT_FILETYPE	0x0002#define EXT2FS_FEATURE_INCOMPAT_RECOVER		0x0004#define EXT2FS_FEATURE_INCOMPAT_JOURNAL_DEV	0x0008#define EXT2FS_FEATURE_RO_COMPAT_SPARSE_SUPER	0x0001#define EXT2FS_FEATURE_RO_COMPAT_LARGE_FILE		0x0002#define EXT2FS_FEATURE_RO_COMPAT_BTREE_DIR		0x0004/* * Group Descriptor */    typedef struct {        uint8_t bg_block_bitmap[4];     /* u32: block of blocks bitmap */        uint8_t bg_inode_bitmap[4];     /* u32: block of inodes bitmap */        uint8_t bg_inode_table[4];      /* u32: block of inodes table */        uint8_t bg_free_blocks_count[2];        /* u16: num of free blocks */        uint8_t bg_free_inodes_count[2];        /* u16: num of free inodes */        uint8_t bg_used_dirs_count[2];  /* u16: num of use directories  */        uint8_t f1[14];    } ext2fs_gd;/* data address to group number */#define ext2_dtog_lcl(fsi, fs, d)	\	(EXT2_GRPNUM_T)(((d) - tsk_getu32(fsi->endian, fs->s_first_data_block)) / \	tsk_getu32(fsi->endian, fs->s_blocks_per_group))/* first fragment of group */#define ext2_cgbase_lcl(fsi, fs, c)	\	((TSK_DADDR_T)((tsk_getu32(fsi->endian, fs->s_blocks_per_group) * (c)) + \	tsk_getu32(fsi->endian, fs->s_first_data_block)))/* * Inode */    typedef struct {        uint8_t i_mode[2];      /* u16 */        uint8_t i_uid[2];       /* u16 */        uint8_t i_size[4];      /* u32 */        uint8_t i_atime[4];     /* u32 */        uint8_t i_ctime[4];     /* u32 */        uint8_t i_mtime[4];     /* u32 */        uint8_t i_dtime[4];     /* u32 */        uint8_t i_gid[2];       /* u16 */        uint8_t i_nlink[2];     /* u16 */        uint8_t i_nblk[4];        uint8_t i_flags[4];        uint8_t i_f5[4];        uint8_t i_block[15][4]; /*s32 */        uint8_t i_generation[4];        uint8_t i_file_acl[4];        uint8_t i_size_high[4]; /* u32 - also i_dir_acl for non-regular  */        uint8_t i_faddr[4];        uint8_t i_frag;        uint8_t i_fsize;        uint8_t f1[2];        uint8_t i_uid_high[2];        uint8_t i_gid_high[2];        uint8_t f7[4];    } ext2fs_inode;/* MODE */#define EXT2_IN_FMT  0170000#define EXT2_IN_SOCK 0140000#define EXT2_IN_LNK  0120000#define EXT2_IN_REG  0100000#define EXT2_IN_BLK  0060000#define EXT2_IN_DIR  0040000#define EXT2_IN_CHR  0020000#define EXT2_IN_FIFO  0010000#define EXT2_IN_ISUID   0004000#define EXT2_IN_ISGID   0002000#define EXT2_IN_ISVTX   0001000#define EXT2_IN_IRUSR   0000400#define EXT2_IN_IWUSR   0000200#define EXT2_IN_IXUSR   0000100#define EXT2_IN_IRGRP   0000040#define EXT2_IN_IWGRP   0000020#define EXT2_IN_IXGRP   0000010#define EXT2_IN_IROTH   0000004#define EXT2_IN_IWOTH   0000002#define EXT2_IN_IXOTH   0000001#define EXT2_IN_SECDEL 		0x00000001      /* Secure deletion */#define EXT2_IN_UNRM 		0x00000002      /* Undelete */#define EXT2_IN_COMP 		0x00000004      /* Compress file */#define EXT2_IN_SYNC		0x00000008      /* Synchronous updates */#define EXT2_IN_IMM		 	0x00000010      /* Immutable file */#define EXT2_IN_APPEND 		0x00000020      /* writes to file may only append */#define EXT2_IN_NODUMP 		0x00000040      /* do not dump file */#define EXT2_IN_NOA		 	0x00000080      /* do not update atime *//* * directory entries */    typedef struct {        uint8_t inode[4];       /* u32 */        uint8_t rec_len[2];     /* u16 */        uint8_t name_len[2];    /* u16 */        char name[EXT2FS_MAXNAMLEN];    } ext2fs_dentry1;/* new structure starting at 2.2 */    typedef struct {        uint8_t inode[4];       /* u32 */        uint8_t rec_len[2];     /* u16 */        uint8_t name_len;        uint8_t type;        char name[EXT2FS_MAXNAMLEN];    } ext2fs_dentry2;#define EXT2FS_DIRSIZ_lcl(len) \    ((len + 8 + 3) & ~(3))/* Ext2 directory file types  */#define EXT2_DE_UNKNOWN         0#define EXT2_DE_REG        1#define EXT2_DE_DIR             2#define EXT2_DE_CHR          3#define EXT2_DE_BLK          4#define EXT2_DE_FIFO            5#define EXT2_DE_SOCK            6#define EXT2_DE_LNK         7#define EXT2_DE_MAX             8#define EXT2_DE_V1	1#define EXT2_DE_V2	2/* Extended Attributes */#define EXT2_EA_MAGIC	0xEA020000    typedef struct {        uint8_t magic[4];        uint8_t refcount[4];        uint8_t blocks[4];        uint8_t hash[4];        uint8_t f1[16];        uint8_t entry;    } ext2fs_ea_header;#define EXT2_EA_IDX_USER                   1#define EXT2_EA_IDX_POSIX_ACL_ACCESS       2#define EXT2_EA_IDX_POSIX_ACL_DEFAULT      3#define EXT2_EA_IDX_TRUSTED                4#define EXT2_EA_IDX_LUSTRE                 5#define EXT2_EA_IDX_SECURITY               6/* Entries follow the header and are aligned to 4-byte boundaries  * the value of the attribute is stored at the bottom of the block  */    typedef struct {        uint8_t nlen;        uint8_t nidx;        uint8_t val_off[2];        uint8_t val_blk[4];        uint8_t val_size[4];        uint8_t hash[4];        uint8_t name;    } ext2fs_ea_entry;#define EXT2_EA_LEN(nlen) \	((((nlen) + 19 ) / 4) * 4)    typedef struct {        uint8_t ver[4];    } ext2fs_pos_acl_head;#define EXT2_PACL_TAG_USERO	0x01#define EXT2_PACL_TAG_USER	0x02#define EXT2_PACL_TAG_GRPO	0x04#define EXT2_PACL_TAG_GRP	0x08#define EXT2_PACL_TAG_MASK	0x10#define EXT2_PACL_TAG_OTHER	0x20#define EXT2_PACL_PERM_EXEC	0x01#define EXT2_PACL_PERM_WRITE	0x02#define EXT2_PACL_PERM_READ	0x04    typedef struct {        uint8_t tag[2];        uint8_t perm[2];    } ext2fs_pos_acl_entry_sh;    typedef struct {        uint8_t tag[2];        uint8_t perm[2];        uint8_t id[4];    } ext2fs_pos_acl_entry_lo;/************** JOURNAL ******************//* These values are always in big endian */#define EXT2_JMAGIC	0xC03b3998    typedef struct {        uint8_t magic[4];        uint8_t entrytype[4];        uint8_t entryseq[4];    /* sequence of this entry */        uint8_t bsize[4];       /* size of block */        uint8_t num_blk[4];     /* num of blks in journal */        uint8_t first_blk[4];   /* bl where log starts */        uint8_t start_seq[4];   /* first commit ID in log */        uint8_t start_blk[4];   /* journ blk for 1st valid entry */        uint8_t j_errno[4];     /* signed error number *//* the rest are not valid for v1 sb */        uint8_t feature_compat[4];        uint8_t feature_incompat[4];        uint8_t feature_ro_incompat[4];        uint8_t uuid[16];        uint8_t num_fs[4];      /* num of fs sharing log */        uint8_t dynsuper[4];    /* fs block of sb copy */        uint8_t max_trans[4];   /* limit of blk per trans */        uint8_t max_trans_data[4];      /* limit of data blocks per */        uint8_t reserved[176];        uint8_t id_fs[16][48];  /* Ids of fs sharing log */    } ext2fs_journ_sb;#define EXT2_J_ETYPE_DESC	1       /* descriptor block */#define EXT2_J_ETYPE_COM	2       /* commit */#define EXT2_J_ETYPE_SB1	3       /* super block v1 */#define EXT2_J_ETYPE_SB2	4       /* sb v2 */#define EXT2_J_ETYPE_REV	5       /* revoke *//* Header that is used for all structures */    typedef struct {        uint8_t magic[4];        uint8_t entry_type[4];        uint8_t entry_seq[4];    } ext2fs_journ_head;/* dentry flags */#define EXT2_J_DENTRY_ESC	1       /* The orig block starts with magic */#define EXT2_J_DENTRY_SAMEID	2       /* Entry is for same id, so do not skip 16 ahead */#define EXT2_J_DENTRY_DEL	4       /* not currently used in src */#define EXT2_J_DENTRY_LAST	8       /* Last tag *//* Entry in the descriptor table */    typedef struct {        uint8_t fs_blk[4];        uint8_t flag[4];    } ext2fs_journ_dentry;/* Journal Info */    typedef struct {        TSK_FS_FILE *fs_file;        TSK_INUM_T j_inum;        uint32_t bsize;        TSK_DADDR_T first_block;        TSK_DADDR_T last_block;        uint32_t start_seq;        TSK_DADDR_T start_blk;    } EXT2FS_JINFO;    /*     * Structure of an ext2fs file system handle.     */    typedef struct {        TSK_FS_INFO fs_info;    /* super class */        ext2fs_sb *fs;          /* super block */        ext2fs_gd *grp_buf;     /* cached group descriptor */        EXT2_GRPNUM_T grp_num;  /* cached group number */        uint8_t *bmap_buf;      /* cached block allocation bitmap */        EXT2_GRPNUM_T bmap_grp_num;     /* cached block bitmap nr */        uint8_t *imap_buf;      /* cached inode allocation bitmap */        EXT2_GRPNUM_T imap_grp_num;     /* cached inode bitmap nr */        ext2fs_inode *dino_buf; /* cached disk inode */        TSK_INUM_T dino_inum;   /* cached inode number */        TSK_OFF_T groups_offset;        /* offset to first group desc */        EXT2_GRPNUM_T groups_count;     /* nr of descriptor group blocks */        uint8_t deentry_type;   /* v1 or v2 of dentry */        uint16_t inode_size;    /* size of each inode */        TSK_DADDR_T first_data_block;        EXT2FS_JINFO *jinfo;    } EXT2FS_INFO;    extern TSK_RETVAL_ENUM        ext2fs_dir_open_meta(TSK_FS_INFO * a_fs, TSK_FS_DIR ** a_fs_dir,        TSK_INUM_T a_addr);    extern uint8_t ext2fs_jentry_walk(TSK_FS_INFO *, int,        TSK_FS_JENTRY_WALK_CB, void *);    extern uint8_t ext2fs_jblk_walk(TSK_FS_INFO *, TSK_DADDR_T,        TSK_DADDR_T, int, TSK_FS_JBLK_WALK_CB, void *);    extern uint8_t ext2fs_jopen(TSK_FS_INFO *, TSK_INUM_T);#ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

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