diff --git a/src/emulator/serialization.hpp b/src/emulator/serialization.hpp index 360dcfb4..4693ce3e 100644 --- a/src/emulator/serialization.hpp +++ b/src/emulator/serialization.hpp @@ -22,6 +22,16 @@ namespace utils { a.deserialize(deserializer) } -> std::same_as; }; + template + struct is_optional : std::false_type + { + }; + + template + struct is_optional> : std::true_type + { + }; + namespace detail { template @@ -371,6 +381,7 @@ namespace utils } template + requires(!is_optional::value) void write(const T& object) { constexpr auto is_trivially_copyable = std::is_trivially_copyable_v; diff --git a/src/windows-emulator/devices/afd_endpoint.cpp b/src/windows-emulator/devices/afd_endpoint.cpp index 1a364eb4..48d43c08 100644 --- a/src/windows-emulator/devices/afd_endpoint.cpp +++ b/src/windows-emulator/devices/afd_endpoint.cpp @@ -290,20 +290,20 @@ namespace void deserialize(utils::buffer_deserializer& buffer) override { - buffer.read(this->creation_data); + buffer.read_optional(this->creation_data); this->setup(); - buffer.read(this->require_poll_); - buffer.read(this->delayed_ioctl_); - buffer.read(this->timeout_); + buffer.read_optional(this->require_poll_); + buffer.read_optional(this->delayed_ioctl_); + buffer.read_optional(this->timeout_); } void serialize(utils::buffer_serializer& buffer) const override { - buffer.write(this->creation_data); - buffer.write(this->require_poll_); - buffer.write(this->delayed_ioctl_); - buffer.write(this->timeout_); + buffer.write_optional(this->creation_data); + buffer.write_optional(this->require_poll_); + buffer.write_optional(this->delayed_ioctl_); + buffer.write_optional(this->timeout_); } NTSTATUS io_control(windows_emulator& win_emu, const io_device_context& c) override