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