https://learn.microsoft.com/en-us/windows/win32/api/verrsrc/ns-verrsrc-vs_fixedfileinfo
pub const FixedFileInfo = struct
pub const FixedFileInfo = struct {
file_version: Version = .{},
product_version: Version = .{},
file_flags_mask: u32 = 0,
file_flags: u32 = 0,
file_os: u32 = 0,
file_type: u32 = 0,
file_subtype: u32 = 0,
file_date: Version = .{}, // TODO: I think this is always all zeroes?
pub const signature = 0xFEEF04BD;
// Note: This corresponds to a version of 1.0
pub const version = 0x00010000;
pub const byte_len = 0x34;
pub const key = std.unicode.utf8ToUtf16LeStringLiteral("VS_VERSION_INFO");
pub const Version = struct {
parts: [4]u16 = @splat(0),
pub fn mostSignificantCombinedParts(self: Version) u32 {
return (@as(u32, self.parts[0]) << 16) + self.parts[1];
}
pub fn leastSignificantCombinedParts(self: Version) u32 {
return (@as(u32, self.parts[2]) << 16) + self.parts[3];
}
};
pub fn write(self: FixedFileInfo, writer: *std.Io.Writer) !void {
try writer.writeInt(u32, signature, .little);
try writer.writeInt(u32, version, .little);
try writer.writeInt(u32, self.file_version.mostSignificantCombinedParts(), .little);
try writer.writeInt(u32, self.file_version.leastSignificantCombinedParts(), .little);
try writer.writeInt(u32, self.product_version.mostSignificantCombinedParts(), .little);
try writer.writeInt(u32, self.product_version.leastSignificantCombinedParts(), .little);
try writer.writeInt(u32, self.file_flags_mask, .little);
try writer.writeInt(u32, self.file_flags, .little);
try writer.writeInt(u32, self.file_os, .little);
try writer.writeInt(u32, self.file_type, .little);
try writer.writeInt(u32, self.file_subtype, .little);
try writer.writeInt(u32, self.file_date.mostSignificantCombinedParts(), .little);
try writer.writeInt(u32, self.file_date.leastSignificantCombinedParts(), .little);
}
}