Author: hpoussin Date: Sat Jun 28 08:36:48 2008 New Revision: 34154
URL: http://svn.reactos.org/svn/reactos?rev=34154&view=rev Log: Set callbacks sooner, as they may be called during InitializeHandler Patch by Michael Martin, martinmnet at hotmail com See issue #3355 for more details.
Modified: trunk/reactos/drivers/network/ndis/ndis/miniport.c
Modified: trunk/reactos/drivers/network/ndis/ndis/miniport.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/ndis/m... ============================================================================== --- trunk/reactos/drivers/network/ndis/ndis/miniport.c [iso-8859-1] (original) +++ trunk/reactos/drivers/network/ndis/ndis/miniport.c [iso-8859-1] Sat Jun 28 08:36:48 2008 @@ -1418,27 +1418,7 @@ } NdisCloseConfiguration(ConfigHandle);
- /* - * Call MiniportInitialize. - */ - - NDIS_DbgPrint(MID_TRACE, ("calling MiniportInitialize\n")); - NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.InitializeHandler)( - &OpenErrorStatus, &SelectedMediumIndex, &MediaArray[0], - MEDIA_ARRAY_SIZE, Adapter, (NDIS_HANDLE)&WrapperContext); - - ZwClose(WrapperContext.RegistryHandle); - - if (NdisStatus != NDIS_STATUS_SUCCESS || - SelectedMediumIndex >= MEDIA_ARRAY_SIZE) - { - NDIS_DbgPrint(MIN_TRACE, ("MiniportInitialize() failed for an adapter.\n")); - ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock ); - return (NTSTATUS)NdisStatus; - } - /* Set handlers (some NDIS macros require these) */ - Adapter->NdisMiniportBlock.EthRxCompleteHandler = EthFilterDprIndicateReceiveComplete; Adapter->NdisMiniportBlock.EthRxIndicateHandler = EthFilterDprIndicateReceive; Adapter->NdisMiniportBlock.SendCompleteHandler = MiniSendComplete; @@ -1448,6 +1428,25 @@ Adapter->NdisMiniportBlock.PacketIndicateHandler= MiniIndicateReceivePacket; Adapter->NdisMiniportBlock.StatusHandler = MiniStatus; Adapter->NdisMiniportBlock.StatusCompleteHandler= MiniStatusComplete; + + /* + * Call MiniportInitialize. + */ + + NDIS_DbgPrint(MID_TRACE, ("calling MiniportInitialize\n")); + NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.InitializeHandler)( + &OpenErrorStatus, &SelectedMediumIndex, &MediaArray[0], + MEDIA_ARRAY_SIZE, Adapter, (NDIS_HANDLE)&WrapperContext); + + ZwClose(WrapperContext.RegistryHandle); + + if (NdisStatus != NDIS_STATUS_SUCCESS || + SelectedMediumIndex >= MEDIA_ARRAY_SIZE) + { + NDIS_DbgPrint(MIN_TRACE, ("MiniportInitialize() failed for an adapter.\n")); + ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock ); + return (NTSTATUS)NdisStatus; + }
Adapter->NdisMiniportBlock.MediaType = MediaArray[SelectedMediumIndex];