Alex Henrie : kernel32/tests: Add GetSystemFirmwareTable tests.
Alexandre Julliard
julliard at winehq.org
Thu Jul 12 17:45:38 CDT 2018
Module: wine
Branch: master
Commit: 774a859d42ddcf4308e1356f1647d9b8bba26c5a
URL: https://source.winehq.org/git/wine.git/?a=commit;h=774a859d42ddcf4308e1356f1647d9b8bba26c5a
Author: Alex Henrie <alexhenrie24 at gmail.com>
Date: Thu Jul 12 00:57:50 2018 +0200
kernel32/tests: Add GetSystemFirmwareTable tests.
Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/tests/version.c | 46 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c
index ebda2db..ac43d1a 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,44 @@ static void test_VerifyVersionInfo(void)
ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
}
+static void test_GetSystemFirmwareTable(void)
+{
+ static const ULONG min_sfti_len = FIELD_OFFSET(SYSTEM_FIRMWARE_TABLE_INFORMATION, TableBuffer);
+ ULONG expected_len;
+ UINT len;
+ SYSTEM_FIRMWARE_TABLE_INFORMATION *sfti = HeapAlloc(GetProcessHeap(), 0, min_sfti_len);
+ UCHAR *smbios_table;
+
+ ok(!!sfti, "Failed to allocate memory\n");
+ sfti->ProviderSignature = RSMB;
+ sfti->Action = SystemFirmwareTable_Get;
+ sfti->TableID = 0;
+ pNtQuerySystemInformation(SystemFirmwareTableInformation, sfti, min_sfti_len, &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 -= min_sfti_len;
+ smbios_table = HeapAlloc(GetProcessHeap(), 0, expected_len);
+ len = GetSystemFirmwareTable(RSMB, 0, smbios_table, expected_len);
+ ok(len == expected_len, "Expected length %u, got %u\n", expected_len, len);
+ ok(len == 0 || !memcmp(smbios_table, sfti->TableBuffer, 6),
+ "Expected prologue %02x %02x %02x %02x %02x %02x, got %02x %02x %02x %02x %02x %02x\n",
+ sfti->TableBuffer[0], sfti->TableBuffer[1], sfti->TableBuffer[2],
+ sfti->TableBuffer[3], sfti->TableBuffer[4], sfti->TableBuffer[5],
+ smbios_table[0], smbios_table[1], smbios_table[2],
+ smbios_table[3], smbios_table[4], smbios_table[5]);
+
+ HeapFree(GetProcessHeap(), 0, sfti);
+ HeapFree(GetProcessHeap(), 0, smbios_table);
+}
+
START_TEST(version)
{
init_function_pointers();
@@ -704,4 +749,5 @@ START_TEST(version)
test_GetProductInfo();
test_GetVersionEx();
test_VerifyVersionInfo();
+ test_GetSystemFirmwareTable();
}
More information about the wine-cvs
mailing list