[PATCH v8 6/9] kernel32: Connect GetSystemFirmwareTable to NtQuerySystemInformation

Huw Davies huw at codeweavers.com
Wed Jul 11 03:44:23 CDT 2018


On Wed, Jun 20, 2018 at 11:18:49PM -0600, Alex Henrie wrote:
> Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
> ---
>  dlls/kernel32/cpu.c           | 29 +++++++++++++++++++++++++++++
>  dlls/kernel32/process.c       | 10 ----------
>  dlls/kernel32/tests/version.c |  2 +-
>  3 files changed, 30 insertions(+), 11 deletions(-)

Looks good.

> 
> diff --git a/dlls/kernel32/cpu.c b/dlls/kernel32/cpu.c
> index ec1fd0f90d..8397fbe729 100644
> --- a/dlls/kernel32/cpu.c
> +++ b/dlls/kernel32/cpu.c
> @@ -336,3 +336,32 @@ DWORD64 WINAPI GetEnabledXStateFeatures(void)
>      FIXME("\n");
>      return 0;
>  }
> +
> +/***********************************************************************
> + *           GetSystemFirmwareTable (KERNEL32.@)
> + */
> +UINT WINAPI GetSystemFirmwareTable(DWORD provider, DWORD id, void *buffer, DWORD size)
> +{
> +    ULONG buffer_size = FIELD_OFFSET(SYSTEM_FIRMWARE_TABLE_INFORMATION, TableBuffer) + size;
> +    SYSTEM_FIRMWARE_TABLE_INFORMATION *sfti = HeapAlloc(GetProcessHeap(), 0, buffer_size);
> +    NTSTATUS status;
> +
> +    if (!sfti)
> +    {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        return 0;
> +    }
> +
> +    sfti->ProviderSignature = provider;
> +    sfti->Action = SystemFirmwareTable_Get;
> +    sfti->TableID = id;
> +
> +    status = NtQuerySystemInformation(SystemFirmwareTableInformation, sfti, buffer_size, &buffer_size);
> +    buffer_size -= FIELD_OFFSET(SYSTEM_FIRMWARE_TABLE_INFORMATION, TableBuffer);
> +    if (buffer_size <= size)
> +        memcpy(buffer, sfti->TableBuffer, buffer_size);
> +
> +    if (status) SetLastError(RtlNtStatusToDosError(status));
> +    HeapFree(GetProcessHeap(), 0, sfti);
> +    return buffer_size;
> +}
> diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
> index ff56e9a692..6adf08d257 100644
> --- a/dlls/kernel32/process.c
> +++ b/dlls/kernel32/process.c
> @@ -4126,16 +4126,6 @@ HRESULT WINAPI UnregisterApplicationRestart(void)
>      return S_OK;
>  }
>  
> -/***********************************************************************
> - *           GetSystemFirmwareTable       (KERNEL32.@)
> - */
> -UINT WINAPI GetSystemFirmwareTable(DWORD provider, DWORD id, PVOID buffer, DWORD size)
> -{
> -    FIXME("(%d %d %p %d):stub\n", provider, id, buffer, size);
> -    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
> -    return 0;
> -}
> -
>  struct proc_thread_attr
>  {
>      DWORD_PTR attr;
> diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c
> index 08e8f0fb58..e33ce9cd42 100644
> --- a/dlls/kernel32/tests/version.c
> +++ b/dlls/kernel32/tests/version.c
> @@ -717,7 +717,7 @@ void test_GetSystemFirmwareTable(void)
>      pNtQuerySystemInformation(SystemFirmwareTableInformation, sfti, 16, &expected_len);
>      if (expected_len == 0) /* xp, 2003 */
>      {
> -        skip("SystemFirmwareTableInformation is not available\n");
> +        win_skip("SystemFirmwareTableInformation is not available\n");
>          HeapFree(GetProcessHeap(), 0, sfti);
>          return;
>      }
> -- 
> 2.17.1
> 
> 
> 



More information about the wine-devel mailing list