1987da915Sopenharmony_ci/*
2987da915Sopenharmony_ci * ntfsundelete - Part of the Linux-NTFS project.
3987da915Sopenharmony_ci *
4987da915Sopenharmony_ci * Copyright (c) 2002 Richard Russon
5987da915Sopenharmony_ci * Copyright (c) 2007 Yura Pakhuchiy
6987da915Sopenharmony_ci *
7987da915Sopenharmony_ci * This utility will recover deleted files from an NTFS volume.
8987da915Sopenharmony_ci *
9987da915Sopenharmony_ci * This program is free software; you can redistribute it and/or modify
10987da915Sopenharmony_ci * it under the terms of the GNU General Public License as published by
11987da915Sopenharmony_ci * the Free Software Foundation; either version 2 of the License, or
12987da915Sopenharmony_ci * (at your option) any later version.
13987da915Sopenharmony_ci *
14987da915Sopenharmony_ci * This program is distributed in the hope that it will be useful,
15987da915Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
16987da915Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17987da915Sopenharmony_ci * GNU General Public License for more details.
18987da915Sopenharmony_ci *
19987da915Sopenharmony_ci * You should have received a copy of the GNU General Public License
20987da915Sopenharmony_ci * along with this program (in the main directory of the Linux-NTFS
21987da915Sopenharmony_ci * distribution in the file COPYING); if not, write to the Free Software
22987da915Sopenharmony_ci * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23987da915Sopenharmony_ci */
24987da915Sopenharmony_ci
25987da915Sopenharmony_ci#ifndef _NTFSUNDELETE_H_
26987da915Sopenharmony_ci#define _NTFSUNDELETE_H_
27987da915Sopenharmony_ci
28987da915Sopenharmony_ci#include "types.h"
29987da915Sopenharmony_ci#include "list.h"
30987da915Sopenharmony_ci#include "runlist.h"
31987da915Sopenharmony_ci#include "utils.h"
32987da915Sopenharmony_ci
33987da915Sopenharmony_cienum optmode {
34987da915Sopenharmony_ci	MODE_NONE = 0,
35987da915Sopenharmony_ci	MODE_SCAN,
36987da915Sopenharmony_ci	MODE_UNDELETE,
37987da915Sopenharmony_ci	MODE_COPY,
38987da915Sopenharmony_ci	MODE_ERROR
39987da915Sopenharmony_ci};
40987da915Sopenharmony_ci
41987da915Sopenharmony_cistruct options {
42987da915Sopenharmony_ci	char		*device;	/* Device/File to work with */
43987da915Sopenharmony_ci	enum optmode	 mode;		/* Scan / Undelete / Copy */
44987da915Sopenharmony_ci	int		 percent;	/* Minimum recoverability */
45987da915Sopenharmony_ci	int		 uinode;	/* Undelete this inode */
46987da915Sopenharmony_ci	char		*dest;		/* Save file to this directory */
47987da915Sopenharmony_ci	char		*output;	/* With this filename */
48987da915Sopenharmony_ci	char		*match;		/* Pattern for filename matching */
49987da915Sopenharmony_ci	int		 match_case;	/* Case sensitive matching */
50987da915Sopenharmony_ci	int		 truncate;	/* Truncate files to exact size. */
51987da915Sopenharmony_ci	int		 quiet;		/* Less output */
52987da915Sopenharmony_ci	int		 verbose;	/* Extra output */
53987da915Sopenharmony_ci	int		 force;		/* Override common sense */
54987da915Sopenharmony_ci	int              optimistic;    /* Undelete in-use clusters as well */
55987da915Sopenharmony_ci	int		 parent;	/* Show parent directory */
56987da915Sopenharmony_ci	time_t		 since;		/* Since this time */
57987da915Sopenharmony_ci	s64		 size_begin;	/* Range for file size */
58987da915Sopenharmony_ci	s64		 size_end;
59987da915Sopenharmony_ci	s64		 mft_begin;	/* Range for mft copy */
60987da915Sopenharmony_ci	s64		 mft_end;
61987da915Sopenharmony_ci	char		 fillbyte;	/* Use for unrecoverable sections */
62987da915Sopenharmony_ci};
63987da915Sopenharmony_ci
64987da915Sopenharmony_cistruct filename {
65987da915Sopenharmony_ci	struct ntfs_list_head list;	/* Previous/Next links */
66987da915Sopenharmony_ci	ntfschar	*uname;		/* Filename in unicode */
67987da915Sopenharmony_ci	int		 uname_len;	/* and its length */
68987da915Sopenharmony_ci	long long	 size_alloc;	/* Allocated size (multiple of cluster size) */
69987da915Sopenharmony_ci	long long	 size_data;	/* Actual size of data */
70987da915Sopenharmony_ci	FILE_ATTR_FLAGS	 flags;
71987da915Sopenharmony_ci	time_t		 date_c;	/* Time created */
72987da915Sopenharmony_ci	time_t		 date_a;	/*	altered */
73987da915Sopenharmony_ci	time_t		 date_m;	/*	mft record changed */
74987da915Sopenharmony_ci	time_t		 date_r;	/*	read */
75987da915Sopenharmony_ci	char		*name;		/* Filename in current locale */
76987da915Sopenharmony_ci	FILE_NAME_TYPE_FLAGS name_space;
77987da915Sopenharmony_ci	leMFT_REF	 parent_mref;
78987da915Sopenharmony_ci	char		*parent_name;
79987da915Sopenharmony_ci};
80987da915Sopenharmony_ci
81987da915Sopenharmony_cistruct data {
82987da915Sopenharmony_ci	struct ntfs_list_head list;	/* Previous/Next links */
83987da915Sopenharmony_ci	char		*name;		/* Stream name in current locale */
84987da915Sopenharmony_ci	ntfschar	*uname;		/* Unicode stream name */
85987da915Sopenharmony_ci	int		 uname_len;	/* and its length */
86987da915Sopenharmony_ci	int		 resident;	/* Stream is resident */
87987da915Sopenharmony_ci	int		 compressed;	/* Stream is compressed */
88987da915Sopenharmony_ci	int		 encrypted;	/* Stream is encrypted */
89987da915Sopenharmony_ci	long long	 size_alloc;	/* Allocated size (multiple of cluster size) */
90987da915Sopenharmony_ci	long long	 size_data;	/* Actual size of data */
91987da915Sopenharmony_ci	long long	 size_init;	/* Initialised size, may be less than data size */
92987da915Sopenharmony_ci	long long	 size_vcn;	/* Highest VCN in the data runs */
93987da915Sopenharmony_ci	runlist_element *runlist;	/* Decoded data runs */
94987da915Sopenharmony_ci	int		 percent;	/* Amount potentially recoverable */
95987da915Sopenharmony_ci	void		*data;		/* If resident, a pointer to the data */
96987da915Sopenharmony_ci};
97987da915Sopenharmony_ci
98987da915Sopenharmony_cistruct ufile {
99987da915Sopenharmony_ci	long long	 inode;		/* MFT record number */
100987da915Sopenharmony_ci	time_t		 date;		/* Last modification date/time */
101987da915Sopenharmony_ci	struct ntfs_list_head name;	/* A list of filenames */
102987da915Sopenharmony_ci	struct ntfs_list_head data;	/* A list of data streams */
103987da915Sopenharmony_ci	char		*pref_name;	/* Preferred filename */
104987da915Sopenharmony_ci	char		*pref_pname;	/*	     parent filename */
105987da915Sopenharmony_ci	long long	 max_size;	/* Largest size we find */
106987da915Sopenharmony_ci	int		 attr_list;	/* MFT record may be one of many */
107987da915Sopenharmony_ci	int		 directory;	/* MFT record represents a directory */
108987da915Sopenharmony_ci	MFT_RECORD	*mft;		/* Raw MFT record */
109987da915Sopenharmony_ci};
110987da915Sopenharmony_ci
111987da915Sopenharmony_ci#endif /* _NTFSUNDELETE_H_ */
112987da915Sopenharmony_ci
113