[PATCH v8 4/9] kernel32/tests: Add GetSystemFirmwareTable tests
Huw Davies
huw at codeweavers.com
Wed Jul 11 03:23:14 CDT 2018
On Wed, Jun 20, 2018 at 11:18:47PM -0600, Alex Henrie wrote:
> Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
> ---
> 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);
Same as the last patch, let's explicitly initialise the elements.
> + 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++)
Again, ditch the loop.
> + {
> + len = GetSystemFirmwareTable(RSMB, i, smbios_table, expected_len);
> + ok(len == expected_len, "Table %u: Expected length %u, got %u\n", i, expected_len, len);
I'd hoped for a memcmp between smbios_table and sfti->TableBuffer here.
> + }
> +
> + 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
>
>
>
More information about the wine-devel
mailing list