11//! Create & Close (files) requests and responses.
22
3- use std:: io:: SeekFrom ;
3+ use std:: io:: { Cursor , SeekFrom } ;
44
55use super :: super :: binrw_util:: prelude:: * ;
66use super :: super :: guid:: Guid ;
@@ -10,6 +10,36 @@ use binrw::io::TakeSeekExt;
1010use binrw:: prelude:: * ;
1111use modular_bitfield:: prelude:: * ;
1212
13+ /// 2.2.14.1: SMB2_FILEID
14+ #[ binrw:: binrw]
15+ #[ derive( Debug , PartialEq , Eq , Clone , Copy , Default ) ]
16+ pub struct FileId {
17+ pub persistent : u64 ,
18+ pub volatile : u64 ,
19+ }
20+
21+ impl FileId {
22+ pub const EMPTY : FileId = FileId {
23+ persistent : 0 ,
24+ volatile : 0 ,
25+ } ;
26+ }
27+
28+ impl From < [ u8 ; 16 ] > for FileId {
29+ fn from ( data : [ u8 ; 16 ] ) -> Self {
30+ let mut cursor = Cursor :: new ( data) ;
31+ Self :: read_le ( & mut cursor) . unwrap ( )
32+ }
33+ }
34+
35+ impl From < Guid > for FileId {
36+ fn from ( guid : Guid ) -> Self {
37+ let mut cursor = Cursor :: new ( Vec :: new ( ) ) ;
38+ guid. write_le ( & mut cursor) . unwrap ( ) ;
39+ <Self as From < [ u8 ; 16 ] > >:: from ( cursor. into_inner ( ) . try_into ( ) . unwrap ( ) )
40+ }
41+ }
42+
1343#[ binrw:: binrw]
1444#[ derive( Debug ) ]
1545pub struct CreateRequest {
@@ -145,7 +175,7 @@ pub struct CreateResponse {
145175 #[ bw( calc = 0 ) ]
146176 #[ br( assert( _reserved2 == 0 ) ) ]
147177 _reserved2 : u32 ,
148- pub file_id : Guid ,
178+ pub file_id : FileId ,
149179 // assert it's 8-aligned
150180 #[ br( assert( create_contexts_offset. value & 0x7 == 0 ) ) ]
151181 #[ bw( calc = PosMarker :: default ( ) ) ]
@@ -512,7 +542,7 @@ pub struct DurableHandleV2Flags {
512542#[ binrw:: binrw]
513543#[ derive( Debug , PartialEq , Eq ) ]
514544pub struct DurableHandleReconnectV2 {
515- file_id : Guid ,
545+ file_id : FileId ,
516546 create_guid : Guid ,
517547 flags : DurableHandleV2Flags ,
518548}
@@ -632,7 +662,7 @@ pub struct CloseRequest {
632662 #[ bw( calc = 0 ) ]
633663 #[ br( assert( _reserved == 0 ) ) ]
634664 _reserved : u32 ,
635- pub file_id : Guid ,
665+ pub file_id : FileId ,
636666}
637667
638668#[ binrw:: binrw]
0 commit comments