From 2e3327d922918e37928c48f2c15de2d892975dfd Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 2 Sep 2008 19:12:35 +0000 Subject: [PATCH] - Merge aicom-network-fixes up to r35889 svn path=/trunk/; revision=35891 --- reactos/drivers/network/ndis/ndis/buffer.c | 8 +++++++- reactos/drivers/network/ndis/ndis/config.c | 10 ++++++++-- reactos/drivers/network/ndis/ndis/efilter.c | 1 + reactos/drivers/network/ndis/ndis/hardware.c | 2 +- reactos/drivers/network/ndis/ndis/io.c | 3 ++- reactos/drivers/network/ndis/ndis/miniport.c | 12 +++++------- reactos/drivers/network/ndis/ndis/protocol.c | 2 ++ 7 files changed, 26 insertions(+), 12 deletions(-) diff --git a/reactos/drivers/network/ndis/ndis/buffer.c b/reactos/drivers/network/ndis/ndis/buffer.c index 4ea78f4ab5b..a87d36d6660 100644 --- a/reactos/drivers/network/ndis/ndis/buffer.c +++ b/reactos/drivers/network/ndis/ndis/buffer.c @@ -408,6 +408,8 @@ NdisAllocatePacket( NDIS_DbgPrint(MAX_TRACE, ("Status (0x%X) Packet (0x%X) PoolHandle (0x%X).\n", Status, Packet, PoolHandle)); + *Packet = NULL; + if (Pool == NULL) { *Status = NDIS_STATUS_FAILURE; @@ -488,6 +490,8 @@ NdisAllocatePacketPoolEx( "NumberOfDescriptors (%d) ProtocolReservedLength (%d).\n", Status, PoolHandle, NumberOfDescriptors, ProtocolReservedLength)); + *PoolHandle = NULL; + if (NumberOfDescriptors > 0xffff) { *Status = NDIS_STATUS_RESOURCES; @@ -528,8 +532,9 @@ NdisAllocatePacketPoolEx( *Status = NDIS_STATUS_SUCCESS; *PoolHandle = (PNDIS_HANDLE)Pool; - } else + } else { *Status = NDIS_STATUS_RESOURCES; + } } } @@ -705,6 +710,7 @@ NdisDprAllocatePacket( * PoolHandle = Handle returned by NdisAllocatePacketPool */ { + *Status = NDIS_STATUS_FAILURE; } diff --git a/reactos/drivers/network/ndis/ndis/config.c b/reactos/drivers/network/ndis/ndis/config.c index 2199328e04d..61a2da0d04a 100644 --- a/reactos/drivers/network/ndis/ndis/config.c +++ b/reactos/drivers/network/ndis/ndis/config.c @@ -193,13 +193,14 @@ NdisOpenConfiguration( NDIS_DbgPrint(MAX_TRACE, ("Called\n")); + *ConfigurationHandle = NULL; + *Status = ZwDuplicateObject(NtCurrentProcess(), RootKeyHandle, NtCurrentProcess(), &KeyHandle, 0, 0, DUPLICATE_SAME_ACCESS); if(!NT_SUCCESS(*Status)) { NDIS_DbgPrint(MID_TRACE, ("Failed to open registry configuration for this miniport\n")); - *ConfigurationHandle = NULL; *Status = NDIS_STATUS_FAILURE; return; } @@ -743,7 +744,8 @@ NdisReadNetworkAddress( if(!MiniportResource) { NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); - *Status = NDIS_STATUS_FAILURE; + ExFreePool(IntArray); + *Status = NDIS_STATUS_RESOURCES; return; } @@ -797,6 +799,8 @@ NdisOpenConfigurationKeyByIndex( NDIS_HANDLE RegKeyHandle; PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext; + *KeyHandle = NULL; + *Status = ZwEnumerateKey(ConfigurationHandle, Index, KeyBasicInformation, NULL, 0, &KeyInformationLength); if(*Status != STATUS_BUFFER_TOO_SMALL && *Status != STATUS_BUFFER_OVERFLOW && *Status != STATUS_SUCCESS) { @@ -885,6 +889,8 @@ NdisOpenConfigurationKeyByName( OBJECT_ATTRIBUTES KeyAttributes; NDIS_HANDLE RegKeyHandle; + *KeyHandle = NULL; + InitializeObjectAttributes(&KeyAttributes, KeyName, OBJ_CASE_INSENSITIVE, ConfigurationHandle, 0); *Status = ZwOpenKey(&RegKeyHandle, KEY_ALL_ACCESS, &KeyAttributes); diff --git a/reactos/drivers/network/ndis/ndis/efilter.c b/reactos/drivers/network/ndis/ndis/efilter.c index 8c72e8b65d0..90a59b99bb7 100644 --- a/reactos/drivers/network/ndis/ndis/efilter.c +++ b/reactos/drivers/network/ndis/ndis/efilter.c @@ -44,6 +44,7 @@ EthCreateFilter( *Filter = (PETH_FILTER)NewFilter; return TRUE; } + *Filter = NULL; return FALSE; } diff --git a/reactos/drivers/network/ndis/ndis/hardware.c b/reactos/drivers/network/ndis/ndis/hardware.c index f855b0410ca..022fef52daa 100644 --- a/reactos/drivers/network/ndis/ndis/hardware.c +++ b/reactos/drivers/network/ndis/ndis/hardware.c @@ -125,7 +125,7 @@ NdisMQueryAdapterResources( &MiniportBlock->AllocatedResources->List[0].PartialResourceList, ResourceListSize); *BufferSize = ResourceListSize; - *Status = STATUS_SUCCESS; + *Status = NDIS_STATUS_SUCCESS; } else { diff --git a/reactos/drivers/network/ndis/ndis/io.c b/reactos/drivers/network/ndis/ndis/io.c index 439529e3f54..160ea28be79 100644 --- a/reactos/drivers/network/ndis/ndis/io.c +++ b/reactos/drivers/network/ndis/ndis/io.c @@ -841,6 +841,8 @@ NdisMRegisterIoPortRange( PNDIS_MINIPORT_BLOCK Adapter = (PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle; ULONG AddressSpace = 1; /* FIXME The HAL handles this wrong atm */ + *PortOffset = 0; + NDIS_DbgPrint(MAX_TRACE, ("Called - InitialPort 0x%x, NumberOfPorts 0x%x\n", InitialPort, NumberOfPorts)); memset(&PortAddress, 0, sizeof(PortAddress)); @@ -878,7 +880,6 @@ NdisMRegisterIoPortRange( NDIS_DbgPrint(MAX_TRACE, ("calling MmMapIoSpace\n")); - *PortOffset = 0; *PortOffset = MmMapIoSpace(TranslatedAddress, NumberOfPorts, MmNonCached); NDIS_DbgPrint(MAX_TRACE, ("Returning 0x%x for port range\n", *PortOffset)); diff --git a/reactos/drivers/network/ndis/ndis/miniport.c b/reactos/drivers/network/ndis/ndis/miniport.c index bcad528bce8..5927af063b6 100644 --- a/reactos/drivers/network/ndis/ndis/miniport.c +++ b/reactos/drivers/network/ndis/ndis/miniport.c @@ -562,13 +562,6 @@ MiniQueryInformation( /* FIXME: Wait in pending case! */ - /* XXX is status_pending part of success macro? */ - if ((NT_SUCCESS(NdisStatus)) || (NdisStatus == NDIS_STATUS_PENDING)) - { - NDIS_DbgPrint(DEBUG_MINIPORT, ("Miniport returned status (0x%X).\n", NdisStatus)); - return NdisStatus; - } - return NdisStatus; } @@ -1017,6 +1010,7 @@ NdisInitializeWrapper( RegistryPath = ExAllocatePool(PagedPool, sizeof(UNICODE_STRING)); if(!RegistryPath) { + ExFreePool(Miniport); NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); return; } @@ -1028,6 +1022,8 @@ NdisInitializeWrapper( if(!RegistryBuffer) { NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + ExFreePool(Miniport); + ExFreePool(RegistryPath); return; } @@ -1424,6 +1420,7 @@ NdisIPnPStartDevice( { NDIS_DbgPrint(MIN_TRACE, ("MiniportInitialize() failed for an adapter.\n")); ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock ); + if (NdisStatus == NDIS_STATUS_SUCCESS) NdisStatus = NDIS_STATUS_FAILURE; return (NTSTATUS)NdisStatus; } @@ -1466,6 +1463,7 @@ NdisIPnPStartDevice( Adapter->LookaheadBuffer = NULL; } ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock ); + if (NdisStatus == NDIS_STATUS_SUCCESS) NdisStatus = NDIS_STATUS_FAILURE; return (NTSTATUS)NdisStatus; } diff --git a/reactos/drivers/network/ndis/ndis/protocol.c b/reactos/drivers/network/ndis/ndis/protocol.c index 3fa7c3922c1..59ad6f2b454 100644 --- a/reactos/drivers/network/ndis/ndis/protocol.c +++ b/reactos/drivers/network/ndis/ndis/protocol.c @@ -674,6 +674,8 @@ NdisRegisterProtocol( NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + *NdisProtocolHandle = NULL; + /* first validate the PROTOCOL_CHARACTERISTICS */ switch (ProtocolCharacteristics->MajorNdisVersion) {