smb_fscc/
set_file_info.rs1use std::ops::Deref;
2
3use crate::file_info_classes;
4
5use smb_dtyp::binrw_util::prelude::{Boolean, SizedWideString};
6
7use super::{
8 FileBasicInformation, FileFullEaInformation, FileModeInformation, FileNameInformation,
9 FilePipeInformation, FilePositionInformation,
10};
11
12file_info_classes! {
13 pub SetFileInfo {
14 pub Allocation = 19,
15 pub Basic = 4,
16 pub Disposition = 13,
17 pub EndOfFile = 20,
18 pub FullEa = 15,
19 pub Link = 11,
20 pub Mode = 16,
21 pub Pipe = 23,
22 pub Position = 14,
23 pub Rename = 10,
24 pub ShortName = 40,
25 pub ValidDataLength = 39,
26 }, Write
27}
28
29#[binrw::binrw]
30#[derive(Debug, PartialEq, Eq)]
31pub struct FileEndOfFileInformation {
32 pub end_of_file: u64,
33}
34
35#[binrw::binrw]
36#[derive(Debug, PartialEq, Eq)]
37pub struct FileDispositionInformation {
38 pub delete_pending: Boolean,
40}
41
42impl Default for FileDispositionInformation {
43 fn default() -> Self {
44 Self {
45 delete_pending: true.into(),
46 }
47 }
48}
49
50#[binrw::binrw]
51#[derive(Debug, PartialEq, Eq)]
52pub struct FileRenameInformation2 {
53 pub replace_if_exists: Boolean,
54 #[bw(calc = 0)]
55 _reserved: u8,
56 #[bw(calc = 0)]
57 _reserved2: u16,
58 #[bw(calc = 0)]
59 _reserved3: u32,
60 pub root_directory: u64,
61 #[bw(try_calc = file_name.size().try_into())]
62 _file_name_length: u32,
63 #[br(args(_file_name_length as u64))]
64 pub file_name: SizedWideString,
65}
66type FileRenameInformation = FileRenameInformation2;
67
68#[binrw::binrw]
69#[derive(Debug, PartialEq, Eq)]
70pub struct FileAllocationInformation {
71 pub allocation_size: u64,
72}
73
74#[binrw::binrw]
76#[derive(Debug, PartialEq, Eq)]
77pub struct FileLinkInformation {
78 pub replace_if_exists: Boolean,
79 #[bw(calc = 0)]
80 _reserved: u8,
81 #[bw(calc = 0)]
82 _reserved2: u16,
83 #[bw(calc = 0)]
84 _reserved3: u32,
85 #[bw(calc = 0)]
87 #[br(assert(root_directory == 0))]
88 root_directory: u64,
89 #[bw(try_calc = file_name.size().try_into())]
90 _file_name_length: u32,
91 #[br(args(_file_name_length as u64))]
92 pub file_name: SizedWideString,
93}
94
95#[binrw::binrw]
96#[derive(Debug, PartialEq, Eq)]
97pub struct FileShortNameInformation {
98 inner: FileNameInformation,
99}
100
101impl Deref for FileShortNameInformation {
102 type Target = FileNameInformation;
103
104 fn deref(&self) -> &Self::Target {
105 &self.inner
106 }
107}
108
109#[binrw::binrw]
110#[derive(Debug, PartialEq, Eq)]
111pub struct FileValidDataLengthInformation {
112 pub valid_data_length: u64,
113}