This commit is contained in:
Scott E. Graves 2024-10-22 13:10:01 -05:00
parent 8e2ebf05b8
commit 49e518ac19

View File

@ -143,11 +143,12 @@ public:
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_BACKUP_SEMANTICS |
(directory ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL); (directory ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL);
auto share_mode = FILE_SHARE_READ | FILE_SHARE_WRITE; auto share_mode = FILE_SHARE_READ | FILE_SHARE_WRITE;
auto handle = auto handle = ::CreateFileA(
::CreateFileA(file_path.c_str(), GENERIC_READ, share_mode, nullptr, file_path.c_str(), GENERIC_READ, static_cast<DWORD>(share_mode),
OPEN_EXISTING, static_cast<DWORD>(attributes), nullptr); nullptr, OPEN_EXISTING, static_cast<DWORD>(attributes), nullptr);
FILE_BASIC_INFO fi{}; FILE_BASIC_INFO basic_info{};
::GetFileInformationByHandleEx(handle, FileBasicInfo, &fi, sizeof(fi)); ::GetFileInformationByHandleEx(handle, FileBasicInfo, &basic_info,
sizeof(basic_info));
if (not directory) { if (not directory) {
auto opt_size = utils::file::file{file_path}.size(); auto opt_size = utils::file::file{file_path}.size();
if (not opt_size.has_value()) { if (not opt_size.has_value()) {
@ -162,11 +163,14 @@ public:
: utils::divide_with_ceiling(file_info.FileSize, : utils::divide_with_ceiling(file_info.FileSize,
WINFSP_ALLOCATION_UNIT) * WINFSP_ALLOCATION_UNIT) *
WINFSP_ALLOCATION_UNIT; WINFSP_ALLOCATION_UNIT;
file_info.FileAttributes = fi.FileAttributes; file_info.FileAttributes = basic_info.FileAttributes;
file_info.ChangeTime = static_cast<UINT64>(fi.ChangeTime.QuadPart); file_info.ChangeTime = static_cast<UINT64>(basic_info.ChangeTime.QuadPart);
file_info.CreationTime = static_cast<UINT64>(fi.CreationTime.QuadPart); file_info.CreationTime =
file_info.LastAccessTime = static_cast<UINT64>(fi.LastAccessTime.QuadPart); static_cast<UINT64>(basic_info.CreationTime.QuadPart);
file_info.LastWriteTime = static_cast<UINT64>(fi.LastWriteTime.QuadPart); file_info.LastAccessTime =
static_cast<UINT64>(basic_info.LastAccessTime.QuadPart);
file_info.LastWriteTime =
static_cast<UINT64>(basic_info.LastWriteTime.QuadPart);
::CloseHandle(handle); ::CloseHandle(handle);
return api_error::success; return api_error::success;
} }