Add SMB Share Snapshots (Phase 1-4): FSCTL_SRV_SNAPSHOT_* handlers
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled

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:
Warren
2026-06-21 12:38:15 +08:00
parent 204186e34b
commit a28b7f0929
6 changed files with 483 additions and 2 deletions

View File

@@ -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,
}
}