1 /* 2 * Segment file reading/writing functions 3 * 4 * Copyright (c) 2006-2014, Joachim Metz <joachim.metz@gmail.com> 5 * 6 * Refer to AUTHORS for acknowledgements. 7 * 8 * This program is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU Lesser General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public License 19 * along with this program. If not, see <https://www.gnu.org/licenses/>. 20 */ 21 22 #if !defined( _LIBEWF_SEGMENT_FILE_H ) 23 #define _LIBEWF_SEGMENT_FILE_H 24 25 #include <common.h> 26 #include <types.h> 27 28 #include "libewf_chunk_table.h" 29 #include "libewf_hash_sections.h" 30 #include "libewf_header_sections.h" 31 #include "libewf_io_handle.h" 32 #include "libewf_libbfio.h" 33 #include "libewf_libcdata.h" 34 #include "libewf_libcerror.h" 35 #include "libewf_libfcache.h" 36 #include "libewf_libmfdata.h" 37 #include "libewf_media_values.h" 38 #include "libewf_section.h" 39 #include "libewf_single_files.h" 40 41 #include "ewf_data.h" 42 #include "ewf_table.h" 43 44 #if defined( __cplusplus ) 45 extern "C" { 46 #endif 47 48 extern const uint8_t dvf_file_signature[ 8 ]; 49 extern const uint8_t evf_file_signature[ 8 ]; 50 extern const uint8_t lvf_file_signature[ 8 ]; 51 52 typedef struct libewf_segment_file libewf_segment_file_t; 53 54 struct libewf_segment_file 55 { 56 /* The segment file type 57 */ 58 uint8_t type; 59 60 /* The segment number 61 */ 62 uint16_t segment_number; 63 64 /* The last section offset 65 */ 66 off64_t last_section_offset; 67 68 /* The list of all the sections 69 */ 70 libcdata_list_t *section_list; 71 72 /* The number of chunks 73 */ 74 uint32_t number_of_chunks; 75 76 /* Flags 77 */ 78 uint8_t flags; 79 }; 80 81 int libewf_segment_file_initialize( 82 libewf_segment_file_t **segment_file, 83 libcerror_error_t **error ); 84 85 int libewf_segment_file_free( 86 libewf_segment_file_t **segment_file, 87 libcerror_error_t **error ); 88 89 int libewf_segment_file_clone( 90 libewf_segment_file_t **destination_segment_file, 91 libewf_segment_file_t *source_segment_file, 92 libcerror_error_t **error ); 93 94 ssize_t libewf_segment_file_read_file_header( 95 libewf_segment_file_t *segment_file, 96 libbfio_pool_t *file_io_pool, 97 int file_io_pool_entry, 98 libcerror_error_t **error ); 99 100 ssize_t libewf_segment_file_write_file_header( 101 libewf_segment_file_t *segment_file, 102 libbfio_pool_t *file_io_pool, 103 int file_io_pool_entry, 104 libcerror_error_t **error ); 105 106 int libewf_segment_file_read( 107 intptr_t *io_handle, 108 libbfio_pool_t *file_io_pool, 109 int file_io_pool_entry, 110 libmfdata_file_t *file, 111 libfcache_cache_t *cache, 112 uint8_t read_flags, 113 libcerror_error_t **error ); 114 115 ssize_t libewf_segment_file_read_table_section( 116 libewf_segment_file_t *segment_file, 117 libewf_section_t *section, 118 libewf_io_handle_t *io_handle, 119 libbfio_pool_t *file_io_pool, 120 int file_io_pool_entry, 121 libewf_media_values_t *media_values, 122 libewf_chunk_table_t *chunk_table, 123 libmfdata_list_t *chunk_table_list, 124 libcerror_error_t **error ); 125 126 ssize_t libewf_segment_file_read_table2_section( 127 libewf_segment_file_t *segment_file, 128 libewf_section_t *section, 129 libewf_io_handle_t *io_handle, 130 libbfio_pool_t *file_io_pool, 131 int file_io_pool_entry, 132 libewf_chunk_table_t *chunk_table, 133 libmfdata_list_t *chunk_table_list, 134 libcerror_error_t **error ); 135 136 ssize_t libewf_segment_file_read_volume_section( 137 libewf_segment_file_t *segment_file, 138 libewf_section_t *section, 139 libewf_io_handle_t *io_handle, 140 libbfio_pool_t *file_io_pool, 141 int file_io_pool_entry, 142 libewf_media_values_t *media_values, 143 libmfdata_list_t *chunk_table_list, 144 libcerror_error_t **error ); 145 146 ssize_t libewf_segment_file_read_delta_chunk_section( 147 libewf_segment_file_t *segment_file, 148 libewf_section_t *section, 149 libbfio_pool_t *file_io_pool, 150 int file_io_pool_entry, 151 libmfdata_list_t *chunk_table_list, 152 libcerror_error_t **error ); 153 154 ssize_t libewf_segment_file_write_headers( 155 libewf_segment_file_t *segment_file, 156 libewf_io_handle_t *io_handle, 157 libbfio_pool_t *file_io_pool, 158 int file_io_pool_entry, 159 off64_t section_offset, 160 libewf_header_sections_t *header_sections, 161 libcerror_error_t **error ); 162 163 ssize_t libewf_segment_file_write_last_section( 164 libewf_segment_file_t *segment_file, 165 libewf_io_handle_t *io_handle, 166 libbfio_pool_t *file_io_pool, 167 int file_io_pool_entry, 168 off64_t section_offset, 169 int last_segment_file, 170 libcerror_error_t **error ); 171 172 ssize_t libewf_segment_file_write_start( 173 libewf_segment_file_t *segment_file, 174 libewf_io_handle_t *io_handle, 175 libbfio_pool_t *file_io_pool, 176 int file_io_pool_entry, 177 libewf_media_values_t *media_values, 178 libewf_header_sections_t *header_sections, 179 ewf_data_t **cached_data_section, 180 libcerror_error_t **error ); 181 182 ssize_t libewf_segment_file_write_chunks_section_start( 183 libewf_segment_file_t *segment_file, 184 libewf_io_handle_t *io_handle, 185 libbfio_pool_t *file_io_pool, 186 int file_io_pool_entry, 187 off64_t section_offset, 188 libmfdata_list_t *chunk_table_list, 189 ewf_table_offset_t *table_offsets, 190 uint32_t number_of_table_offsets, 191 uint32_t number_of_chunks_written, 192 uint32_t chunks_per_section, 193 libcerror_error_t **error ); 194 195 ssize_t libewf_segment_file_write_chunks_section_correction( 196 libewf_segment_file_t *segment_file, 197 libewf_io_handle_t *io_handle, 198 libbfio_pool_t *file_io_pool, 199 int file_io_pool_entry, 200 off64_t section_offset, 201 libmfdata_list_t *chunk_table_list, 202 ewf_table_offset_t *table_offsets, 203 uint32_t number_of_table_offsets, 204 off64_t chunks_section_offset, 205 size64_t chunks_section_size, 206 uint32_t number_of_chunks, 207 uint32_t section_number_of_chunks, 208 libcerror_error_t **error ); 209 210 ssize_t libewf_segment_file_write_chunk( 211 libewf_segment_file_t *segment_file, 212 libewf_io_handle_t *io_handle, 213 libbfio_pool_t *file_io_pool, 214 int file_io_pool_entry, 215 libmfdata_list_t *chunk_table_list, 216 int chunk_index, 217 uint8_t *chunk_buffer, 218 size_t chunk_buffer_size, 219 size_t chunk_data_size, 220 int8_t is_compressed, 221 uint8_t *checksum_buffer, 222 uint32_t *chunk_checksum, 223 int8_t write_checksum, 224 libcerror_error_t **error ); 225 226 ssize_t libewf_segment_file_write_delta_chunk( 227 libewf_segment_file_t *segment_file, 228 libbfio_pool_t *file_io_pool, 229 int file_io_pool_entry, 230 off64_t section_offset, 231 libmfdata_list_t *chunk_table_list, 232 int chunk_index, 233 uint8_t *chunk_buffer, 234 size_t chunk_size, 235 uint8_t *checksum_buffer, 236 uint32_t *chunk_checksum, 237 uint8_t write_checksum, 238 uint8_t no_section_append, 239 libcerror_error_t **error ); 240 241 ssize_t libewf_segment_file_write_close( 242 libewf_segment_file_t *segment_file, 243 libewf_io_handle_t *io_handle, 244 libbfio_pool_t *file_io_pool, 245 int file_io_pool_entry, 246 off64_t section_offset, 247 uint32_t number_of_chunks_written_to_segment, 248 int last_segment_file, 249 libewf_hash_sections_t *hash_sections, 250 libfvalue_table_t *hash_values, 251 libewf_media_values_t *media_values, 252 libcdata_array_t *sessions, 253 libcdata_array_t *tracks, 254 libcdata_range_list_t *acquiry_errors, 255 ewf_data_t **cached_data_section, 256 libcerror_error_t **error ); 257 258 int libewf_segment_file_write_sections_correction( 259 libewf_segment_file_t *segment_file, 260 libewf_io_handle_t *io_handle, 261 libbfio_pool_t *file_io_pool, 262 int file_io_pool_entry, 263 uint32_t number_of_chunks_written_to_segment, 264 int last_segment_file, 265 libewf_media_values_t *media_values, 266 libfvalue_table_t *hash_values, 267 libewf_hash_sections_t *hash_sections, 268 libcdata_array_t *sessions, 269 libcdata_array_t *tracks, 270 libcdata_range_list_t *acquiry_errors, 271 ewf_data_t **cached_data_section, 272 libcerror_error_t **error ); 273 274 #if defined( __cplusplus ) 275 } 276 #endif 277 278 #endif 279 280