- 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.
*/
if (Stack->Parameters.StartDevice.AllocatedResources != NULL &&
Stack->Parameters.StartDevice.AllocatedResourcesTranslated != NULL)
if (Stack->Parameters.StartDevice.AllocatedResources != NULL)
{
ResourceCount = Stack->Parameters.StartDevice.AllocatedResources->List[0].
PartialResourceList.Count;
@ -1310,24 +1309,31 @@ NdisIPnPStartDevice(
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 =
ExAllocatePool(PagedPool, ResourceListSize);
if (Adapter->NdisMiniportBlock.AllocatedResourcesTranslated == NULL)
{
ExFreePool(Adapter->NdisMiniportBlock.AllocatedResources);
Adapter->NdisMiniportBlock.AllocatedResources = NULL;
ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock );
return STATUS_INSUFFICIENT_RESOURCES;
}
RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResources,
Stack->Parameters.StartDevice.AllocatedResources,
ResourceListSize);
RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResourcesTranslated,
Stack->Parameters.StartDevice.AllocatedResourcesTranslated,
ResourceListSize);
}
}
/*
* 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,
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength, &ResultLength);
ZwClose(DriverKeyHandle);
if(!NT_SUCCESS(NtStatus))
{
NDIS_DbgPrint(MIN_TRACE, ("Unable to query the Bind value\n"));
ZwClose(DriverKeyHandle);
ExFreePool(KeyInformation);
ExFreePool(Protocol);
*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 ); // ULONG EaLength
//if ( !NT_SUCCESS(*Status) )
// goto cleanup;
cleanup:
if ( FullFileName.Buffer != NULL )
{

View file

@ -20,9 +20,9 @@ typedef struct _PORT_SET {
FAST_MUTEX Mutex;
} PORT_SET, *PPORT_SET;
VOID PortsStartup( PPORT_SET PortSet,
UINT StartingPort,
UINT PortsToManage );
NTSTATUS PortsStartup( PPORT_SET PortSet,
UINT StartingPort,
UINT PortsToManage );
VOID PortsShutdown( PPORT_SET PortSet );
VOID DeallocatePort( 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 ) {
NewBuf = ExAllocatePool( NonPagedPool, Length );
if( !NewBuf ) return STATUS_NO_MEMORY;
if( !NewBuf ) return NDIS_STATUS_RESOURCES;
RtlCopyMemory( NewBuf, Data, Length );
} else NewBuf = Data;
NdisAllocateBuffer( &Status, &Buffer, GlobalBufferPool, Data, Length );
NdisAllocateBuffer( &Status, &Buffer, GlobalBufferPool, NewBuf, Length );
if( Status != NDIS_STATUS_SUCCESS ) return Status;
NdisChainBufferAtFront( Packet, Buffer );
@ -351,7 +351,7 @@ NDIS_STATUS AllocatePacketWithBufferX( PNDIS_PACKET *NdisPacket,
PCHAR NewData;
NewData = ExAllocatePool( NonPagedPool, Len );
if( !NewData ) return NDIS_STATUS_NOT_ACCEPTED; // XXX
if( !NewData ) return NDIS_STATUS_RESOURCES;
TrackWithTag(EXALLOC_TAG, NewData, File, Line);
if( Data ) RtlCopyMemory(NewData, Data, Len);

View file

@ -29,7 +29,7 @@ TDI_STATUS InfoTdiQueryGetInterfaceMIB(TDIEntityID *ID,
(PIFENTRY)ExAllocatePool( NonPagedPool,
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 );

View file

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

View file

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

View file

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

View file

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