diff --git a/src/common/platform/file_management.hpp b/src/common/platform/file_management.hpp index e0243003..34dbdd05 100644 --- a/src/common/platform/file_management.hpp +++ b/src/common/platform/file_management.hpp @@ -309,6 +309,14 @@ typedef struct _FILE_FS_DEVICE_INFORMATION ULONG Characteristics; } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; +typedef struct _FILE_FS_ATTRIBUTE_INFORMATION +{ + ULONG FileSystemAttributes; + LONG MaximumComponentNameLength; + ULONG FileSystemNameLength; + char16_t FileSystemName[10]; +} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; + typedef struct _FILE_POSITION_INFORMATION { LARGE_INTEGER CurrentByteOffset; diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index 4bf4b3fb..a9b75937 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -182,8 +182,18 @@ namespace syscalls return handle_query(c.emu, fs_information, length, io_status_block, [&](FILE_FS_VOLUME_INFORMATION&) {}); + case FileFsAttributeInformation: + return handle_query<_FILE_FS_ATTRIBUTE_INFORMATION>( + c.emu, fs_information, length, io_status_block, [&](_FILE_FS_ATTRIBUTE_INFORMATION& info) { + info.FileSystemAttributes = 0x40006; // FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK | FILE_NAMED_STREAMS + info.MaximumComponentNameLength = 255; + const auto name = u"NTFS"s; + info.FileSystemNameLength = static_cast(name.size() * sizeof(char16_t)); + memcpy(info.FileSystemName, name.data(), info.FileSystemNameLength); + }); + default: - c.win_emu.log.error("Unsupported fs info class: %X\n", fs_information_class); + c.win_emu.log.error("Unsupported fs info class: 0x%X\n", fs_information_class); c.emu.stop(); return write_io_status(io_status_block, STATUS_NOT_SUPPORTED, true); }