mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 02:32:57 +00:00
[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:
parent
961893a712
commit
4c8a2a8815
10 changed files with 618 additions and 102 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2004,25 +2004,7 @@ _Ret_maybenull_ HRSRC WINAPI FindResourceA(_In_opt_ HMODULE,_In_ LPCSTR, _In_ LP
|
|||
_Ret_maybenull_ HRSRC WINAPI FindResourceW(_In_opt_ HMODULE,_In_ LPCWSTR, _In_ LPCWSTR);
|
||||
_Ret_maybenull_ HRSRC WINAPI FindResourceExA(_In_opt_ HMODULE, _In_ LPCSTR, _In_ LPCSTR, _In_ WORD);
|
||||
HRSRC WINAPI FindResourceExW(HINSTANCE,LPCWSTR,LPCWSTR,WORD);
|
||||
#if (_WIN32_WINNT >= 0x0502)
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
GetFirmwareEnvironmentVariableA(
|
||||
_In_ LPCSTR lpName,
|
||||
_In_ LPCSTR lpGuid,
|
||||
_Out_writes_bytes_to_opt_(nSize, return) PVOID pBuffer,
|
||||
_In_ DWORD nSize);
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
GetFirmwareEnvironmentVariableW(
|
||||
_In_ LPCWSTR lpName,
|
||||
_In_ LPCWSTR lpGuid,
|
||||
_Out_writes_bytes_to_opt_(nSize, return) PVOID pBuffer,
|
||||
_In_ DWORD nSize);
|
||||
|
||||
#endif
|
||||
BOOL WINAPI FlushFileBuffers(HANDLE);
|
||||
BOOL WINAPI FlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
|
||||
BOOL WINAPI FlushViewOfFile(LPCVOID,SIZE_T);
|
||||
|
@ -2430,15 +2412,6 @@ HANDLE WINAPI GetStdHandle(_In_ DWORD);
|
|||
UINT WINAPI GetSystemDirectoryA(LPSTR,UINT);
|
||||
UINT WINAPI GetSystemDirectoryW(LPWSTR,UINT);
|
||||
|
||||
WINBASEAPI
|
||||
UINT
|
||||
WINAPI
|
||||
GetSystemFirmwareTable(
|
||||
_In_ DWORD FirmwareTableProviderSignature,
|
||||
_In_ DWORD FirmwareTableID,
|
||||
_Out_writes_bytes_to_opt_(BufferSize,return) PVOID pFirmwareTableBuffer,
|
||||
_In_ DWORD BufferSize);
|
||||
|
||||
VOID WINAPI GetSystemInfo(LPSYSTEM_INFO);
|
||||
BOOL WINAPI GetSystemPowerStatus(_Out_ LPSYSTEM_POWER_STATUS);
|
||||
#if (_WIN32_WINNT >= 0x0502)
|
||||
|
@ -3170,6 +3143,50 @@ BOOL WINAPI SetFileValidData(HANDLE,LONGLONG);
|
|||
|
||||
#if (_WIN32_WINNT >= 0x0502)
|
||||
|
||||
WINBASEAPI
|
||||
UINT
|
||||
WINAPI
|
||||
EnumSystemFirmwareTables(
|
||||
_In_ DWORD FirmwareTableProviderSignature,
|
||||
_Out_writes_bytes_to_opt_(BufferSize, return) PVOID pFirmwareTableEnumBuffer,
|
||||
_In_ DWORD BufferSize);
|
||||
|
||||
WINBASEAPI
|
||||
UINT
|
||||
WINAPI
|
||||
GetSystemFirmwareTable(
|
||||
_In_ DWORD FirmwareTableProviderSignature,
|
||||
_In_ DWORD FirmwareTableID,
|
||||
_Out_writes_bytes_to_opt_(BufferSize, return) PVOID pFirmwareTableBuffer,
|
||||
_In_ DWORD BufferSize);
|
||||
|
||||
_Success_(return > 0)
|
||||
WINBASEAPI
|
||||
DWORD
|
||||
WINAPI
|
||||
GetFirmwareEnvironmentVariableA(
|
||||
_In_ LPCSTR lpName,
|
||||
_In_ LPCSTR lpGuid,
|
||||
_Out_writes_bytes_to_opt_(nSize, return) PVOID pBuffer,
|
||||
_In_ DWORD nSize);
|
||||
|
||||
_Success_(return > 0)
|
||||
WINBASEAPI
|
||||
DWORD
|
||||
WINAPI
|
||||
GetFirmwareEnvironmentVariableW(
|
||||
_In_ LPCWSTR lpName,
|
||||
_In_ LPCWSTR lpGuid,
|
||||
_Out_writes_bytes_to_opt_(nSize, return) PVOID pBuffer,
|
||||
_In_ DWORD nSize);
|
||||
|
||||
#ifdef UNICODE
|
||||
#define GetFirmwareEnvironmentVariable GetFirmwareEnvironmentVariableW
|
||||
#else
|
||||
#define GetFirmwareEnvironmentVariable GetFirmwareEnvironmentVariableA
|
||||
#endif
|
||||
|
||||
WINBASEAPI
|
||||
BOOL
|
||||
WINAPI
|
||||
SetFirmwareEnvironmentVariableA(
|
||||
|
@ -3178,6 +3195,7 @@ SetFirmwareEnvironmentVariableA(
|
|||
_In_reads_bytes_opt_(nSize) PVOID pValue,
|
||||
_In_ DWORD nSize);
|
||||
|
||||
WINBASEAPI
|
||||
BOOL
|
||||
WINAPI
|
||||
SetFirmwareEnvironmentVariableW(
|
||||
|
@ -3186,8 +3204,14 @@ SetFirmwareEnvironmentVariableW(
|
|||
_In_reads_bytes_opt_(nSize) PVOID pValue,
|
||||
_In_ DWORD nSize);
|
||||
|
||||
#ifdef UNICODE
|
||||
#define SetFirmwareEnvironmentVariable SetFirmwareEnvironmentVariableW
|
||||
#else
|
||||
#define SetFirmwareEnvironmentVariable SetFirmwareEnvironmentVariableA
|
||||
#endif
|
||||
|
||||
#endif /* _WIN32_WINNT >= 0x0502 */
|
||||
|
||||
UINT WINAPI SetHandleCount(UINT);
|
||||
BOOL WINAPI SetHandleInformation(HANDLE,DWORD,DWORD);
|
||||
|
||||
|
|
|
@ -346,3 +346,14 @@ $if (_NTIFS_)
|
|||
#define EX_PUSH_LOCK ULONG_PTR
|
||||
#define PEX_PUSH_LOCK PULONG_PTR
|
||||
$endif (_NTIFS_)
|
||||
|
||||
$if (_WINNT_ || _WDMDDK_)
|
||||
#if (NTDDI_VERSION >= NTDDI_VISTA)
|
||||
typedef enum _FIRMWARE_TYPE {
|
||||
FirmwareTypeUnknown,
|
||||
FirmwareTypeBios,
|
||||
FirmwareTypeUefi,
|
||||
FirmwareTypeMax
|
||||
} FIRMWARE_TYPE, *PFIRMWARE_TYPE;
|
||||
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
|
||||
$endif (_WINNT_ || _WDMDDK_)
|
||||
|
|
|
@ -73,6 +73,7 @@ $define(UCHAR=BYTE)
|
|||
$include(ntbasedef.h)
|
||||
$include(interlocked.h)
|
||||
$include(ketypes.h)
|
||||
$include(extypes.h)
|
||||
$include(winnt_old.h)
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue