Signed-off-by: Haoyang Chen chenhaoyang@uniontech.com --- dlls/ndis.sys/main.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/dlls/ndis.sys/main.c b/dlls/ndis.sys/main.c index 94c19ffca53..25faf9f7dad 100644 --- a/dlls/ndis.sys/main.c +++ b/dlls/ndis.sys/main.c @@ -123,6 +123,7 @@ static void add_key(const WCHAR *guidstrW, const MIB_IF_ROW2 *netdev) { HKEY card_key; WCHAR keynameW[100]; + HKEY sub_key;
swprintf( keynameW, ARRAY_SIZE(keynameW), L"Software\Microsoft\Windows NT\CurrentVersion\NetworkCards\%d", netdev->InterfaceIndex ); if (RegCreateKeyExW( HKEY_LOCAL_MACHINE, keynameW, 0, NULL, @@ -132,6 +133,22 @@ static void add_key(const WCHAR *guidstrW, const MIB_IF_ROW2 *netdev) RegSetValueExW( card_key, L"ServiceName", 0, REG_SZ, (BYTE *)guidstrW, (lstrlenW(guidstrW) + 1) * sizeof(WCHAR) ); RegCloseKey( card_key ); } + + swprintf( keynameW, ARRAY_SIZE(keynameW), L"System\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}"); + if (RegCreateKeyExW( HKEY_LOCAL_MACHINE, keynameW, 0, NULL, + REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &card_key, NULL ) == ERROR_SUCCESS) + { + swprintf( keynameW, ARRAY_SIZE(keynameW), L"%s\Connection", guidstrW); + if (RegCreateKeyExW( card_key, keynameW, 0, NULL, + REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &sub_key, NULL ) == ERROR_SUCCESS) + { + RegSetValueExW( sub_key, L"Name", 0, REG_SZ, (BYTE *)netdev->Description, (lstrlenW(netdev->Description) + 1) * sizeof(WCHAR) ); + RegSetValueExW( sub_key, L"PnpInstanceID", 0, REG_SZ, (BYTE *)L"PCI\VEN_8086&DEV_100E&SUBSYS_001E8086&REV_02\3&267A616A&0&18", + (lstrlenW(L"PCI\VEN_8086&DEV_100E&SUBSYS_001E8086&REV_02\3&267A616A&0&18") + 1) * sizeof(WCHAR) ); + RegCloseKey( sub_key ); + } + RegCloseKey( card_key ); + } }
static int add_device(DRIVER_OBJECT *driver, const WCHAR *guidstrW, MIB_IF_ROW2 *netdev)
Signed-off-by: Haoyang Chen chenhaoyang@uniontech.com --- dlls/wbemprox/builtin.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c index 862c461d8b7..69bd548e032 100644 --- a/dlls/wbemprox/builtin.c +++ b/dlls/wbemprox/builtin.c @@ -2712,6 +2712,32 @@ static WCHAR *get_networkadapter_guid( const IF_LUID *luid ) return guid_to_str( &guid ); }
+static WCHAR *get_networkadapter_deviceid(const WCHAR *guid) +{ + HKEY key; + WCHAR keynameW[256]; + WCHAR *ret; + DWORD size = 256; + + if (!guid) return NULL; + + swprintf( keynameW, ARRAY_SIZE(keynameW), L"System\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\%s\Connection", guid); + if (RegOpenKeyW( HKEY_LOCAL_MACHINE, keynameW, &key )) return NULL; + if (!(ret = heap_alloc( size * sizeof(WCHAR) ))) + { + RegCloseKey(key); + return NULL; + } + + if(RegQueryValueExW(key, L"PnpInstanceID", NULL, NULL, (BYTE *)ret, &size)) + { + heap_free(ret); + ret = NULL; + } + RegCloseKey(key); + return ret; +} + static enum fill_status fill_networkadapter( struct table *table, const struct expr *cond ) { WCHAR device_id[11]; @@ -2758,7 +2784,7 @@ static enum fill_status fill_networkadapter( struct table *table, const struct e rec->name = heap_strdupW( aa->FriendlyName ); rec->netconnection_status = get_connection_status( aa->OperStatus ); rec->physicaladapter = physical; - rec->pnpdevice_id = L"PCI\VEN_8086&DEV_100E&SUBSYS_001E8086&REV_02\3&267A616A&1&18"; + rec->pnpdevice_id = get_networkadapter_deviceid(rec->guid); rec->servicename = heap_strdupW( aa->FriendlyName ); rec->speed = 1000000; if (!match_row( table, row, cond, &status ))