Module: wine Branch: master Commit: 1f9d83f849a84eef1f6a8b114375136ff1fd3c18 URL: https://source.winehq.org/git/wine.git/?a=commit;h=1f9d83f849a84eef1f6a8b114...
Author: Isabella Bosia ibosia@codeweavers.com Date: Tue Sep 1 12:41:18 2020 +0100
ndis.sys: Create network card devices.
Signed-off-by: Isabella Bosia ibosia@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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 );