1 /* 2 * Page functions 3 * 4 * Copyright (C) 2009-2021, 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( _LIBESEDB_PAGE_H ) 23 #define _LIBESEDB_PAGE_H 24 25 #include <common.h> 26 #include <types.h> 27 28 #include "libesedb_io_handle.h" 29 #include "libesedb_libbfio.h" 30 #include "libesedb_libcdata.h" 31 #include "libesedb_libcerror.h" 32 #include "libesedb_page_header.h" 33 #include "libesedb_page_value.h" 34 35 #if defined( __cplusplus ) 36 extern "C" { 37 #endif 38 39 typedef struct libesedb_page libesedb_page_t; 40 41 struct libesedb_page 42 { 43 /* The page number 44 */ 45 uint32_t page_number; 46 47 /* The file offset of the page 48 */ 49 off64_t offset; 50 51 /* The header 52 */ 53 libesedb_page_header_t *header; 54 55 /* The data 56 */ 57 uint8_t *data; 58 59 /* The data size 60 */ 61 size_t data_size; 62 63 /* The values array 64 */ 65 libcdata_array_t *values_array; 66 }; 67 68 int libesedb_page_initialize( 69 libesedb_page_t **page, 70 libcerror_error_t **error ); 71 72 int libesedb_page_free( 73 libesedb_page_t **page, 74 libcerror_error_t **error ); 75 76 int libesedb_page_calculate_checksums( 77 libesedb_page_t *page, 78 libesedb_io_handle_t *io_handle, 79 const uint8_t *page_data, 80 size_t page_data_size, 81 uint32_t *ecc32_checksum, 82 uint32_t *xor32_checksum, 83 libcerror_error_t **error ); 84 85 int libesedb_page_read_tags( 86 libesedb_page_t *page, 87 libesedb_io_handle_t *io_handle, 88 const uint8_t *page_data, 89 size_t page_data_size, 90 uint16_t number_of_page_tags, 91 libcerror_error_t **error ); 92 93 int libesedb_page_read_values( 94 libesedb_page_t *page, 95 libesedb_io_handle_t *io_handle, 96 uint8_t *page_data, 97 size_t page_data_size, 98 size_t page_values_data_offset, 99 libcerror_error_t **error ); 100 101 int libesedb_page_read_file_io_handle( 102 libesedb_page_t *page, 103 libesedb_io_handle_t *io_handle, 104 libbfio_handle_t *file_io_handle, 105 off64_t file_offset, 106 libcerror_error_t **error ); 107 108 int libesedb_page_validate_root_page( 109 libesedb_page_t *page, 110 libcerror_error_t **error ); 111 112 int libesedb_page_validate_space_tree_page( 113 libesedb_page_t *page, 114 libcerror_error_t **error ); 115 116 int libesedb_page_validate_page( 117 libesedb_page_t *page, 118 libcerror_error_t **error ); 119 120 int libesedb_page_get_previous_page_number( 121 libesedb_page_t *page, 122 uint32_t *previous_page_number, 123 libcerror_error_t **error ); 124 125 int libesedb_page_get_next_page_number( 126 libesedb_page_t *page, 127 uint32_t *next_page_number, 128 libcerror_error_t **error ); 129 130 int libesedb_page_get_father_data_page_object_identifier( 131 libesedb_page_t *page, 132 uint32_t *father_data_page_object_identifier, 133 libcerror_error_t **error ); 134 135 int libesedb_page_get_flags( 136 libesedb_page_t *page, 137 uint32_t *flags, 138 libcerror_error_t **error ); 139 140 int libesedb_page_get_number_of_values( 141 libesedb_page_t *page, 142 uint16_t *number_of_values, 143 libcerror_error_t **error ); 144 145 int libesedb_page_get_value_by_index( 146 libesedb_page_t *page, 147 uint16_t value_index, 148 libesedb_page_value_t **page_value, 149 libcerror_error_t **error ); 150 151 #if defined( __cplusplus ) 152 } 153 #endif 154 155 #endif /* !defined( _LIBESEDB_PAGE_H ) */ 156 157