From 2bddeb867856f96060971945884424fe16c637f7 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Mon, 26 Jul 2021 19:05:54 +0200 Subject: Implement `NtfsFileReference` to replace an opaque u64. --- src/file_reference.rs | 21 +++++++++++++++++++++ src/lib.rs | 2 ++ src/structured_values/file_name.rs | 3 ++- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/file_reference.rs diff --git a/src/file_reference.rs b/src/file_reference.rs new file mode 100644 index 0000000..337d7c5 --- /dev/null +++ b/src/file_reference.rs @@ -0,0 +1,21 @@ +// Copyright 2021 Colin Finck +// SPDX-License-Identifier: GPL-2.0-or-later + +use binread::BinRead; + +#[derive(BinRead, Clone, Debug)] +pub struct NtfsFileReference(u64); + +impl NtfsFileReference { + pub(crate) const fn new(file_reference_data: u64) -> Self { + Self(file_reference_data) + } + + pub fn file_record_number(&self) -> u64 { + self.0 >> 16 + } + + pub fn sequence_number(&self) -> u16 { + self.0 as u16 + } +} diff --git a/src/lib.rs b/src/lib.rs index 30548c3..487ac50 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,6 +13,7 @@ mod attribute; mod attribute_value; mod boot_sector; mod error; +mod file_reference; mod guid; mod index; mod index_entry; @@ -29,6 +30,7 @@ mod types; pub use crate::attribute::*; pub use crate::attribute_value::*; pub use crate::error::*; +pub use crate::file_reference::*; pub use crate::guid::*; pub use crate::index::*; pub use crate::ntfs::*; diff --git a/src/structured_values/file_name.rs b/src/structured_values/file_name.rs index 96fcf92..a98aff1 100644 --- a/src/structured_values/file_name.rs +++ b/src/structured_values/file_name.rs @@ -3,6 +3,7 @@ use crate::attribute::NtfsAttributeType; use crate::error::{NtfsError, Result}; +use crate::file_reference::NtfsFileReference; use crate::string::NtfsString; use crate::structured_values::{ NtfsFileAttributeFlags, NtfsStructuredValue, NtfsStructuredValueFromData, @@ -23,7 +24,7 @@ const FILE_NAME_MIN_SIZE: usize = FILE_NAME_HEADER_SIZE + mem::size_of::(); #[allow(unused)] #[derive(BinRead, Clone, Debug)] struct FileNameHeader { - parent_directory_ref: u64, + parent_directory_ref: NtfsFileReference, creation_time: NtfsTime, modification_time: NtfsTime, mft_record_modification_time: NtfsTime, -- cgit v1.2.3