refactor
This commit is contained in:
parent
2945793de9
commit
876a1e9cd8
@ -50,10 +50,10 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
app_config &config_;
|
app_config &config_;
|
||||||
lock_data &lock_;
|
|
||||||
remote_winfsp_drive &drive_;
|
remote_winfsp_drive &drive_;
|
||||||
const std::vector<std::string> drive_args_;
|
const std::vector<std::string> drive_args_;
|
||||||
FileSystemHost host_;
|
FileSystemHost host_;
|
||||||
|
lock_data &lock_;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
auto OnStart(ULONG, PWSTR *) -> NTSTATUS override;
|
auto OnStart(ULONG, PWSTR *) -> NTSTATUS override;
|
||||||
@ -75,8 +75,8 @@ private:
|
|||||||
static void set_file_info(FileInfo &dest, const remote::file_info &src);
|
static void set_file_info(FileInfo &dest, const remote::file_info &src);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
auto CanDelete(PVOID file_node, PVOID file_desc,
|
auto CanDelete(PVOID file_node, PVOID file_desc, PWSTR file_name)
|
||||||
PWSTR file_name) -> NTSTATUS override;
|
-> NTSTATUS override;
|
||||||
|
|
||||||
VOID Cleanup(PVOID file_node, PVOID file_desc, PWSTR file_name,
|
VOID Cleanup(PVOID file_node, PVOID file_desc, PWSTR file_name,
|
||||||
ULONG flags) override;
|
ULONG flags) override;
|
||||||
@ -88,11 +88,11 @@ public:
|
|||||||
UINT64 allocation_size, PVOID *file_node, PVOID *file_desc,
|
UINT64 allocation_size, PVOID *file_node, PVOID *file_desc,
|
||||||
OpenFileInfo *ofi) -> NTSTATUS override;
|
OpenFileInfo *ofi) -> NTSTATUS override;
|
||||||
|
|
||||||
auto Flush(PVOID file_node, PVOID file_desc,
|
auto Flush(PVOID file_node, PVOID file_desc, FileInfo *file_info)
|
||||||
FileInfo *file_info) -> NTSTATUS override;
|
-> NTSTATUS override;
|
||||||
|
|
||||||
auto GetFileInfo(PVOID file_node, PVOID file_desc,
|
auto GetFileInfo(PVOID file_node, PVOID file_desc, FileInfo *file_info)
|
||||||
FileInfo *file_info) -> NTSTATUS override;
|
-> NTSTATUS override;
|
||||||
|
|
||||||
auto GetSecurityByName(PWSTR file_name, PUINT32 attributes,
|
auto GetSecurityByName(PWSTR file_name, PUINT32 attributes,
|
||||||
PSECURITY_DESCRIPTOR descriptor,
|
PSECURITY_DESCRIPTOR descriptor,
|
||||||
@ -107,8 +107,8 @@ public:
|
|||||||
auto Mounted(PVOID host) -> NTSTATUS override;
|
auto Mounted(PVOID host) -> NTSTATUS override;
|
||||||
|
|
||||||
auto Open(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
|
auto Open(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
|
||||||
PVOID *file_node, PVOID *file_desc,
|
PVOID *file_node, PVOID *file_desc, OpenFileInfo *ofi)
|
||||||
OpenFileInfo *ofi) -> NTSTATUS override;
|
-> NTSTATUS override;
|
||||||
|
|
||||||
auto Overwrite(PVOID file_node, PVOID file_desc, UINT32 attributes,
|
auto Overwrite(PVOID file_node, PVOID file_desc, UINT32 attributes,
|
||||||
BOOLEAN replace_attributes, UINT64 allocation_size,
|
BOOLEAN replace_attributes, UINT64 allocation_size,
|
||||||
@ -122,8 +122,8 @@ public:
|
|||||||
PULONG bytes_transferred) -> NTSTATUS override;
|
PULONG bytes_transferred) -> NTSTATUS override;
|
||||||
|
|
||||||
auto Rename(PVOID file_node, PVOID file_desc, PWSTR file_name,
|
auto Rename(PVOID file_node, PVOID file_desc, PWSTR file_name,
|
||||||
PWSTR new_file_name,
|
PWSTR new_file_name, BOOLEAN replace_if_exists)
|
||||||
BOOLEAN replace_if_exists) -> NTSTATUS override;
|
-> NTSTATUS override;
|
||||||
|
|
||||||
auto SetBasicInfo(PVOID file_node, PVOID file_desc, UINT32 attributes,
|
auto SetBasicInfo(PVOID file_node, PVOID file_desc, UINT32 attributes,
|
||||||
UINT64 creation_time, UINT64 last_access_time,
|
UINT64 creation_time, UINT64 last_access_time,
|
||||||
@ -131,15 +131,15 @@ public:
|
|||||||
FileInfo *file_info) -> NTSTATUS override;
|
FileInfo *file_info) -> NTSTATUS override;
|
||||||
|
|
||||||
auto SetFileSize(PVOID file_node, PVOID file_desc, UINT64 new_size,
|
auto SetFileSize(PVOID file_node, PVOID file_desc, UINT64 new_size,
|
||||||
BOOLEAN set_allocation_size,
|
BOOLEAN set_allocation_size, FileInfo *file_info)
|
||||||
FileInfo *file_info) -> NTSTATUS override;
|
-> NTSTATUS override;
|
||||||
|
|
||||||
VOID Unmounted(PVOID host) override;
|
VOID Unmounted(PVOID host) override;
|
||||||
|
|
||||||
auto Write(PVOID file_node, PVOID file_desc, PVOID buffer, UINT64 offset,
|
auto Write(PVOID file_node, PVOID file_desc, PVOID buffer, UINT64 offset,
|
||||||
ULONG length, BOOLEAN write_to_end, BOOLEAN constrained_io,
|
ULONG length, BOOLEAN write_to_end, BOOLEAN constrained_io,
|
||||||
PULONG bytes_transferred,
|
PULONG bytes_transferred, FileInfo *file_info)
|
||||||
FileInfo *file_info) -> NTSTATUS override;
|
-> NTSTATUS override;
|
||||||
|
|
||||||
void shutdown() { ::GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); }
|
void shutdown() { ::GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); }
|
||||||
|
|
||||||
|
@ -53,11 +53,11 @@ private:
|
|||||||
~winfsp_service() override = default;
|
~winfsp_service() override = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
lock_data &lock_;
|
|
||||||
winfsp_drive &drive_;
|
|
||||||
const std::vector<std::string> drive_args_;
|
|
||||||
FileSystemHost host_;
|
|
||||||
app_config &config_;
|
app_config &config_;
|
||||||
|
winfsp_drive &drive_;
|
||||||
|
std::vector<std::string> drive_args_;
|
||||||
|
FileSystemHost host_;
|
||||||
|
lock_data &lock_;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
auto OnStart(ULONG, PWSTR *) -> NTSTATUS override;
|
auto OnStart(ULONG, PWSTR *) -> NTSTATUS override;
|
||||||
|
@ -41,20 +41,19 @@ namespace repertory::remote_winfsp {
|
|||||||
remote_winfsp_drive::winfsp_service::winfsp_service(
|
remote_winfsp_drive::winfsp_service::winfsp_service(
|
||||||
lock_data &lock, remote_winfsp_drive &drive,
|
lock_data &lock, remote_winfsp_drive &drive,
|
||||||
std::vector<std::string> drive_args, app_config &config)
|
std::vector<std::string> drive_args, app_config &config)
|
||||||
: Service(&(L"RepertoryRemote_" +
|
: Service(std::wstring{REPERTORY_W}.data()),
|
||||||
utils::string::from_utf8(lock.get_unique_id()))[0U]),
|
|
||||||
config_(config),
|
config_(config),
|
||||||
lock_(lock),
|
|
||||||
drive_(drive),
|
drive_(drive),
|
||||||
drive_args_(std::move(drive_args)),
|
drive_args_(std::move(drive_args)),
|
||||||
host_(drive) {}
|
host_(drive),
|
||||||
|
lock_(lock) {}
|
||||||
|
|
||||||
auto remote_winfsp_drive::winfsp_service::OnStart(ULONG, PWSTR *) -> NTSTATUS {
|
auto remote_winfsp_drive::winfsp_service::OnStart(ULONG, PWSTR *) -> NTSTATUS {
|
||||||
REPERTORY_USES_FUNCTION_NAME();
|
REPERTORY_USES_FUNCTION_NAME();
|
||||||
|
|
||||||
const auto mount_location = utils::string::to_lower(utils::path::absolute(
|
auto mount_location = utils::string::to_lower(utils::path::absolute(
|
||||||
(drive_args_.size() > 1U) ? drive_args_.at(1U) : ""));
|
(drive_args_.size() > 1U) ? drive_args_.at(1U) : ""));
|
||||||
const auto drive_letter =
|
auto drive_letter =
|
||||||
((mount_location.size() == 2U) ||
|
((mount_location.size() == 2U) ||
|
||||||
((mount_location.size() == 3U) && (mount_location.at(2U) == '\\'))) &&
|
((mount_location.size() == 3U) && (mount_location.at(2U) == '\\'))) &&
|
||||||
(mount_location.at(1U) == ':');
|
(mount_location.at(1U) == ':');
|
||||||
@ -137,7 +136,7 @@ auto remote_winfsp_drive::Create(PWSTR file_name, UINT32 create_options,
|
|||||||
file_desc, &fi, normalized_name, exists);
|
file_desc, &fi, normalized_name, exists);
|
||||||
if (ret == STATUS_SUCCESS) {
|
if (ret == STATUS_SUCCESS) {
|
||||||
set_file_info(ofi->FileInfo, fi);
|
set_file_info(ofi->FileInfo, fi);
|
||||||
const auto file_path = utils::string::from_utf8(normalized_name);
|
auto file_path = utils::string::from_utf8(normalized_name);
|
||||||
wcsncpy(ofi->NormalizedName, file_path.data(), wcslen(file_path.c_str()));
|
wcsncpy(ofi->NormalizedName, file_path.data(), wcslen(file_path.c_str()));
|
||||||
ofi->NormalizedNameSize =
|
ofi->NormalizedNameSize =
|
||||||
static_cast<UINT16>(wcslen(file_path.c_str()) * sizeof(WCHAR));
|
static_cast<UINT16>(wcslen(file_path.c_str()) * sizeof(WCHAR));
|
||||||
@ -196,8 +195,7 @@ auto remote_winfsp_drive::GetVolumeInfo(VolumeInfo *volume_info) -> NTSTATUS {
|
|||||||
auto ret = remote_instance_->winfsp_get_volume_info(
|
auto ret = remote_instance_->winfsp_get_volume_info(
|
||||||
volume_info->TotalSize, volume_info->FreeSize, volume_label);
|
volume_info->TotalSize, volume_info->FreeSize, volume_label);
|
||||||
if (ret == STATUS_SUCCESS) {
|
if (ret == STATUS_SUCCESS) {
|
||||||
const auto byte_size =
|
auto byte_size = static_cast<UINT16>(volume_label.size() * sizeof(WCHAR));
|
||||||
static_cast<UINT16>(volume_label.size() * sizeof(WCHAR));
|
|
||||||
wcscpy_s(&volume_info->VolumeLabel[0U], 32,
|
wcscpy_s(&volume_info->VolumeLabel[0U], 32,
|
||||||
utils::string::from_utf8(volume_label).c_str());
|
utils::string::from_utf8(volume_label).c_str());
|
||||||
volume_info->VolumeLabelLength =
|
volume_info->VolumeLabelLength =
|
||||||
@ -213,20 +211,20 @@ auto remote_winfsp_drive::Init(PVOID host) -> NTSTATUS {
|
|||||||
&(L"\\repertory\\" +
|
&(L"\\repertory\\" +
|
||||||
std::wstring(file_system_host->FileSystemName()).substr(0U, 1U))[0U]);
|
std::wstring(file_system_host->FileSystemName()).substr(0U, 1U))[0U]);
|
||||||
}
|
}
|
||||||
file_system_host->SetFileSystemName(std::wstring{REPERTORY_W}.data());
|
|
||||||
|
file_system_host->SetCasePreservedNames(TRUE);
|
||||||
|
file_system_host->SetCaseSensitiveSearch(FALSE);
|
||||||
|
file_system_host->SetFileInfoTimeout(1000);
|
||||||
file_system_host->SetFlushAndPurgeOnCleanup(TRUE);
|
file_system_host->SetFlushAndPurgeOnCleanup(TRUE);
|
||||||
|
file_system_host->SetNamedStreams(FALSE);
|
||||||
|
file_system_host->SetPassQueryDirectoryPattern(FALSE);
|
||||||
|
file_system_host->SetPersistentAcls(FALSE);
|
||||||
|
file_system_host->SetPostCleanupWhenModifiedOnly(TRUE);
|
||||||
file_system_host->SetReparsePoints(FALSE);
|
file_system_host->SetReparsePoints(FALSE);
|
||||||
file_system_host->SetReparsePointsAccessCheck(FALSE);
|
file_system_host->SetReparsePointsAccessCheck(FALSE);
|
||||||
file_system_host->SetSectorSize(WINFSP_ALLOCATION_UNIT);
|
file_system_host->SetSectorSize(WINFSP_ALLOCATION_UNIT);
|
||||||
file_system_host->SetSectorsPerAllocationUnit(1);
|
file_system_host->SetSectorsPerAllocationUnit(1);
|
||||||
file_system_host->SetFileInfoTimeout(1000);
|
|
||||||
file_system_host->SetCaseSensitiveSearch(FALSE);
|
|
||||||
file_system_host->SetCasePreservedNames(TRUE);
|
|
||||||
file_system_host->SetNamedStreams(FALSE);
|
|
||||||
file_system_host->SetUnicodeOnDisk(TRUE);
|
file_system_host->SetUnicodeOnDisk(TRUE);
|
||||||
file_system_host->SetPersistentAcls(FALSE);
|
|
||||||
file_system_host->SetPostCleanupWhenModifiedOnly(TRUE);
|
|
||||||
file_system_host->SetPassQueryDirectoryPattern(FALSE);
|
|
||||||
file_system_host->SetVolumeCreationTime(utils::time::get_time_now());
|
file_system_host->SetVolumeCreationTime(utils::time::get_time_now());
|
||||||
file_system_host->SetVolumeSerialNumber(0);
|
file_system_host->SetVolumeSerialNumber(0);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
@ -236,10 +234,10 @@ auto remote_winfsp_drive::mount(const std::vector<std::string> &drive_args)
|
|||||||
-> int {
|
-> int {
|
||||||
std::vector<std::string> parsed_drive_args;
|
std::vector<std::string> parsed_drive_args;
|
||||||
|
|
||||||
const auto force_no_console = utils::collection::includes(drive_args, "-nc");
|
auto force_no_console = utils::collection::includes(drive_args, "-nc");
|
||||||
|
|
||||||
auto enable_console = false;
|
auto enable_console = false;
|
||||||
for (const auto &arg : drive_args) {
|
for (auto &&arg : drive_args) {
|
||||||
if (arg == "-f") {
|
if (arg == "-f") {
|
||||||
if (not force_no_console) {
|
if (not force_no_console) {
|
||||||
enable_console = true;
|
enable_console = true;
|
||||||
@ -289,7 +287,7 @@ auto remote_winfsp_drive::Open(PWSTR file_name, UINT32 create_options,
|
|||||||
file_desc, &fi, normalize_name);
|
file_desc, &fi, normalize_name);
|
||||||
if (ret == STATUS_SUCCESS) {
|
if (ret == STATUS_SUCCESS) {
|
||||||
set_file_info(ofi->FileInfo, fi);
|
set_file_info(ofi->FileInfo, fi);
|
||||||
const auto file_path = utils::string::from_utf8(normalize_name);
|
auto file_path = utils::string::from_utf8(normalize_name);
|
||||||
wcsncpy(ofi->NormalizedName, file_path.data(), wcslen(file_path.c_str()));
|
wcsncpy(ofi->NormalizedName, file_path.data(), wcslen(file_path.c_str()));
|
||||||
ofi->NormalizedNameSize =
|
ofi->NormalizedNameSize =
|
||||||
static_cast<UINT16>(wcslen(file_path.c_str()) * sizeof(WCHAR));
|
static_cast<UINT16>(wcslen(file_path.c_str()) * sizeof(WCHAR));
|
||||||
@ -312,7 +310,7 @@ auto remote_winfsp_drive::Overwrite(PVOID /*file_node*/, PVOID file_desc,
|
|||||||
|
|
||||||
void remote_winfsp_drive::populate_file_info(const json &item,
|
void remote_winfsp_drive::populate_file_info(const json &item,
|
||||||
FSP_FSCTL_FILE_INFO &file_info) {
|
FSP_FSCTL_FILE_INFO &file_info) {
|
||||||
const auto di = directory_item::from_json(item);
|
auto di = directory_item::from_json(item);
|
||||||
file_info.FileSize = di.directory ? 0 : di.size;
|
file_info.FileSize = di.directory ? 0 : di.size;
|
||||||
file_info.AllocationSize =
|
file_info.AllocationSize =
|
||||||
utils::divide_with_ceiling(file_info.FileSize, WINFSP_ALLOCATION_UNIT) *
|
utils::divide_with_ceiling(file_info.FileSize, WINFSP_ALLOCATION_UNIT) *
|
||||||
@ -353,9 +351,9 @@ auto remote_winfsp_drive::ReadDirectory(PVOID /*file_node*/, PVOID file_desc,
|
|||||||
directory_buffer, static_cast<BOOLEAN>(nullptr == marker),
|
directory_buffer, static_cast<BOOLEAN>(nullptr == marker),
|
||||||
&ret)) {
|
&ret)) {
|
||||||
auto item_found = false;
|
auto item_found = false;
|
||||||
for (const auto &item : item_list) {
|
for (auto &&item : item_list) {
|
||||||
const auto item_path = item["path"].get<std::string>();
|
auto item_path = item["path"].get<std::string>();
|
||||||
const auto display_name = utils::string::from_utf8(
|
auto display_name = utils::string::from_utf8(
|
||||||
utils::path::strip_to_file_name(item_path));
|
utils::path::strip_to_file_name(item_path));
|
||||||
if (not marker || (marker && item_found)) {
|
if (not marker || (marker && item_found)) {
|
||||||
// if (not utils::path::is_ads_file_path(item_path)) {
|
// if (not utils::path::is_ads_file_path(item_path)) {
|
||||||
|
@ -61,11 +61,11 @@ winfsp_drive::winfsp_service::winfsp_service(
|
|||||||
lock_data &lock, winfsp_drive &drive, std::vector<std::string> drive_args,
|
lock_data &lock, winfsp_drive &drive, std::vector<std::string> drive_args,
|
||||||
app_config &config)
|
app_config &config)
|
||||||
: Service(std::wstring{REPERTORY_W}.data()),
|
: Service(std::wstring{REPERTORY_W}.data()),
|
||||||
lock_(lock),
|
config_(config),
|
||||||
drive_(drive),
|
drive_(drive),
|
||||||
drive_args_(std::move(drive_args)),
|
drive_args_(std::move(drive_args)),
|
||||||
host_(drive),
|
host_(drive),
|
||||||
config_(config) {}
|
lock_(lock) {}
|
||||||
|
|
||||||
auto winfsp_drive::handle_error(std::string_view function_name,
|
auto winfsp_drive::handle_error(std::string_view function_name,
|
||||||
const std::string &api_path, api_error error,
|
const std::string &api_path, api_error error,
|
||||||
@ -554,25 +554,24 @@ auto winfsp_drive::Init(PVOID host) -> NTSTATUS {
|
|||||||
auto *file_system_host = reinterpret_cast<FileSystemHost *>(host);
|
auto *file_system_host = reinterpret_cast<FileSystemHost *>(host);
|
||||||
if (not config_.get_enable_mount_manager()) {
|
if (not config_.get_enable_mount_manager()) {
|
||||||
file_system_host->SetPrefix(
|
file_system_host->SetPrefix(
|
||||||
(L"\\repertory\\" +
|
&(L"\\repertory\\" +
|
||||||
std::wstring(file_system_host->FileSystemName()).substr(0, 1))
|
std::wstring(file_system_host->FileSystemName()).substr(0U, 1U))[0U]);
|
||||||
.data());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
file_system_host->SetCasePreservedNames(TRUE);
|
||||||
|
file_system_host->SetCaseSensitiveSearch(TRUE);
|
||||||
|
file_system_host->SetFileInfoTimeout(1000);
|
||||||
file_system_host->SetFlushAndPurgeOnCleanup(TRUE);
|
file_system_host->SetFlushAndPurgeOnCleanup(TRUE);
|
||||||
|
file_system_host->SetMaxComponentLength(255U);
|
||||||
|
file_system_host->SetNamedStreams(FALSE);
|
||||||
|
file_system_host->SetPassQueryDirectoryPattern(FALSE);
|
||||||
|
file_system_host->SetPersistentAcls(FALSE);
|
||||||
|
file_system_host->SetPostCleanupWhenModifiedOnly(TRUE);
|
||||||
file_system_host->SetReparsePoints(FALSE);
|
file_system_host->SetReparsePoints(FALSE);
|
||||||
file_system_host->SetReparsePointsAccessCheck(FALSE);
|
file_system_host->SetReparsePointsAccessCheck(FALSE);
|
||||||
file_system_host->SetSectorSize(WINFSP_ALLOCATION_UNIT);
|
file_system_host->SetSectorSize(WINFSP_ALLOCATION_UNIT);
|
||||||
file_system_host->SetSectorsPerAllocationUnit(1);
|
file_system_host->SetSectorsPerAllocationUnit(1);
|
||||||
file_system_host->SetFileInfoTimeout(1000);
|
|
||||||
file_system_host->SetCaseSensitiveSearch(TRUE);
|
|
||||||
file_system_host->SetCasePreservedNames(TRUE);
|
|
||||||
file_system_host->SetNamedStreams(FALSE);
|
|
||||||
file_system_host->SetUnicodeOnDisk(TRUE);
|
file_system_host->SetUnicodeOnDisk(TRUE);
|
||||||
file_system_host->SetMaxComponentLength(255U);
|
|
||||||
file_system_host->SetPersistentAcls(FALSE);
|
|
||||||
file_system_host->SetPostCleanupWhenModifiedOnly(TRUE);
|
|
||||||
file_system_host->SetPassQueryDirectoryPattern(FALSE);
|
|
||||||
file_system_host->SetVolumeCreationTime(utils::time::get_time_now());
|
file_system_host->SetVolumeCreationTime(utils::time::get_time_now());
|
||||||
file_system_host->SetVolumeSerialNumber(0);
|
file_system_host->SetVolumeSerialNumber(0);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user