[PATCH] wineboot: Add network adapter information to the registry.

Huw Davies huw at codeweavers.com
Mon Jul 19 02:16:33 CDT 2021


On Thu, Jul 15, 2021 at 03:09:41PM +0800, Haoyang Chen wrote:
> Signed-off-by: Haoyang Chen <chenhaoyang at uniontech.com>
> ---
>  loader/wine.inf.in            |   7 ++
>  programs/wineboot/Makefile.in |   2 +-
>  programs/wineboot/wineboot.c  | 119 ++++++++++++++++++++++++++++++++++
>  3 files changed, 127 insertions(+), 1 deletion(-)
> 
> diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c
> index 92276fcbe76..1d3a43fedff 100644
> --- a/programs/wineboot/wineboot.c
> +++ b/programs/wineboot/wineboot.c
> @@ -79,6 +79,8 @@
>  #include <setupapi.h>
>  #include <newdev.h>
>  #include "resource.h"
> +#include "initguid.h"
> +#include <wbemcli.h>
>  
>  WINE_DEFAULT_DEBUG_CHANNEL(wineboot);
>  
> @@ -1586,6 +1588,122 @@ done:
>      return ret;
>  }
>  
> +static HRESULT query_property(IWbemClassObject *obj, const WCHAR *prop, WCHAR *buf, DWORD bufLen )
> +{
> +    CIMTYPE type = 0xdeadbeef;
> +    VARIANT val;
> +    HRESULT hr = S_OK;
> +
> +    if (!buf || !bufLen) return WBEM_E_INVALID_QUERY;
> +
> +    VariantInit( &val );
> +    hr = IWbemClassObject_Get( obj, prop, 0, &val, &type, NULL );
> +    if (hr != S_OK) return hr;
> +
> +    if (V_VT(&val) == VT_BSTR)
> +        wcscpy(buf,V_BSTR(&val));
> +    else
> +        hr = WBEM_E_INVALID_QUERY_TYPE;
> +    VariantClear( &val );
> +    return hr;
> +}
> +
> +static void insert_adapter(HKEY hkey, IWbemClassObject *obj)
> +{
> +    WCHAR value[MAX_PATH];
> +    WCHAR connection[MAX_PATH];
> +    HKEY subhkey;
> +    LSTATUS status;
> +    static int index = 0;
> +
> +    if (S_OK != query_property( obj, L"GUID", value, ARRAYSIZE(value)))
> +        return;
> +
> +    swprintf( connection, ARRAYSIZE(connection), L"%s\\Connection", value);
> +
> +    if ((status = RegCreateKeyExW( hkey, connection, 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &subhkey, NULL )))
> +        return;
> +    set_reg_value_dword(subhkey, L"DefaultNameIndex", index++);
> +    set_reg_value_dword(subhkey, L"DefaultNameResourceId", 0x709); /* FIXME */
> +
> +    if (S_OK == query_property( obj, L"Name", value, ARRAYSIZE(value)))
> +        set_reg_value(subhkey, L"Name", value);
> +    if (S_OK == query_property( obj, L"PNPDeviceID", value, ARRAYSIZE(value)))
> +        set_reg_value(subhkey, L"PnpInstanceID", value);
> +    RegCloseKey( subhkey );
> +}

We're already adding some network card keys in ndis.sys, so probably
this should go there instead of wineboot.

Also, which is these does the app you're looking at actually need?  I
don't see DefaultNameIndex and DefaultNameResourceId in my Windows 10
VM and don't see PnpInstanceID on many of the adaptors in my Windows 7
VM.

Huw.



More information about the wine-devel mailing list