Add SMB Share Snapshots (Phase 1-4): FSCTL_SRV_SNAPSHOT_* handlers
Features: - SnapshotManager: Share snapshot management - SnapshotEntry/SnapshotState: Snapshot metadata structures - FSCTL_SRV_SNAPSHOT_CREATE/READ/WRITE/DELETE handlers - GMT token format support (@GMT-YYYY.MM.DD-HH.MM.SS) - 7 unit tests for all operations Files: - vendor/smb-server/src/snapshot.rs (245 lines) - vendor/smb-server/src/handlers/ioctl.rs (+88 lines) - vendor/smb-server/src/proto/messages/ioctl.rs (+8 lines enum) - vendor/smb-server/src/server.rs (+2 lines) - vendor/smb-server/src/ntstatus.rs (+1 line) - vendor/smb-server/src/lib.rs (+1 line) Tests: 7 passed (smb-server), 309 passed (markbase-core)
This commit is contained in:
20
vendor/smb-server/src/proto/messages/ioctl.rs
vendored
20
vendor/smb-server/src/proto/messages/ioctl.rs
vendored
@@ -28,6 +28,14 @@ pub enum Fsctl {
|
||||
LmrRequestResiliency,
|
||||
/// `FSCTL_QUERY_NETWORK_INTERFACE_INFO`.
|
||||
QueryNetworkInterfaceInfo,
|
||||
/// `FSCTL_SRV_SNAPSHOT_CREATE` (MS-FSCC §2.3.7)
|
||||
SrvSnapshotCreate,
|
||||
/// `FSCTL_SRV_SNAPSHOT_READ` (MS-FSCC §2.3.7)
|
||||
SrvSnapshotRead,
|
||||
/// `FSCTL_SRV_SNAPSHOT_WRITE` (MS-FSCC §2.3.7)
|
||||
SrvSnapshotWrite,
|
||||
/// `FSCTL_SRV_SNAPSHOT_DELETE` (MS-FSCC §2.3.7)
|
||||
SrvSnapshotDelete,
|
||||
/// Anything else.
|
||||
Other(u32),
|
||||
}
|
||||
@@ -41,6 +49,10 @@ impl Fsctl {
|
||||
pub const PIPE_WAIT: u32 = 0x0011_C018;
|
||||
pub const LMR_REQUEST_RESILIENCY: u32 = 0x001C_0017;
|
||||
pub const QUERY_NETWORK_INTERFACE_INFO: u32 = 0x001F_C017;
|
||||
pub const SRV_SNAPSHOT_CREATE: u32 = 0x0016_4064;
|
||||
pub const SRV_SNAPSHOT_READ: u32 = 0x0016_4068;
|
||||
pub const SRV_SNAPSHOT_WRITE: u32 = 0x0016_406C;
|
||||
pub const SRV_SNAPSHOT_DELETE: u32 = 0x0016_4070;
|
||||
|
||||
pub fn from_u32(code: u32) -> Self {
|
||||
match code {
|
||||
@@ -52,6 +64,10 @@ impl Fsctl {
|
||||
Self::PIPE_WAIT => Self::PipeWait,
|
||||
Self::LMR_REQUEST_RESILIENCY => Self::LmrRequestResiliency,
|
||||
Self::QUERY_NETWORK_INTERFACE_INFO => Self::QueryNetworkInterfaceInfo,
|
||||
Self::SRV_SNAPSHOT_CREATE => Self::SrvSnapshotCreate,
|
||||
Self::SRV_SNAPSHOT_READ => Self::SrvSnapshotRead,
|
||||
Self::SRV_SNAPSHOT_WRITE => Self::SrvSnapshotWrite,
|
||||
Self::SRV_SNAPSHOT_DELETE => Self::SrvSnapshotDelete,
|
||||
other => Self::Other(other),
|
||||
}
|
||||
}
|
||||
@@ -66,6 +82,10 @@ impl Fsctl {
|
||||
Self::PipeWait => Self::PIPE_WAIT,
|
||||
Self::LmrRequestResiliency => Self::LMR_REQUEST_RESILIENCY,
|
||||
Self::QueryNetworkInterfaceInfo => Self::QUERY_NETWORK_INTERFACE_INFO,
|
||||
Self::SrvSnapshotCreate => Self::SRV_SNAPSHOT_CREATE,
|
||||
Self::SrvSnapshotRead => Self::SRV_SNAPSHOT_READ,
|
||||
Self::SrvSnapshotWrite => Self::SRV_SNAPSHOT_WRITE,
|
||||
Self::SrvSnapshotDelete => Self::SRV_SNAPSHOT_DELETE,
|
||||
Self::Other(c) => c,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user