From f215e02bf85f68d3a6106c2a1f4f7f063f819064 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 Apr 2024 10:17:27 +0200 Subject: Adding upstream version 7.0.14-dfsg. Signed-off-by: Daniel Baumann --- .../Source/Python/Capsule/GenerateWindowsDriver.py | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100755 src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Capsule/GenerateWindowsDriver.py (limited to 'src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Capsule/GenerateWindowsDriver.py') diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Capsule/GenerateWindowsDriver.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Capsule/GenerateWindowsDriver.py new file mode 100755 index 00000000..9486b0e4 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Capsule/GenerateWindowsDriver.py @@ -0,0 +1,120 @@ +## @file +# Generate a capsule windows driver. +# +# Copyright (c) 2019, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +''' +GenerateWindowsDriver +''' + +import sys +import argparse +import uuid +import struct +import subprocess +import os +import tempfile +import shutil +import platform +import re +import logging +from WindowsCapsuleSupportHelper import WindowsCapsuleSupportHelper +from Common.Uefi.Capsule.FmpCapsuleHeader import FmpCapsuleHeaderClass +from Common.Uefi.Capsule.UefiCapsuleHeader import UefiCapsuleHeaderClass + +# +# Globals for help information +# +__prog__ = 'GenerateWindowsDriver' +__version__ = '0.0' +__copyright__ = 'Copyright (c) 2019, Intel Corporation. All rights reserved.' +__description__ = 'Generate Capsule Windows Driver.\n' + +def GetCapGuid (InputFile): + with open(InputFile, 'rb') as File: + Buffer = File.read() + try: + Result = UefiCapsuleHeader.Decode (Buffer) + if len (Result) > 0: + FmpCapsuleHeader.Decode (Result) + for index in range (0, FmpCapsuleHeader.PayloadItemCount): + Guid = FmpCapsuleHeader.GetFmpCapsuleImageHeader (index).UpdateImageTypeId + return Guid + except: + print ('GenerateCapsule: error: can not decode capsule') + sys.exit (1) + +def ArgCheck(args): + Version = args.CapsuleVersion_DotString.split('.') + + if len(Version) != 4: + logging.critical("Name invalid: '%s'", args.CapsuleVersion_DotString) + raise ValueError("Name invalid.") + for sub in Version: + if int(sub, 16) > 65536: + logging.critical("Name invalid: '%s'", args.CapsuleVersion_DotString) + raise ValueError("Name exceed limit 65536.") + + if not (re.compile(r'[\a-fA-F0-9]*$')).match(args.CapsuleVersion_DotString): + logging.critical("Name invalid: '%s'", args.CapsuleVersion_DotString) + raise ValueError("Name has invalid chars.") + +def CapsuleGuidCheck(InputFile, Guid): + CapGuid = GetCapGuid(InputFile) + if (str(Guid).lower() != str(CapGuid)): + print('GenerateWindowsDriver error: Different Guid from Capsule') + sys.exit(1) + +if __name__ == '__main__': + def convert_arg_line_to_args(arg_line): + for arg in arg_line.split(): + if not arg.strip(): + continue + yield arg + + parser = argparse.ArgumentParser ( + prog = __prog__, + description = __description__ + __copyright__, + conflict_handler = 'resolve', + fromfile_prefix_chars = '@' + ) + parser.convert_arg_line_to_args = convert_arg_line_to_args + parser.add_argument("--output-folder", dest = 'OutputFolder', help = "firmware resource update driver package output folder.") + parser.add_argument("--product-fmp-guid", dest = 'ProductFmpGuid', help = "firmware GUID of resource update driver package") + parser.add_argument("--capsuleversion-dotstring", dest = 'CapsuleVersion_DotString', help = "firmware version with date on which update driver package is authored") + parser.add_argument("--capsuleversion-hexstring", dest = 'CapsuleVersion_HexString', help = "firmware version in Hex of update driver package") + parser.add_argument("--product-fw-provider", dest = 'ProductFwProvider', help = "vendor/provider of entire firmware resource update driver package") + parser.add_argument("--product-fw-mfg-name", dest = 'ProductFwMfgName', help = "manufacturer/vendor of firmware resource update driver package") + parser.add_argument("--product-fw-desc", dest = "ProductFwDesc", help = "description about resource update driver") + parser.add_argument("--capsule-file-name", dest = 'CapsuleFileName', help ="firmware resource image file") + parser.add_argument("--pfx-file", dest = 'PfxFile', help = "pfx file path used to sign resource update driver") + parser.add_argument("--arch", dest = 'Arch', help = "supported architecture:arm/x64/amd64/arm64/aarch64", default = 'amd64') + parser.add_argument("--operating-system-string", dest = 'OperatingSystemString', help = "supported operating system:win10/10/10_au/10_rs2/10_rs3/10_rs4/server10/server2016/serverrs2/serverrs3/serverrs4", default = "win10") + + args = parser.parse_args() + InputFile = os.path.join(args.OutputFolder, '') + args.CapsuleFileName + UefiCapsuleHeader = UefiCapsuleHeaderClass () + FmpCapsuleHeader = FmpCapsuleHeaderClass () + CapsuleGuidCheck(InputFile, args.ProductFmpGuid) + ArgCheck(args) + ProductName = os.path.splitext(args.CapsuleFileName)[0] + WindowsDriver = WindowsCapsuleSupportHelper () + + WindowsDriver.PackageWindowsCapsuleFiles ( + args.OutputFolder, + ProductName, + args.ProductFmpGuid, + args.CapsuleVersion_DotString, + args.CapsuleVersion_HexString, + args.ProductFwProvider, + args.ProductFwMfgName, + args.ProductFwDesc, + args.CapsuleFileName, + args.PfxFile, + None, + None, + args.Arch, + args.OperatingSystemString + ) -- cgit v1.2.3