fix
This commit is contained in:
@@ -72,7 +72,7 @@ auto remote_server::construct_path(std::string path) -> std::string {
|
||||
auto remote_server::populate_file_info(const std::string &api_path,
|
||||
remote::file_info &r_info)
|
||||
-> packet::error_type {
|
||||
return (drive_.populate_file_info(api_path, &r_info) == api_error::success)
|
||||
return (drive_.populate_file_info(api_path, r_info) == api_error::success)
|
||||
? STATUS_SUCCESS
|
||||
: STATUS_OBJECT_NAME_NOT_FOUND;
|
||||
}
|
||||
|
@@ -70,14 +70,14 @@ winfsp_drive::winfsp_service::winfsp_service(
|
||||
|
||||
auto winfsp_drive::handle_error(std::string_view function_name,
|
||||
const std::string &api_path, api_error error,
|
||||
FileInfo *f_info, std::uint64_t file_size,
|
||||
FileInfo *file_info, std::uint64_t file_size,
|
||||
bool raise_on_failure_only) const -> NTSTATUS {
|
||||
auto ret = utils::from_api_error(error);
|
||||
if (not raise_on_failure_only) {
|
||||
RAISE_WINFSP_EVENT(function_name, api_path, ret);
|
||||
}
|
||||
|
||||
if (f_info == nullptr) {
|
||||
if (file_info == nullptr) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ auto winfsp_drive::handle_error(std::string_view function_name,
|
||||
return ret;
|
||||
}
|
||||
|
||||
populate_file_info(file_size, meta, *f_info);
|
||||
populate_file_info(file_size, meta, *file_info);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -371,15 +371,15 @@ auto winfsp_drive::Create(PWSTR file_name, UINT32 create_options,
|
||||
return ret;
|
||||
}
|
||||
|
||||
auto winfsp_drive::Flush(PVOID /*file_node*/, PVOID file_desc, FileInfo *f_info)
|
||||
-> NTSTATUS {
|
||||
auto winfsp_drive::Flush(PVOID /*file_node*/, PVOID file_desc,
|
||||
FileInfo *file_info) -> NTSTATUS {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
std::string api_path;
|
||||
std::shared_ptr<i_open_file> file;
|
||||
const auto handle_error = [this, &api_path, &file,
|
||||
&f_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, f_info,
|
||||
&file_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, file_info,
|
||||
file ? file->get_file_size() : 0U);
|
||||
};
|
||||
|
||||
@@ -418,14 +418,14 @@ auto winfsp_drive::get_directory_items(const std::string &api_path) const
|
||||
}
|
||||
|
||||
auto winfsp_drive::GetFileInfo(PVOID /*file_node*/, PVOID file_desc,
|
||||
FileInfo *f_info) -> NTSTATUS {
|
||||
FileInfo *file_info) -> NTSTATUS {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
std::string api_path;
|
||||
std::shared_ptr<i_open_file> file;
|
||||
const auto handle_error = [this, &api_path, &file,
|
||||
&f_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, f_info,
|
||||
&file_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, file_info,
|
||||
file ? file->get_file_size() : 0U);
|
||||
};
|
||||
|
||||
@@ -733,15 +733,15 @@ auto winfsp_drive::Open(PWSTR file_name, UINT32 create_options,
|
||||
|
||||
auto winfsp_drive::Overwrite(PVOID /*file_node*/, PVOID file_desc,
|
||||
UINT32 attributes, BOOLEAN replace_attributes,
|
||||
UINT64 /*allocation_size*/, FileInfo *f_info)
|
||||
UINT64 /*allocation_size*/, FileInfo *file_info)
|
||||
-> NTSTATUS {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
std::string api_path;
|
||||
std::shared_ptr<i_open_file> file;
|
||||
const auto handle_error = [this, &api_path, &file,
|
||||
&f_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, f_info,
|
||||
&file_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, file_info,
|
||||
file ? file->get_file_size() : 0U);
|
||||
};
|
||||
|
||||
@@ -808,14 +808,14 @@ void winfsp_drive::populate_file_info(const std::string &api_path,
|
||||
}
|
||||
|
||||
auto winfsp_drive::populate_file_info(const std::string &api_path,
|
||||
remote::file_info &r_info) const
|
||||
remote::file_info &file_info) const
|
||||
-> api_error {
|
||||
api_meta_map meta{};
|
||||
auto ret = provider_.get_item_meta(api_path, meta);
|
||||
if (ret == api_error::success) {
|
||||
FSP_FSCTL_FILE_INFO f_info{};
|
||||
populate_file_info(utils::string::to_uint64(meta[META_SIZE]), meta, f_info);
|
||||
set_file_info(r_info, f_info);
|
||||
FSP_FSCTL_FILE_INFO info{};
|
||||
populate_file_info(utils::string::to_uint64(meta[META_SIZE]), meta, info);
|
||||
set_file_info(file_info, info);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -823,20 +823,20 @@ auto winfsp_drive::populate_file_info(const std::string &api_path,
|
||||
|
||||
void winfsp_drive::populate_file_info(std::uint64_t file_size,
|
||||
api_meta_map meta,
|
||||
FSP_FSCTL_FILE_INFO &f_info) const {
|
||||
f_info.FileSize = file_size;
|
||||
f_info.AllocationSize =
|
||||
FSP_FSCTL_FILE_INFO &file_info) const {
|
||||
file_info.FileSize = file_size;
|
||||
file_info.AllocationSize =
|
||||
utils::divide_with_ceiling(file_size, WINFSP_ALLOCATION_UNIT) *
|
||||
WINFSP_ALLOCATION_UNIT;
|
||||
f_info.ChangeTime = utils::get_changed_time_from_meta(meta);
|
||||
f_info.CreationTime = utils::get_creation_time_from_meta(meta);
|
||||
f_info.FileAttributes = utils::get_attributes_from_meta(meta);
|
||||
f_info.HardLinks = 0;
|
||||
f_info.IndexNumber = 0;
|
||||
f_info.LastAccessTime = utils::get_accessed_time_from_meta(meta);
|
||||
f_info.LastWriteTime = utils::get_written_time_from_meta(meta);
|
||||
f_info.ReparseTag = 0;
|
||||
f_info.EaSize = 0;
|
||||
file_info.ChangeTime = utils::get_changed_time_from_meta(meta);
|
||||
file_info.CreationTime = utils::get_creation_time_from_meta(meta);
|
||||
file_info.FileAttributes = utils::get_attributes_from_meta(meta);
|
||||
file_info.HardLinks = 0;
|
||||
file_info.IndexNumber = 0;
|
||||
file_info.LastAccessTime = utils::get_accessed_time_from_meta(meta);
|
||||
file_info.LastWriteTime = utils::get_written_time_from_meta(meta);
|
||||
file_info.ReparseTag = 0;
|
||||
file_info.EaSize = 0;
|
||||
}
|
||||
|
||||
auto winfsp_drive::Read(PVOID /*file_node*/, PVOID file_desc, PVOID buffer,
|
||||
@@ -1060,15 +1060,15 @@ auto winfsp_drive::Rename(PVOID /*file_node*/, PVOID /*file_desc*/,
|
||||
auto winfsp_drive::SetBasicInfo(PVOID /*file_node*/, PVOID file_desc,
|
||||
UINT32 attributes, UINT64 creation_time,
|
||||
UINT64 last_access_time, UINT64 last_write_time,
|
||||
UINT64 change_time, FileInfo *f_info)
|
||||
UINT64 change_time, FileInfo *file_info)
|
||||
-> NTSTATUS {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
std::string api_path;
|
||||
std::shared_ptr<i_open_file> file;
|
||||
const auto handle_error = [this, &api_path, &file,
|
||||
&f_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, f_info,
|
||||
&file_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, file_info,
|
||||
file ? file->get_file_size() : 0U);
|
||||
};
|
||||
|
||||
@@ -1110,31 +1110,31 @@ auto winfsp_drive::SetBasicInfo(PVOID /*file_node*/, PVOID file_desc,
|
||||
return handle_error(provider_.set_item_meta(api_path, meta));
|
||||
}
|
||||
|
||||
void winfsp_drive::set_file_info(remote::f_info &r_info,
|
||||
const FSP_FSCTL_FILE_INFO &f_info) {
|
||||
r_info.FileAttributes = f_info.FileAttributes;
|
||||
r_info.ReparseTag = f_info.ReparseTag;
|
||||
r_info.AllocationSize = f_info.AllocationSize;
|
||||
r_info.FileSize = f_info.FileSize;
|
||||
r_info.CreationTime = f_info.CreationTime;
|
||||
r_info.LastAccessTime = f_info.LastAccessTime;
|
||||
r_info.LastWriteTime = f_info.LastWriteTime;
|
||||
r_info.ChangeTime = f_info.ChangeTime;
|
||||
r_info.IndexNumber = f_info.IndexNumber;
|
||||
r_info.HardLinks = f_info.HardLinks;
|
||||
r_info.EaSize = f_info.EaSize;
|
||||
void winfsp_drive::set_file_info(remote::file_info &dest,
|
||||
const FSP_FSCTL_FILE_INFO &src) {
|
||||
dest.FileAttributes = src.FileAttributes;
|
||||
dest.ReparseTag = src.ReparseTag;
|
||||
dest.AllocationSize = src.AllocationSize;
|
||||
dest.FileSize = src.FileSize;
|
||||
dest.CreationTime = src.CreationTime;
|
||||
dest.LastAccessTime = src.LastAccessTime;
|
||||
dest.LastWriteTime = src.LastWriteTime;
|
||||
dest.ChangeTime = src.ChangeTime;
|
||||
dest.IndexNumber = src.IndexNumber;
|
||||
dest.HardLinks = src.HardLinks;
|
||||
dest.EaSize = src.EaSize;
|
||||
}
|
||||
|
||||
auto winfsp_drive::SetFileSize(PVOID /*file_node*/, PVOID file_desc,
|
||||
UINT64 new_size, BOOLEAN set_allocation_size,
|
||||
FileInfo *f_info) -> NTSTATUS {
|
||||
FileInfo *file_info) -> NTSTATUS {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
std::string api_path;
|
||||
std::shared_ptr<i_open_file> file;
|
||||
const auto handle_error = [this, &api_path, &file,
|
||||
&f_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, f_info,
|
||||
&file_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, file_info,
|
||||
file ? file->get_file_size() : 0U);
|
||||
};
|
||||
|
||||
@@ -1233,7 +1233,7 @@ VOID winfsp_drive::Unmounted(PVOID host) {
|
||||
auto winfsp_drive::Write(PVOID /*file_node*/, PVOID file_desc, PVOID buffer,
|
||||
UINT64 offset, ULONG length, BOOLEAN write_to_end,
|
||||
BOOLEAN constrained_io, PULONG bytes_transferred,
|
||||
FileInfo *f_info) -> NTSTATUS {
|
||||
FileInfo *file_info) -> NTSTATUS {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
*bytes_transferred = 0U;
|
||||
@@ -1241,8 +1241,8 @@ auto winfsp_drive::Write(PVOID /*file_node*/, PVOID file_desc, PVOID buffer,
|
||||
std::string api_path;
|
||||
std::shared_ptr<i_open_file> file;
|
||||
const auto handle_error = [this, &api_path, &file,
|
||||
&f_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, f_info,
|
||||
&file_info](api_error error) -> NTSTATUS {
|
||||
return this->handle_error(function_name, api_path, error, file_info,
|
||||
file ? file->get_file_size() : 0U, true);
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user