updating Device Path output

This commit is contained in:
iadgovuser58 2024-07-11 17:26:43 -04:00
parent e414605733
commit 341b8b4779
3 changed files with 32 additions and 17 deletions

View File

@ -25,9 +25,9 @@ public class UefiBootOrder {
} }
/** /**
* Provides a human readable Boot Order list on single line. * Provides a human-readable Boot Order list on single line.
* *
* @return A human readable Boot Order * @return A human-readable Boot Order
*/ */
public String toString() { public String toString() {
StringBuilder orderList = new StringBuilder(); StringBuilder orderList = new StringBuilder();

View File

@ -23,7 +23,7 @@ import java.util.Arrays;
*/ */
public class UefiBootVariable { public class UefiBootVariable {
/** /**
* Human readable description of the variable. * Human-readable description of the variable.
*/ */
private String description = ""; private String description = "";
/** /**
@ -81,7 +81,7 @@ public class UefiBootVariable {
* @return string that represents a UEFI boot variable. * @return string that represents a UEFI boot variable.
*/ */
public String toString() { public String toString() {
StringBuilder bootInfo = new StringBuilder("Description = "); StringBuilder bootInfo = new StringBuilder(" EFI Load Option = ");
// remove all non ascii chars // remove all non ascii chars
String bootVar = description.replaceAll("[^a-zA-Z_0-0\\s]", ""); String bootVar = description.replaceAll("[^a-zA-Z_0-0\\s]", "");
bootInfo.append(bootVar + "\n" + efiDevPath.toString()); bootInfo.append(bootVar + "\n" + efiDevPath.toString());

View File

@ -7,8 +7,20 @@ import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
/** /**
* Class to process EFI_DEVICE_PATH_PROTOCOL which is referred to as the UEFI_DEVICE_PATH * Class to process a Device Path. A Device Path is a variable-length binary
* structure that is made up of variable-length generic Device Path nodes.
* The first Device Path node starts at byte offset zero of the Device Path.
* The next Device Path node starts at the end of the previous Device Path node.
* There is no limit to the number, type, or sequence of nodes in a Device Path.
* <p> * <p>
* Generic Device Path Node Structure:
* Name Byte Offset Byte Length Description
* Type 0 1 Device path type (such as 0x01 - Hardware Device Path)
* Sub-Type 1 1 Sub-Type
* Length 2 2 Length of this structure in bytes. Length is 4+n bytes
* Data 4 n Specific Device Path data
* <p>
* EFI_DEVICE_PATH_PROTOCOL:
* #define EFI_DEVICE_PATH_PROTOCOL_GUID \09576e91-6d3f-11d2-8e39-00a0c969723b * #define EFI_DEVICE_PATH_PROTOCOL_GUID \09576e91-6d3f-11d2-8e39-00a0c969723b
* typedef struct _EFI_DEVICE_PATH_PROTOCOL { * typedef struct _EFI_DEVICE_PATH_PROTOCOL {
* UINT8 Type; * UINT8 Type;
@ -23,7 +35,7 @@ import java.nio.charset.StandardCharsets;
* Type 0x04 Media Device Path * Type 0x04 Media Device Path
* Type 0x05 BIOS Boot Specification Device Path * Type 0x05 BIOS Boot Specification Device Path
* Type 0x7F End of Hardware Device Path * Type 0x7F End of Hardware Device Path
* Each Type has a sub-type that may or may no be defined in the section * Each Type has a Subtype that may or may not be defined in the section
* <p> * <p>
* Only a few of the SubTypes have been implemented as there are many, * Only a few of the SubTypes have been implemented as there are many,
* but only those that were reported using the test devices at hand. * but only those that were reported using the test devices at hand.
@ -36,11 +48,11 @@ public class UefiDevicePath {
@Getter @Getter
private String type = ""; private String type = "";
/** /**
* UEFI Device path sub-type. * UEFI Device path subtype.
*/ */
private String subType = ""; private String subType = "";
/** /**
* UEFI Device path human readable description. * UEFI Device path human-readable description.
*/ */
private String devPathInfo = ""; private String devPathInfo = "";
/** /**
@ -111,7 +123,7 @@ public class UefiDevicePath {
* *
* @param path * @param path
* @param offset * @param offset
* @return human readable string representing the UEFI device path * @return human-readable string representing the UEFI device path
* @throws java.io.UnsupportedEncodingException * @throws java.io.UnsupportedEncodingException
*/ */
private String processDev(final byte[] path, final int offset) private String processDev(final byte[] path, final int offset)
@ -181,12 +193,11 @@ public class UefiDevicePath {
private String acpiSubType(final byte[] path, final int offset) { private String acpiSubType(final byte[] path, final int offset) {
subType = ""; subType = "";
switch (path[offset + UefiConstants.OFFSET_1]) { switch (path[offset + UefiConstants.OFFSET_1]) {
case 0x01: case 0x01: // standard version
subType = "(Short): ";
subType += acpiShortSubType(path, offset); subType += acpiShortSubType(path, offset);
break; break;
case 0x02: case 0x02:
subType = "Expanded ACPI Device Path"; subType = "(expanded version): ";
break; break;
default: default:
subType = "Invalid ACPI Device Path sub type"; subType = "Invalid ACPI Device Path sub type";
@ -205,9 +216,13 @@ public class UefiDevicePath {
subType = ""; subType = "";
byte[] hid = new byte[UefiConstants.SIZE_4]; byte[] hid = new byte[UefiConstants.SIZE_4];
System.arraycopy(path, UefiConstants.OFFSET_4 + offset, hid, 0, UefiConstants.SIZE_4); System.arraycopy(path, UefiConstants.OFFSET_4 + offset, hid, 0, UefiConstants.SIZE_4);
subType += "_HID = " + HexUtils.byteArrayToHexString(hid); subType += "\n _HID = " + HexUtils.byteArrayToHexString(hid);
System.arraycopy(path, 2 * UefiConstants.SIZE_4 + offset, hid, 0, UefiConstants.SIZE_4); System.arraycopy(path, 2 * UefiConstants.SIZE_4 + offset, hid, 0, UefiConstants.SIZE_4);
subType += "_UID = " + HexUtils.byteArrayToHexString(hid); String uid = HexUtils.byteArrayToHexString(hid);
if(uid.contains("00000000")) {
uid = "No _UID exists for this device";
}
subType += "\n _UID = " + uid;
return subType; return subType;
} }
@ -219,9 +234,9 @@ public class UefiDevicePath {
* @return pci device info. * @return pci device info.
*/ */
private String pciSubType(final byte[] path, final int offset) { private String pciSubType(final byte[] path, final int offset) {
subType = "PCI: PCI Function Number = "; subType = "\n PCI Function Number = ";
subType += String.format("0x%x", path[offset + UefiConstants.SIZE_4]); subType += String.format("0x%x", path[offset + UefiConstants.SIZE_4]);
subType += " PCI Device Number = "; subType += "\n PCI Device Number = ";
subType += String.format("0x%x", path[offset + UefiConstants.SIZE_5]); subType += String.format("0x%x", path[offset + UefiConstants.SIZE_5]);
return subType; return subType;
} }