- Merge aicom-network-fixes up to r36009

svn path=/trunk/; revision=36010
This commit is contained in:
Cameron Gutman 2008-09-06 22:21:56 +00:00
parent 76153f2508
commit d158ab5aa3
10 changed files with 58 additions and 29 deletions

View file

@ -1293,8 +1293,7 @@ NdisIPnPStartDevice(
* NdisMQueryAdapterResources. * NdisMQueryAdapterResources.
*/ */
if (Stack->Parameters.StartDevice.AllocatedResources != NULL && if (Stack->Parameters.StartDevice.AllocatedResources != NULL)
Stack->Parameters.StartDevice.AllocatedResourcesTranslated != NULL)
{ {
ResourceCount = Stack->Parameters.StartDevice.AllocatedResources->List[0]. ResourceCount = Stack->Parameters.StartDevice.AllocatedResources->List[0].
PartialResourceList.Count; PartialResourceList.Count;
@ -1310,24 +1309,31 @@ NdisIPnPStartDevice(
return STATUS_INSUFFICIENT_RESOURCES; return STATUS_INSUFFICIENT_RESOURCES;
} }
RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResources,
Stack->Parameters.StartDevice.AllocatedResources,
ResourceListSize);
}
if (Stack->Parameters.StartDevice.AllocatedResourcesTranslated != NULL)
{
ResourceCount = Stack->Parameters.StartDevice.AllocatedResources->List[0].
PartialResourceList.Count;
ResourceListSize =
FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.
PartialDescriptors[ResourceCount]);
Adapter->NdisMiniportBlock.AllocatedResourcesTranslated = Adapter->NdisMiniportBlock.AllocatedResourcesTranslated =
ExAllocatePool(PagedPool, ResourceListSize); ExAllocatePool(PagedPool, ResourceListSize);
if (Adapter->NdisMiniportBlock.AllocatedResourcesTranslated == NULL) if (Adapter->NdisMiniportBlock.AllocatedResourcesTranslated == NULL)
{ {
ExFreePool(Adapter->NdisMiniportBlock.AllocatedResources);
Adapter->NdisMiniportBlock.AllocatedResources = NULL;
ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock ); ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock );
return STATUS_INSUFFICIENT_RESOURCES; return STATUS_INSUFFICIENT_RESOURCES;
} }
RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResources,
Stack->Parameters.StartDevice.AllocatedResources,
ResourceListSize);
RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResourcesTranslated, RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResourcesTranslated,
Stack->Parameters.StartDevice.AllocatedResourcesTranslated, Stack->Parameters.StartDevice.AllocatedResourcesTranslated,
ResourceListSize); ResourceListSize);
} }
/* /*
* Store the Bus Type, Bus Number and Slot information. It's used by * Store the Bus Type, Bus Number and Slot information. It's used by

View file

@ -805,10 +805,11 @@ NdisRegisterProtocol(
NtStatus = ZwQueryValueKey(DriverKeyHandle, &ValueName, KeyValuePartialInformation, KeyInformation, NtStatus = ZwQueryValueKey(DriverKeyHandle, &ValueName, KeyValuePartialInformation, KeyInformation,
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength, &ResultLength); sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength, &ResultLength);
ZwClose(DriverKeyHandle);
if(!NT_SUCCESS(NtStatus)) if(!NT_SUCCESS(NtStatus))
{ {
NDIS_DbgPrint(MIN_TRACE, ("Unable to query the Bind value\n")); NDIS_DbgPrint(MIN_TRACE, ("Unable to query the Bind value\n"));
ZwClose(DriverKeyHandle);
ExFreePool(KeyInformation); ExFreePool(KeyInformation);
ExFreePool(Protocol); ExFreePool(Protocol);
*Status = NDIS_STATUS_FAILURE; *Status = NDIS_STATUS_FAILURE;
@ -893,7 +894,8 @@ NdisRegisterProtocol(
*/ */
} }
*Status = NDIS_STATUS_SUCCESS; ExFreePool(KeyInformation);
*Status = NDIS_STATUS_SUCCESS;
} }

View file

@ -322,9 +322,6 @@ NdisOpenFile(
0, // PVOID EaBuffer 0, // PVOID EaBuffer
0 ); // ULONG EaLength 0 ); // ULONG EaLength
//if ( !NT_SUCCESS(*Status) )
// goto cleanup;
cleanup: cleanup:
if ( FullFileName.Buffer != NULL ) if ( FullFileName.Buffer != NULL )
{ {

View file

@ -20,9 +20,9 @@ typedef struct _PORT_SET {
FAST_MUTEX Mutex; FAST_MUTEX Mutex;
} PORT_SET, *PPORT_SET; } PORT_SET, *PPORT_SET;
VOID PortsStartup( PPORT_SET PortSet, NTSTATUS PortsStartup( PPORT_SET PortSet,
UINT StartingPort, UINT StartingPort,
UINT PortsToManage ); UINT PortsToManage );
VOID PortsShutdown( PPORT_SET PortSet ); VOID PortsShutdown( PPORT_SET PortSet );
VOID DeallocatePort( PPORT_SET PortSet, ULONG Port ); VOID DeallocatePort( PPORT_SET PortSet, ULONG Port );
BOOLEAN AllocatePort( PPORT_SET PortSet, ULONG Port ); BOOLEAN AllocatePort( PPORT_SET PortSet, ULONG Port );

View file

@ -319,11 +319,11 @@ NDIS_STATUS PrependPacket( PNDIS_PACKET Packet, PCHAR Data, UINT Length,
if( Copy ) { if( Copy ) {
NewBuf = ExAllocatePool( NonPagedPool, Length ); NewBuf = ExAllocatePool( NonPagedPool, Length );
if( !NewBuf ) return STATUS_NO_MEMORY; if( !NewBuf ) return NDIS_STATUS_RESOURCES;
RtlCopyMemory( NewBuf, Data, Length ); RtlCopyMemory( NewBuf, Data, Length );
} else NewBuf = Data; } else NewBuf = Data;
NdisAllocateBuffer( &Status, &Buffer, GlobalBufferPool, Data, Length ); NdisAllocateBuffer( &Status, &Buffer, GlobalBufferPool, NewBuf, Length );
if( Status != NDIS_STATUS_SUCCESS ) return Status; if( Status != NDIS_STATUS_SUCCESS ) return Status;
NdisChainBufferAtFront( Packet, Buffer ); NdisChainBufferAtFront( Packet, Buffer );
@ -351,7 +351,7 @@ NDIS_STATUS AllocatePacketWithBufferX( PNDIS_PACKET *NdisPacket,
PCHAR NewData; PCHAR NewData;
NewData = ExAllocatePool( NonPagedPool, Len ); NewData = ExAllocatePool( NonPagedPool, Len );
if( !NewData ) return NDIS_STATUS_NOT_ACCEPTED; // XXX if( !NewData ) return NDIS_STATUS_RESOURCES;
TrackWithTag(EXALLOC_TAG, NewData, File, Line); TrackWithTag(EXALLOC_TAG, NewData, File, Line);
if( Data ) RtlCopyMemory(NewData, Data, Len); if( Data ) RtlCopyMemory(NewData, Data, Len);

View file

@ -29,7 +29,7 @@ TDI_STATUS InfoTdiQueryGetInterfaceMIB(TDIEntityID *ID,
(PIFENTRY)ExAllocatePool( NonPagedPool, (PIFENTRY)ExAllocatePool( NonPagedPool,
sizeof(IFENTRY) + MAX_IFDESCR_LEN ); sizeof(IFENTRY) + MAX_IFDESCR_LEN );
if( !OutData ) return TDI_INVALID_REQUEST; /* Out of memory */ if( !OutData ) return TDI_NO_RESOURCES; /* Out of memory */
RtlZeroMemory( OutData, sizeof(IFENTRY) + MAX_IFDESCR_LEN ); RtlZeroMemory( OutData, sizeof(IFENTRY) + MAX_IFDESCR_LEN );

View file

@ -711,8 +711,8 @@ DriverEntry(
/* Setup network layer and transport layer entities */ /* Setup network layer and transport layer entities */
KeInitializeSpinLock(&EntityListLock); KeInitializeSpinLock(&EntityListLock);
EntityList = ExAllocatePool(NonPagedPool, sizeof(TDIEntityID) * MAX_TDI_ENTITIES ); EntityList = ExAllocatePool(NonPagedPool, sizeof(TDIEntityID) * MAX_TDI_ENTITIES );
if (!NT_SUCCESS(Status)) { if (!EntityList) {
TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
TiUnload(DriverObject); TiUnload(DriverObject);
return STATUS_INSUFFICIENT_RESOURCES; return STATUS_INSUFFICIENT_RESOURCES;
} }
@ -760,9 +760,23 @@ DriverEntry(
IPStartup(RegistryPath); IPStartup(RegistryPath);
/* Initialize transport level protocol subsystems */ /* Initialize transport level protocol subsystems */
RawIPStartup(); Status = RawIPStartup();
UDPStartup(); if( !NT_SUCCESS(Status) ) {
TCPStartup(); TiUnload(DriverObject);
return Status;
}
Status = UDPStartup();
if( !NT_SUCCESS(Status) ) {
TiUnload(DriverObject);
return Status;
}
Status = TCPStartup();
if( !NT_SUCCESS(Status) ) {
TiUnload(DriverObject);
return Status;
}
/* Initialize the lan worker */ /* Initialize the lan worker */
LANStartup(); LANStartup();

View file

@ -10,7 +10,7 @@
#include "precomp.h" #include "precomp.h"
VOID PortsStartup( PPORT_SET PortSet, NTSTATUS PortsStartup( PPORT_SET PortSet,
UINT StartingPort, UINT StartingPort,
UINT PortsToManage ) { UINT PortsToManage ) {
PortSet->StartingPort = StartingPort; PortSet->StartingPort = StartingPort;
@ -19,11 +19,13 @@ VOID PortsStartup( PPORT_SET PortSet,
PortSet->PortsToOversee - 1; PortSet->PortsToOversee - 1;
PortSet->ProtoBitBuffer = PortSet->ProtoBitBuffer =
PoolAllocateBuffer( (PortSet->PortsToOversee + 7) / 8 ); PoolAllocateBuffer( (PortSet->PortsToOversee + 7) / 8 );
if(!PortSet->ProtoBitBuffer) return STATUS_INSUFFICIENT_RESOURCES;
RtlInitializeBitMap( &PortSet->ProtoBitmap, RtlInitializeBitMap( &PortSet->ProtoBitmap,
PortSet->ProtoBitBuffer, PortSet->ProtoBitBuffer,
PortSet->PortsToOversee ); PortSet->PortsToOversee );
RtlClearAllBits( &PortSet->ProtoBitmap ); RtlClearAllBits( &PortSet->ProtoBitmap );
ExInitializeFastMutex( &PortSet->Mutex ); ExInitializeFastMutex( &PortSet->Mutex );
return STATUS_SUCCESS;
} }
VOID PortsShutdown( PPORT_SET PortSet ) { VOID PortsShutdown( PPORT_SET PortSet ) {

View file

@ -455,7 +455,11 @@ NTSTATUS TCPStartup(VOID)
return Status; return Status;
} }
PortsStartup( &TCPPorts, 1, 0xfffe ); Status = PortsStartup( &TCPPorts, 1, 0xfffe );
if( !NT_SUCCESS(Status) ) {
TCPMemShutdown();
return Status;
}
RegisterOskitTCPEventHandlers( &EventHandlers ); RegisterOskitTCPEventHandlers( &EventHandlers );
InitOskitTCP(); InitOskitTCP();

View file

@ -302,8 +302,12 @@ NTSTATUS UDPStartup(
#ifdef __NTDRIVER__ #ifdef __NTDRIVER__
RtlZeroMemory(&UDPStats, sizeof(UDP_STATISTICS)); RtlZeroMemory(&UDPStats, sizeof(UDP_STATISTICS));
#endif #endif
NTSTATUS Status;
PortsStartup( &UDPPorts, 1, 0xfffe ); Status = PortsStartup( &UDPPorts, 1, 0xfffe );
if( !NT_SUCCESS(Status) ) return Status;
/* Register this protocol with IP layer */ /* Register this protocol with IP layer */
IPRegisterProtocol(IPPROTO_UDP, UDPReceive); IPRegisterProtocol(IPPROTO_UDP, UDPReceive);