// // Created by Shell on 2026-06-18. // #ifndef SEADISK_SEAFILE_FILE_SYSTEM_HPP #define SEADISK_SEAFILE_FILE_SYSTEM_HPP #include #include #include "seafile/seafile_api.hpp" #include "seafile/token_type.hpp" namespace seafile::fs { class SeafileFileSystem final { std::string repo_id; std::string token; TokenType token_type = TokenType::TOKEN; SeaFileApi api; std::wstring mount_point; public: explicit SeafileFileSystem(const std::string &server, const std::wstring &mount_point) : api(server), mount_point(mount_point) { } void auth(const std::string &username, const std::string &password); SeafileFileSystem(const SeafileFileSystem &) = delete; SeafileFileSystem(SeafileFileSystem &&) = delete; SeafileFileSystem &operator=(const SeafileFileSystem &) = delete; SeafileFileSystem &operator=(SeafileFileSystem &&) = delete; NTSTATUS GetVolumeInfo(FSP_FSCTL_VOLUME_INFO *VolumeInfo); NTSTATUS SetVolumeLabel_(PWSTR VolumeLabel, FSP_FSCTL_VOLUME_INFO *VolumeInfo); NTSTATUS GetSecurityByName(PWSTR FileName, PUINT32 PFileAttributes, PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize); NTSTATUS Open( PWSTR FileName, UINT32 CreateOptions, UINT32 GrantedAccess, PVOID *PFileContext, FSP_FSCTL_FILE_INFO *FileInfo); NTSTATUS Read(PVOID FileContext, PVOID Buffer, UINT64 Offset, ULONG Length, PULONG PBytesTransferred); NTSTATUS GetFileInfo(HANDLE Handle, FSP_FSCTL_FILE_INFO *FileInfo); VOID Close(PVOID FileContext0); NTSTATUS ReadDirectory(PVOID FileContext0, PWSTR Pattern, PWSTR Marker, PVOID Buffer, ULONG BufferLength, PULONG PBytesTransferred); }; } #endif //SEADISK_SEAFILE_FILE_SYSTEM_HPP