--- /dev/null
+## @file\r
+# This file is used to define the Section Header C Struct.\r
+#\r
+# Copyright (c) 2021-, Intel Corporation. All rights reserved.<BR>\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
+##\r
+from struct import *\r
+from ctypes import *\r
+from FirmwareStorageFormat.Common import *\r
+\r
+EFI_COMMON_SECTION_HEADER_LEN = 4\r
+EFI_COMMON_SECTION_HEADER2_LEN = 8\r
+\r
+class EFI_COMMON_SECTION_HEADER(Structure):\r
+ _pack_ = 1\r
+ _fields_ = [\r
+ ('Size', ARRAY(c_uint8, 3)),\r
+ ('Type', c_uint8),\r
+ ]\r
+\r
+ @property\r
+ def SECTION_SIZE(self) -> int:\r
+ return self.Size[0] | self.Size[1] << 8 | self.Size[2] << 16\r
+\r
+ def Common_Header_Size(self) -> int:\r
+ return 4\r
+\r
+class EFI_COMMON_SECTION_HEADER2(Structure):\r
+ _pack_ = 1\r
+ _fields_ = [\r
+ ('Size', ARRAY(c_uint8, 3)),\r
+ ('Type', c_uint8),\r
+ ('ExtendedSize', c_uint32),\r
+ ]\r
+\r
+ @property\r
+ def SECTION_SIZE(self) -> int:\r
+ return self.ExtendedSize\r
+\r
+ def Common_Header_Size(self) -> int:\r
+ return 8\r
+\r
+class EFI_COMPRESSION_SECTION(Structure):\r
+ _pack_ = 1\r
+ _fields_ = [\r
+ ('UncompressedLength', c_uint32),\r
+ ('CompressionType', c_uint8),\r
+ ]\r
+\r
+ def ExtHeaderSize(self) -> int:\r
+ return 5\r
+\r
+class EFI_FREEFORM_SUBTYPE_GUID_SECTION(Structure):\r
+ _pack_ = 1\r
+ _fields_ = [\r
+ ('SubTypeGuid', GUID),\r
+ ]\r
+\r
+ def ExtHeaderSize(self) -> int:\r
+ return 16\r
+\r
+class EFI_GUID_DEFINED_SECTION(Structure):\r
+ _pack_ = 1\r
+ _fields_ = [\r
+ ('SectionDefinitionGuid', GUID),\r
+ ('DataOffset', c_uint16),\r
+ ('Attributes', c_uint16),\r
+ ]\r
+\r
+ def ExtHeaderSize(self) -> int:\r
+ return 20\r
+\r
+def Get_USER_INTERFACE_Header(nums: int):\r
+ class EFI_SECTION_USER_INTERFACE(Structure):\r
+ _pack_ = 1\r
+ _fields_ = [\r
+ ('FileNameString', ARRAY(c_uint16, nums)),\r
+ ]\r
+\r
+ def ExtHeaderSize(self) -> int:\r
+ return 2 * nums\r
+\r
+ def GetUiString(self) -> str:\r
+ UiString = ''\r
+ for i in range(nums):\r
+ if self.FileNameString[i]:\r
+ UiString += chr(self.FileNameString[i])\r
+ return UiString\r
+\r
+ return EFI_SECTION_USER_INTERFACE\r
+\r
+def Get_VERSION_Header(nums: int):\r
+ class EFI_SECTION_VERSION(Structure):\r
+ _pack_ = 1\r
+ _fields_ = [\r
+ ('BuildNumber', c_uint16),\r
+ ('VersionString', ARRAY(c_uint16, nums)),\r
+ ]\r
+\r
+ def ExtHeaderSize(self) -> int:\r
+ return 2 * (nums+1)\r
+\r
+ def GetVersionString(self) -> str:\r
+ VersionString = ''\r
+ for i in range(nums):\r
+ if self.VersionString[i]:\r
+ VersionString += chr(self.VersionString[i])\r
+ return VersionString\r
+\r
+ return EFI_SECTION_VERSION\r