Isabella Bosia : ndis.sys: Create network card devices.

Alexandre Julliard julliard at winehq.org
Thu Sep 3 15:26:46 CDT 2020


Module: wine
Branch: master
Commit: 1f9d83f849a84eef1f6a8b114375136ff1fd3c18
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1f9d83f849a84eef1f6a8b114375136ff1fd3c18

Author: Isabella Bosia <ibosia at codeweavers.com>
Date:   Tue Sep  1 12:41:18 2020 +0100

ndis.sys: Create network card devices.

Signed-off-by: Isabella Bosia <ibosia at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ndis.sys/main.c | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/dlls/ndis.sys/main.c b/dlls/ndis.sys/main.c
index 3004f6e76f..73eeb8d584 100644
--- a/dlls/ndis.sys/main.c
+++ b/dlls/ndis.sys/main.c
@@ -55,6 +55,32 @@ static void add_key(const WCHAR *guidstrW, const MIB_IF_ROW2 *netdev)
     }
 }
 
+static int add_device(DRIVER_OBJECT *driver, const WCHAR *guidstrW, MIB_IF_ROW2 *netdev)
+{
+    WCHAR nameW[47], linkW[51];
+    UNICODE_STRING name, link;
+    DEVICE_OBJECT *device;
+    NTSTATUS status;
+
+    swprintf( nameW, ARRAY_SIZE(nameW), L"\\Device\\%s", guidstrW );
+    RtlInitUnicodeString( &name, nameW );
+
+    swprintf( linkW, ARRAY_SIZE(linkW), L"\\DosDevices\\%s", guidstrW );
+    RtlInitUnicodeString( &link, linkW );
+
+    if (!(status = IoCreateDevice( driver, sizeof(*netdev), &name, 0, 0, FALSE, &device )))
+        status = IoCreateSymbolicLink( &link, &name );
+    if (status)
+    {
+        FIXME( "failed to create device error %x\n", status );
+        return 0;
+    }
+
+    memcpy( device->DeviceExtension, netdev, sizeof(*netdev) );
+    return 1;
+}
+
+
 static void create_network_devices(DRIVER_OBJECT *driver)
 {
     MIB_IF_TABLE2 *table;
@@ -73,7 +99,8 @@ static void create_network_devices(DRIVER_OBJECT *driver)
                   guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5],
                   guid->Data4[6], guid->Data4[7] );
 
-        add_key( guidstrW, &table->Table[i] );
+        if (add_device( driver, guidstrW, &table->Table[i] ))
+            add_key( guidstrW, &table->Table[i] );
     }
 
     FreeMibTable( table );




More information about the wine-cvs mailing list