[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