Isabella Bosia : ndis.sys: Create network card registry keys.
Alexandre Julliard
julliard at winehq.org
Thu Sep 3 15:26:46 CDT 2020
Module: wine
Branch: master
Commit: de6db1154330a0a6b58c703c9c504c1058ef4faa
URL: https://source.winehq.org/git/wine.git/?a=commit;h=de6db1154330a0a6b58c703c9c504c1058ef4faa
Author: Isabella Bosia <ibosia at codeweavers.com>
Date: Tue Sep 1 12:41:17 2020 +0100
ndis.sys: Create network card registry keys.
Signed-off-by: Isabella Bosia <ibosia at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ndis.sys/Makefile.in | 1 +
dlls/ndis.sys/main.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+)
diff --git a/dlls/ndis.sys/Makefile.in b/dlls/ndis.sys/Makefile.in
index fa69910f16..0d58cb0d38 100644
--- a/dlls/ndis.sys/Makefile.in
+++ b/dlls/ndis.sys/Makefile.in
@@ -1,4 +1,5 @@
MODULE = ndis.sys
+IMPORTS = advapi32 ntoskrnl iphlpapi
EXTRADLLFLAGS = -Wl,--subsystem,native -mno-cygwin
C_SRCS = \
diff --git a/dlls/ndis.sys/main.c b/dlls/ndis.sys/main.c
index 90c8c3cc88..3004f6e76f 100644
--- a/dlls/ndis.sys/main.c
+++ b/dlls/ndis.sys/main.c
@@ -21,21 +21,70 @@
#include <stdarg.h>
+#define NONAMELESSUNION
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
#include "winbase.h"
#include "winternl.h"
+#include "winioctl.h"
+#include "winsock2.h"
+#include "ws2ipdef.h"
+#include "iphlpapi.h"
+#include "netioapi.h"
+#include "ntddndis.h"
#include "ddk/wdm.h"
#include "ddk/ndis.h"
+#include "winreg.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(ndis);
+static void add_key(const WCHAR *guidstrW, const MIB_IF_ROW2 *netdev)
+{
+ HKEY card_key;
+ WCHAR keynameW[100];
+
+ swprintf( keynameW, ARRAY_SIZE(keynameW), L"Software\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\%d", netdev->InterfaceIndex );
+ if (RegCreateKeyExW( HKEY_LOCAL_MACHINE, keynameW, 0, NULL,
+ REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &card_key, NULL ) == ERROR_SUCCESS)
+ {
+ RegSetValueExW( card_key, L"Description", 0, REG_SZ, (BYTE *)netdev->Description, (lstrlenW(netdev->Description) + 1) * sizeof(WCHAR) );
+ RegSetValueExW( card_key, L"ServiceName", 0, REG_SZ, (BYTE *)guidstrW, (lstrlenW(guidstrW) + 1) * sizeof(WCHAR) );
+ RegCloseKey( card_key );
+ }
+}
+
+static void create_network_devices(DRIVER_OBJECT *driver)
+{
+ MIB_IF_TABLE2 *table;
+ ULONG i;
+
+ if (GetIfTable2( &table ) != NO_ERROR)
+ return;
+
+ for (i = 0; i < table->NumEntries; i++)
+ {
+ GUID *guid = &table->Table[i].InterfaceGuid;
+ WCHAR guidstrW[39];
+
+ swprintf( guidstrW, ARRAY_SIZE(guidstrW), L"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
+ guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1],
+ guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5],
+ guid->Data4[6], guid->Data4[7] );
+
+ add_key( guidstrW, &table->Table[i] );
+ }
+
+ FreeMibTable( table );
+}
+
NTSTATUS WINAPI DriverEntry(DRIVER_OBJECT *driver, UNICODE_STRING *path)
{
TRACE("(%p, %s)\n", driver, debugstr_w(path->Buffer));
+ create_network_devices( driver );
+
return STATUS_SUCCESS;
}
More information about the wine-cvs
mailing list