1 /* 2 * Section 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_SECTION_H ) 23 #define _LIBEWF_SECTION_H 24 25 #include <common.h> 26 #include <types.h> 27 28 #include "libewf_hash_sections.h" 29 #include "libewf_header_sections.h" 30 #include "libewf_io_handle.h" 31 #include "libewf_libbfio.h" 32 #include "libewf_libcdata.h" 33 #include "libewf_libcerror.h" 34 #include "libewf_libmfdata.h" 35 #include "libewf_media_values.h" 36 #include "libewf_single_files.h" 37 38 #include "ewf_data.h" 39 #include "ewf_section.h" 40 #include "ewf_table.h" 41 42 #if defined( __cplusplus ) 43 extern "C" { 44 #endif 45 46 typedef struct libewf_section libewf_section_t; 47 48 struct libewf_section 49 { 50 /* The section type string 51 * consists of maximum 16 bytes 52 */ 53 uint8_t type[ 17 ]; 54 55 /* The section type string length 56 */ 57 size_t type_length; 58 59 /* The start offset of the section 60 */ 61 off64_t start_offset; 62 63 /* The end offset of the section 64 */ 65 off64_t end_offset; 66 67 /* The size the section 68 */ 69 size64_t size; 70 }; 71 72 int libewf_section_test_zero( 73 uint8_t *buffer, 74 size_t buffer_size, 75 libcerror_error_t **error ); 76 77 int libewf_section_initialize( 78 libewf_section_t **section, 79 libcerror_error_t **error ); 80 81 int libewf_section_free( 82 libewf_section_t **section, 83 libcerror_error_t **error ); 84 85 int libewf_section_clone( 86 libewf_section_t **destination_section, 87 libewf_section_t *source_section, 88 libcerror_error_t **error ); 89 90 int libewf_section_set( 91 libewf_section_t *sections, 92 uint8_t *type, 93 size_t type_length, 94 off64_t start_offset, 95 off64_t end_offset, 96 libcerror_error_t **error ); 97 98 ssize_t libewf_section_start_read( 99 libewf_section_t *section, 100 libbfio_pool_t *file_io_pool, 101 int file_io_pool_entry, 102 off64_t file_offset, 103 libcerror_error_t **error ); 104 105 ssize_t libewf_section_start_write( 106 libewf_section_t *section, 107 libbfio_pool_t *file_io_pool, 108 int file_io_pool_entry, 109 libcerror_error_t **error ); 110 111 #if defined( HAVE_DEBUG_OUTPUT ) 112 ssize_t libewf_section_debug_read( 113 libewf_section_t *section, 114 libbfio_pool_t *file_io_pool, 115 int file_io_pool_entry, 116 libcerror_error_t **error ); 117 #endif 118 119 ssize_t libewf_section_last_write( 120 libewf_section_t *section, 121 libbfio_pool_t *file_io_pool, 122 int file_io_pool_entry, 123 uint8_t *type_string, 124 size_t type_string_length, 125 off64_t section_offset, 126 uint8_t ewf_format, 127 libcerror_error_t **error ); 128 129 ssize_t libewf_section_compressed_string_read( 130 libewf_section_t *section, 131 libbfio_pool_t *file_io_pool, 132 int file_io_pool_entry, 133 uint8_t **uncompressed_string, 134 size_t *uncompressed_string_size, 135 libcerror_error_t **error ); 136 137 ssize_t libewf_section_write_compressed_string( 138 libewf_section_t *section, 139 libbfio_pool_t *file_io_pool, 140 int file_io_pool_entry, 141 uint8_t *type_string, 142 size_t type_string_length, 143 off64_t section_offset, 144 uint8_t *uncompressed_string, 145 size_t uncompressed_string_size, 146 int8_t compression_level, 147 libcerror_error_t **error ); 148 149 ssize_t libewf_section_data_read( 150 libewf_section_t *section, 151 libewf_io_handle_t *io_handle, 152 libbfio_pool_t *file_io_pool, 153 int file_io_pool_entry, 154 libewf_media_values_t *media_values, 155 libcerror_error_t **error ); 156 157 ssize_t libewf_section_data_write( 158 libewf_section_t *section, 159 libewf_io_handle_t *io_handle, 160 libbfio_pool_t *file_io_pool, 161 int file_io_pool_entry, 162 off64_t section_offset, 163 libewf_media_values_t *media_values, 164 ewf_data_t **cached_data_section, 165 libcerror_error_t **error ); 166 167 ssize_t libewf_section_digest_read( 168 libewf_section_t *section, 169 libbfio_pool_t *file_io_pool, 170 int file_io_pool_entry, 171 libewf_hash_sections_t *hash_sections, 172 libcerror_error_t **error ); 173 174 ssize_t libewf_section_digest_write( 175 libewf_section_t *section, 176 libbfio_pool_t *file_io_pool, 177 int file_io_pool_entry, 178 off64_t section_offset, 179 libewf_hash_sections_t *hash_sections, 180 libcerror_error_t **error ); 181 182 ssize_t libewf_section_error2_read( 183 libewf_section_t *section, 184 libbfio_pool_t *file_io_pool, 185 int file_io_pool_entry, 186 libcdata_range_list_t *acquiry_errors, 187 libcerror_error_t **error ); 188 189 ssize_t libewf_section_error2_write( 190 libewf_section_t *section, 191 libbfio_pool_t *file_io_pool, 192 int file_io_pool_entry, 193 off64_t section_offset, 194 libcdata_range_list_t *acquiry_errors, 195 libcerror_error_t **error ); 196 197 ssize_t libewf_section_hash_read( 198 libewf_section_t *section, 199 libbfio_pool_t *file_io_pool, 200 int file_io_pool_entry, 201 libewf_hash_sections_t *hash_sections, 202 libcerror_error_t **error ); 203 204 ssize_t libewf_section_hash_write( 205 libewf_section_t *section, 206 libbfio_pool_t *file_io_pool, 207 int file_io_pool_entry, 208 off64_t section_offset, 209 libewf_hash_sections_t *hash_sections, 210 libcerror_error_t **error ); 211 212 ssize_t libewf_section_header_read( 213 libewf_section_t *section, 214 libbfio_pool_t *file_io_pool, 215 int file_io_pool_entry, 216 libewf_header_sections_t *header_sections, 217 libcerror_error_t **error ); 218 219 ssize_t libewf_section_header_write( 220 libewf_section_t *section, 221 libbfio_pool_t *file_io_pool, 222 int file_io_pool_entry, 223 off64_t section_offset, 224 libewf_header_sections_t *header_sections, 225 int8_t compression_level, 226 libcerror_error_t **error ); 227 228 ssize_t libewf_section_header2_read( 229 libewf_section_t *section, 230 libbfio_pool_t *file_io_pool, 231 int file_io_pool_entry, 232 libewf_header_sections_t *header_sections, 233 libcerror_error_t **error ); 234 235 ssize_t libewf_section_header2_write( 236 libewf_section_t *section, 237 libbfio_pool_t *file_io_pool, 238 int file_io_pool_entry, 239 off64_t section_offset, 240 libewf_header_sections_t *header_sections, 241 int8_t compression_level, 242 libcerror_error_t **error ); 243 244 ssize_t libewf_section_ltree_read( 245 libewf_section_t *section, 246 libbfio_pool_t *file_io_pool, 247 int file_io_pool_entry, 248 uint8_t **cached_ltree_data, 249 size_t *cached_ltree_data_size, 250 libcerror_error_t **error ); 251 252 ssize_t libewf_section_sectors_write( 253 libewf_section_t *section, 254 libbfio_pool_t *file_io_pool, 255 int file_io_pool_entry, 256 off64_t section_offset, 257 size64_t chunks_data_size, 258 libcerror_error_t **error ); 259 260 ssize_t libewf_section_session_read( 261 libewf_section_t *section, 262 libbfio_pool_t *file_io_pool, 263 int file_io_pool_entry, 264 libewf_media_values_t *media_values, 265 libcdata_array_t *sessions, 266 libcdata_array_t *tracks, 267 libcerror_error_t **error ); 268 269 ssize_t libewf_section_session_write( 270 libewf_section_t *section, 271 libbfio_pool_t *file_io_pool, 272 int file_io_pool_entry, 273 off64_t section_offset, 274 libcdata_array_t *sessions, 275 libcdata_array_t *tracks, 276 libcerror_error_t **error ); 277 278 ssize_t libewf_section_table_header_read( 279 libewf_section_t *section, 280 libbfio_pool_t *file_io_pool, 281 int file_io_pool_entry, 282 uint8_t format, 283 uint32_t *number_of_offsets, 284 uint64_t *base_offset, 285 libcerror_error_t **error ); 286 287 ssize_t libewf_section_table_write( 288 libewf_section_t *section, 289 libbfio_pool_t *file_io_pool, 290 int file_io_pool_entry, 291 uint8_t *type_string, 292 size_t type_string_length, 293 off64_t section_offset, 294 off64_t base_offset, 295 ewf_table_offset_t *table_offsets, 296 uint32_t number_of_offsets, 297 size64_t chunks_data_size, 298 uint8_t ewf_format, 299 libcerror_error_t **error ); 300 301 ssize_t libewf_section_volume_read( 302 libewf_section_t *section, 303 libewf_io_handle_t *io_handle, 304 libbfio_pool_t *file_io_pool, 305 int file_io_pool_entry, 306 libewf_media_values_t *media_values, 307 libcerror_error_t **error ); 308 309 ssize_t libewf_section_volume_e01_read( 310 libewf_section_t *section, 311 libewf_io_handle_t *io_handle, 312 libbfio_pool_t *file_io_pool, 313 int file_io_pool_entry, 314 libewf_media_values_t *media_values, 315 libcerror_error_t **error ); 316 317 ssize_t libewf_section_volume_e01_write( 318 libewf_section_t *section, 319 libewf_io_handle_t *io_handle, 320 libbfio_pool_t *file_io_pool, 321 int file_io_pool_entry, 322 off64_t section_offset, 323 libewf_media_values_t *media_values, 324 libcerror_error_t **error ); 325 326 ssize_t libewf_section_volume_s01_read( 327 libewf_section_t *section, 328 libewf_io_handle_t *io_handle, 329 libbfio_pool_t *file_io_pool, 330 int file_io_pool_entry, 331 libewf_media_values_t *media_values, 332 libcerror_error_t **error ); 333 334 ssize_t libewf_section_volume_s01_write( 335 libewf_section_t *section, 336 libewf_io_handle_t *io_handle, 337 libbfio_pool_t *file_io_pool, 338 int file_io_pool_entry, 339 off64_t section_offset, 340 libewf_media_values_t *media_values, 341 libcerror_error_t **error ); 342 343 ssize_t libewf_section_xhash_read( 344 libewf_section_t *section, 345 libbfio_pool_t *file_io_pool, 346 int file_io_pool_entry, 347 libewf_hash_sections_t *hash_sections, 348 libcerror_error_t **error ); 349 350 ssize_t libewf_section_xhash_write( 351 libewf_section_t *section, 352 libbfio_pool_t *file_io_pool, 353 int file_io_pool_entry, 354 off64_t section_offset, 355 libewf_hash_sections_t *hash_sections, 356 int8_t compression_level, 357 libcerror_error_t **error ); 358 359 ssize_t libewf_section_xheader_read( 360 libewf_section_t *section, 361 libbfio_pool_t *file_io_pool, 362 int file_io_pool_entry, 363 libewf_header_sections_t *header_sections, 364 libcerror_error_t **error ); 365 366 ssize_t libewf_section_xheader_write( 367 libewf_section_t *section, 368 libbfio_pool_t *file_io_pool, 369 int file_io_pool_entry, 370 off64_t section_offset, 371 libewf_header_sections_t *header_sections, 372 int8_t compression_level, 373 libcerror_error_t **error ); 374 375 ssize_t libewf_section_delta_chunk_read( 376 libewf_section_t *section, 377 libbfio_pool_t *file_io_pool, 378 int file_io_pool_entry, 379 uint32_t *chunk_index, 380 uint32_t *chunk_size, 381 libcerror_error_t **error ); 382 383 ssize_t libewf_section_delta_chunk_write( 384 libewf_section_t *section, 385 libbfio_pool_t *file_io_pool, 386 int file_io_pool_entry, 387 off64_t section_offset, 388 uint32_t chunk_index, 389 uint8_t *chunk_buffer, 390 uint32_t chunk_size, 391 uint8_t *checksum_buffer, 392 uint32_t *chunk_checksum, 393 uint8_t write_checksum, 394 libcerror_error_t **error ); 395 396 #if defined( __cplusplus ) 397 } 398 #endif 399 400 #endif 401 402