[PATCH v5 3/8] kernel32/tests: Add GetSystemFirmwareTable tests

Huw Davies huw at codeweavers.com
Fri Jun 15 03:37:16 CDT 2018


On Fri, Jun 15, 2018 at 12:59:09AM -0600, Alex Henrie wrote:
> Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
> ---
>  dlls/kernel32/tests/version.c | 42 +++++++++++++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
> 
> diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c
> index eb78a383d2..6ca45f0b2e 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,40 @@ 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(), 0, 16);
> +    UCHAR *smbios_table = NULL;
> +
> +    ok(!!sfti, "Failed to allocate memory\n");
> +    sfti->ProviderSignature = RSMB;
> +    sfti->Action = SystemFirmwareTable_Get;

You need to initialize TableID.

> +    pNtQuerySystemInformation(SystemFirmwareTableInformation, sfti, 16, &expected_len);
> +    sfti = HeapReAlloc(GetProcessHeap(), 0, sfti, expected_len);
> +    ok(!!sfti, "Failed to allocate memory\n");
> +    pNtQuerySystemInformation(SystemFirmwareTableInformation, sfti, expected_len, &expected_len);
> +
> +    expected_len -= 16;
> +    len = GetSystemFirmwareTable(RSMB, 0, smbios_table, 0);
> +todo_wine
> +    ok(len == expected_len, "Expected length %u, got %u\n", expected_len, len);
> +
> +    smbios_table = HeapAlloc(GetProcessHeap(), 0, len);
> +    len = GetSystemFirmwareTable(RSMB, 0, smbios_table, len);
> +todo_wine
> +    ok(len == expected_len, "Expected length %u, got %u\n", expected_len, len);
> +    for (i = 0; i < len; i++)
> +    {
> +        ok(smbios_table[i] == sfti->TableBuffer[i],
> +           "Offset %u: Expected %02x, got %02x\n", i, sfti->TableBuffer[i], smbios_table[i]);
> +    }
> +
> +    HeapFree(GetProcessHeap(), 0, sfti);
> +    HeapFree(GetProcessHeap(), 0, smbios_table);
> +}
> +
>  START_TEST(version)
>  {
>      init_function_pointers();
> @@ -704,4 +745,5 @@ START_TEST(version)
>      test_GetProductInfo();
>      test_GetVersionEx();
>      test_VerifyVersionInfo();
> +    test_GetSystemFirmwareTable();
>  }
> -- 
> 2.17.1
> 
> 
> 



More information about the wine-devel mailing list