1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
// Copyright 2019-2021 Colin Finck <colin@reactos.org> // SPDX-License-Identifier: GPL-2.0-or-later use displaydoc::Display; use crate::key_value::KeyValueDataType; /// Central result type of nt-hive. pub type Result<T, E = NtHiveError> = core::result::Result<T, E>; /// Central error type of nt-hive. #[derive(Clone, Debug, Display)] pub enum NtHiveError { /// The checksum in the base block should be {expected}, but it is {actual} InvalidChecksum { expected: u32, actual: u32 }, /// The data at offset {offset:#010x} should have a size of {expected} bytes, but it only has {actual} bytes InvalidDataSize { offset: usize, expected: usize, actual: usize, }, /// The 4-byte signature field at offset {offset:#010x} should contain {expected:?}, but it contains {actual:?} InvalidFourByteSignature { offset: usize, expected: &'static [u8], actual: [u8; 4], }, /// The struct at offset {offset:#010x} should have a size of {expected} bytes, but only {actual} bytes are left in the slice InvalidHeaderSize { offset: usize, expected: usize, actual: usize, }, /// Expected one of the key value data types {expected:?}, but found {actual:?} InvalidKeyValueDataType { expected: &'static [KeyValueDataType], actual: KeyValueDataType, }, /// The size field at offset {offset:#010x} specifies {expected} bytes, but only {actual} bytes are left in the slice InvalidSizeField { offset: usize, expected: usize, actual: usize, }, /// The size field at offset {offset:#010x} specifies {size} bytes, but they are not aligned to the expected {expected_alignment} bytes InvalidSizeFieldAlignment { offset: usize, size: usize, expected_alignment: usize, }, /// The 2-byte signature field at offset {offset:#010x} should contain {expected:?}, but it contains {actual:?} InvalidTwoByteSignature { offset: usize, expected: &'static [u8], actual: [u8; 2], }, /// The sequence numbers in the base block do not match ({primary} != {secondary}) SequenceNumberMismatch { primary: u32, secondary: u32 }, /// The cell at offset {offset:#010x} with a size of {size} bytes is unallocated UnallocatedCell { offset: usize, size: i32 }, /// The clustering factor in the base block is expected to be {expected}, but it is {actual} UnsupportedClusteringFactor { expected: u32, actual: u32 }, /// The file format in the base block is expected to be {expected}, but it is {actual} UnsupportedFileFormat { expected: u32, actual: u32 }, /// The file type in the base block is expected to be {expected}, but it is {actual} UnsupportedFileType { expected: u32, actual: u32 }, /// The key value data type at offset {offset:#010x} is {actual:#010x}, which is not supported UnsupportedKeyValueDataType { offset: usize, actual: u32 }, /// The version in the base block ({major}.{minor}) is unsupported UnsupportedVersion { major: u32, minor: u32 }, } #[cfg(feature = "std")] impl std::error::Error for NtHiveError {}