From 92d6d7210c9186ea0e517dc9d5c4c526b2b37df9 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 22 Jul 2010 19:01:49 +0000 Subject: [PATCH 1/1] [NDIS] - Refresh the protocol bindings after a new miniport is added - Adapters added after boot work now - One step closer to Live CD networking svn path=/trunk/; revision=48193 --- reactos/drivers/network/ndis/include/protocol.h | 4 ++++ reactos/drivers/network/ndis/ndis/miniport.c | 13 +++++++++++++ reactos/drivers/network/ndis/ndis/protocol.c | 3 +++ 3 files changed, 20 insertions(+) diff --git a/reactos/drivers/network/ndis/include/protocol.h b/reactos/drivers/network/ndis/include/protocol.h index 99f92ea244d..171ecb6a4f2 100644 --- a/reactos/drivers/network/ndis/include/protocol.h +++ b/reactos/drivers/network/ndis/include/protocol.h @@ -69,4 +69,8 @@ NdisIPnPCancelStopDevice( NDIS_STATUS proSendPacketToMiniport(PLOGICAL_ADAPTER Adapter, PNDIS_PACKET Packet); +VOID +NTAPI +ndisBindMiniportsToProtocol(OUT PNDIS_STATUS Status, IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics); + /* EOF */ diff --git a/reactos/drivers/network/ndis/ndis/miniport.c b/reactos/drivers/network/ndis/ndis/miniport.c index 4492caffe32..b1ca384cd8d 100644 --- a/reactos/drivers/network/ndis/ndis/miniport.c +++ b/reactos/drivers/network/ndis/ndis/miniport.c @@ -1778,6 +1778,8 @@ NdisIPnPStartDevice( LARGE_INTEGER Timeout; UINT MaxMulticastAddresses; ULONG BytesWritten; + PLIST_ENTRY CurrentEntry; + PPROTOCOL_BINDING ProtocolBinding; /* * Prepare wrapper context used by HW and configuration routines. @@ -2056,6 +2058,17 @@ NdisIPnPStartDevice( /* Put adapter in adapter list for this miniport */ ExInterlockedInsertTailList(&Adapter->NdisMiniportBlock.DriverHandle->DeviceList, &Adapter->MiniportListEntry, &Adapter->NdisMiniportBlock.DriverHandle->Lock); + /* Refresh bindings for all protocols */ + CurrentEntry = ProtocolListHead.Flink; + while (CurrentEntry != &ProtocolListHead) + { + ProtocolBinding = CONTAINING_RECORD(CurrentEntry, PROTOCOL_BINDING, ListEntry); + + ndisBindMiniportsToProtocol(&NdisStatus, &ProtocolBinding->Chars); + + CurrentEntry = CurrentEntry->Flink; + } + return STATUS_SUCCESS; } diff --git a/reactos/drivers/network/ndis/ndis/protocol.c b/reactos/drivers/network/ndis/ndis/protocol.c index dd56c40bf95..381739165e4 100644 --- a/reactos/drivers/network/ndis/ndis/protocol.c +++ b/reactos/drivers/network/ndis/ndis/protocol.c @@ -1002,7 +1002,10 @@ ndisBindMiniportsToProtocol(OUT PNDIS_STATUS Status, IN PNDIS_PROTOCOL_CHARACTER { BIND_HANDLER BindHandler = ProtocolCharacteristics->BindAdapterHandler; if(BindHandler) + { BindHandler(Status, BindContext, &DeviceName, &RegistryPath, 0); + NDIS_DbgPrint(MIN_TRACE, ("%wZ's BindAdapter handler returned 0x%x for %wZ\n", &ProtocolCharacteristics->Name, *Status, &DeviceName)); + } else NDIS_DbgPrint(MIN_TRACE, ("No protocol bind handler specified\n")); } -- 2.17.1