From: Alex Henrie Subject: [PATCH v8 4/9] kernel32/tests: Add GetSystemFirmwareTable tests Message-Id: <20180621051907.31292-4-alexhenrie24@gmail.com> Date: Wed, 20 Jun 2018 23:18:47 -0600 In-Reply-To: <20180621051907.31292-1-alexhenrie24@gmail.com> References: <20180621051907.31292-1-alexhenrie24@gmail.com> Signed-off-by: Alex Henrie --- dlls/kernel32/tests/version.c | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c index eb78a383d2..08e8f0fb58 100644 --- a/dlls/kernel32/tests/version.c +++ b/dlls/kernel32/tests/version.c @@ -26,11 +26,17 @@ #include "winternl.h" static BOOL (WINAPI * pGetProductInfo)(DWORD, DWORD, DWORD, DWORD, DWORD *); +static NTSTATUS (WINAPI * pNtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS, void *, ULONG, ULONG *); static NTSTATUS (WINAPI * pRtlGetVersion)(RTL_OSVERSIONINFOEXW *); #define GET_PROC(func) \ p##func = (void *)GetProcAddress(hmod, #func); +/* Firmware table providers */ +#define ACPI 0x41435049 +#define FIRM 0x4649524D +#define RSMB 0x52534D42 + static void init_function_pointers(void) { HMODULE hmod; @@ -41,6 +47,7 @@ static void init_function_pointers(void) hmod = GetModuleHandleA("ntdll.dll"); + GET_PROC(NtQuerySystemInformation); GET_PROC(RtlGetVersion); } @@ -697,6 +704,39 @@ static void test_VerifyVersionInfo(void) ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); } +void test_GetSystemFirmwareTable(void) +{ + ULONG expected_len, i; + UINT len; + SYSTEM_FIRMWARE_TABLE_INFORMATION *sfti = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 16); + UCHAR *smbios_table = NULL; + + ok(!!sfti, "Failed to allocate memory\n"); + sfti->ProviderSignature = RSMB; + sfti->Action = SystemFirmwareTable_Get; + pNtQuerySystemInformation(SystemFirmwareTableInformation, sfti, 16, &expected_len); + if (expected_len == 0) /* xp, 2003 */ + { + skip("SystemFirmwareTableInformation is not available\n"); + HeapFree(GetProcessHeap(), 0, sfti); + return; + } + sfti = HeapReAlloc(GetProcessHeap(), 0, sfti, expected_len); + ok(!!sfti, "Failed to allocate memory\n"); + pNtQuerySystemInformation(SystemFirmwareTableInformation, sfti, expected_len, &expected_len); + + expected_len -= 16; + smbios_table = HeapAlloc(GetProcessHeap(), 0, expected_len); + for (i = 0; i < 100; i++) + { + len = GetSystemFirmwareTable(RSMB, i, smbios_table, expected_len); + ok(len == expected_len, "Table %u: Expected length %u, got %u\n", i, expected_len, len); + } + + HeapFree(GetProcessHeap(), 0, sfti); + HeapFree(GetProcessHeap(), 0, smbios_table); +} + START_TEST(version) { init_function_pointers(); @@ -704,4 +744,5 @@ START_TEST(version) test_GetProductInfo(); test_GetVersionEx(); test_VerifyVersionInfo(); + test_GetSystemFirmwareTable(); } -- 2.17.1