[KERNEL32][KERNEL32_APITEST] Implement user-mode UEFI / Firmware API (#5149)

- Implement firmware environment variable read/write APIs
- Add, fix and improve related definitions and declarations
- Add kernel32:UEFIFirmware apitest

CORE-11954
This commit is contained in:
Ratin Gao 2023-09-15 03:14:07 +08:00 committed by GitHub
parent 961893a712
commit 4c8a2a8815
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 618 additions and 102 deletions

View file

@ -396,9 +396,9 @@ NTAPI
NtQuerySystemEnvironmentValueEx(
_In_ PUNICODE_STRING VariableName,
_In_ LPGUID VendorGuid,
_In_ PVOID Value,
_Out_opt_ PVOID Value,
_Inout_ PULONG ReturnLength,
_Inout_ PULONG Attributes
_Out_opt_ PULONG Attributes
);
__kernel_entry
@ -550,9 +550,9 @@ NTAPI
NtSetSystemEnvironmentValueEx(
_In_ PUNICODE_STRING VariableName,
_In_ LPGUID VendorGuid,
_In_ PVOID Value,
_Inout_ PULONG ReturnLength,
_Inout_ PULONG Attributes
_In_reads_bytes_opt_(ValueLength) PVOID Value,
_In_ ULONG ValueLength,
_In_ ULONG Attributes
);
__kernel_entry

View file

@ -1432,7 +1432,29 @@ typedef struct _SYSTEM_HANDLE_INFORMATION_EX
SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX Handle[1];
} SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX;
// FIXME: Class 65-97
// FIXME: Class 65-89
// Class 90
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
typedef struct _SYSTEM_BOOT_ENVIRONMENT_INFORMATION
{
GUID BootIdentifier;
FIRMWARE_TYPE FirmwareType;
#if (NTDDI_VERSION >= NTDDI_WIN8)
ULONGLONG BootFlags;
#endif
} SYSTEM_BOOT_ENVIRONMENT_INFORMATION, *PSYSTEM_BOOT_ENVIRONMENT_INFORMATION;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef struct _SYSTEM_BOOT_ENVIRONMENT_V1
{
GUID BootIdentifier;
FIRMWARE_TYPE FirmwareType;
} SYSTEM_BOOT_ENVIRONMENT_V1, *PSYSTEM_BOOT_ENVIRONMENT_V1;
#endif
// FIXME: Class 91-97
//
// Hotpatch flags
@ -1540,6 +1562,17 @@ typedef struct _SYSTEM_MEMORY_LIST_INFORMATION
SIZE_T ModifiedPageCountPageFile;
} SYSTEM_MEMORY_LIST_INFORMATION, *PSYSTEM_MEMORY_LIST_INFORMATION;
//
// Firmware variable attributes
//
#define VARIABLE_ATTRIBUTE_NON_VOLATILE 0x00000001
#define VARIABLE_ATTRIBUTE_BOOTSERVICE_ACCESS 0x00000002
#define VARIABLE_ATTRIBUTE_RUNTIME_ACCESS 0x00000004
#define VARIABLE_ATTRIBUTE_HARDWARE_ERROR_RECORD 0x00000008
#define VARIABLE_ATTRIBUTE_AUTHENTICATED_WRITE_ACCESS 0x00000010
#define VARIABLE_ATTRIBUTE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020
#define VARIABLE_ATTRIBUTE_APPEND_WRITE 0x00000040
#ifdef __cplusplus
}; // extern "C"
#endif